国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表

2017-04-27 10:44喬治強(qiáng)
電腦知識(shí)與技術(shù) 2016年29期

喬治強(qiáng)

摘要:對(duì)軟件設(shè)計(jì)中常涉及的動(dòng)態(tài)報(bào)表輸出問(wèn)題,NPOI是一個(gè)開源的讀寫excel文件的組件,通過(guò)在軟件中調(diào)用NPOI組件、設(shè)計(jì)報(bào)表模版,并將數(shù)據(jù)填充到Excel文件中,解決了軟件設(shè)計(jì)中報(bào)表定制輸出的問(wèn)題,并在應(yīng)用軟件的開發(fā)中得到應(yīng)用。并在基于c#開發(fā)的系統(tǒng)中實(shí)現(xiàn)了Excel動(dòng)態(tài)報(bào)表制作技術(shù)。

關(guān)鍵詞:NOPI;動(dòng)態(tài)報(bào)表;報(bào)表輸出

文獻(xiàn)編號(hào):TP317 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(201 6129-0101-02

1背景

在管理類軟件應(yīng)用中,用戶需要生成各種復(fù)雜報(bào)表,還要求報(bào)表在使用期可以更改格式。以delphi、c#為代表的編程語(yǔ)言中普遍提供報(bào)表設(shè)計(jì)器,但大都是在軟件設(shè)計(jì)期指定報(bào)表格式,編譯后用戶不能不能變更或增加報(bào)表。為了解決這些問(wèn)題,本文采用NPOI組件,NPOI是一款開源免費(fèi)的組件,不依賴Microsoft Office環(huán)境,NPOI還可以應(yīng)用Microsoft Office本身的公式及格式,在軟件中實(shí)現(xiàn)客戶自定義報(bào)表格式,軟件填充數(shù)據(jù),從而很好的解決了這一問(wèn)題。

2實(shí)現(xiàn)原理

用戶使用時(shí)自定義Excel模版,Excel模版存入數(shù)據(jù)庫(kù),并制定用戶打印數(shù)據(jù)對(duì)應(yīng)Excel單元格的坐標(biāo)(row和col)。用戶打印時(shí),從數(shù)據(jù)庫(kù)下載對(duì)應(yīng)的Excel模版生成響應(yīng)的Excel文件,生成需要打印的數(shù)據(jù),并輸入響應(yīng)的Excel單元格中。

3實(shí)現(xiàn)過(guò)程

3.1報(bào)表信息

系統(tǒng)采用access數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中存放一個(gè)模版信息表和多個(gè)數(shù)據(jù)源信息表。每份報(bào)表的數(shù)據(jù)由一個(gè)模版信息表加若干個(gè)數(shù)據(jù)源組成。

模版信息表:模版編號(hào)(主鍵,自動(dòng)生成)、模版名稱、模版內(nèi)容(OLE對(duì)象,即二進(jìn)制數(shù)據(jù))。模版內(nèi)容自段是要存儲(chǔ)xsl模版的文件,該文件定義了格式信息。模版信息表存儲(chǔ)對(duì)模版的定義,是一個(gè)excel文件及報(bào)表名。軟件生成報(bào)表時(shí)需要將模版下載并保存用戶目錄上,然后對(duì)模版(excel文件)賦值。

數(shù)據(jù)源:模版編號(hào)、字段名、記錄類型、開始行號(hào)、列號(hào),行數(shù),每頁(yè)重復(fù)。

每一份報(bào)表由表頭、報(bào)表主體、表尾組成;表頭和表尾可以選擇每頁(yè)重復(fù);報(bào)表主體是多條記錄,由多行構(gòu)成。表頭、報(bào)表主體、表尾可以分別由不同的數(shù)據(jù)源構(gòu)成,整個(gè)數(shù)據(jù)填充過(guò)程分三步完成。

3.2保存excel模版

將excel模版作為access數(shù)據(jù)庫(kù)的字段存入數(shù)據(jù)庫(kù)。生成報(bào)表時(shí)則將模版取出保存為本地文件,然后將數(shù)據(jù)輸出到模版中。

Filelnfo fi=new Filelnfo(fileName);//讀取文件

FileStream fs=fi.OpenRead();

bytel]bytes=new byte[fs.Length];

fs.Read(bytes,0,Convert.ToInt32(fs.Length));//將文件轉(zhuǎn)換為二進(jìn)制流

string eonnstr="Provider=Mierosoft.Jet.OLEDB.4.0;Da-ta Souree=C:\\Lrpt.mdb":

OleDbConnection cn=new OleDbConnection(connstr);

OleDbCommand cm=new OleDbCommand();

cm.Connection=cn;

cm.CommandType=CommandType.Text;

if(cn.State==0)cn.Open();

3.3讀取excel模版

從數(shù)據(jù)庫(kù)讀出數(shù)據(jù),并將二進(jìn)制數(shù)據(jù)轉(zhuǎn)儲(chǔ)為本地文件

OleDbDataReader dT=null;

//中間有關(guān)數(shù)據(jù)庫(kù)操作代碼省略,am是OleDbCom-mand對(duì)象

3.3基于nopi組件實(shí)現(xiàn)報(bào)表輸出

在實(shí)現(xiàn)將數(shù)據(jù)輸入到excel模版過(guò)程中,需要解決讀寫ex-cel文件的問(wèn)題。通過(guò)編程方式讀寫excel文件的方式有三種:

1)OleDb方式,將excel文件當(dāng)作一個(gè)DataBase,而excel工作表作為一個(gè)table,是將excel的列名當(dāng)作字段名,excel行當(dāng)作table的一條記錄,通過(guò)sql語(yǔ)言實(shí)現(xiàn)讀寫。用這種方法讀取Excel速度還是非常的快的,但這種方式讀取數(shù)據(jù)的時(shí)候不太靈活。

2)Com組件的方式讀取Excel,這種方式需要先引用Micro-soft.Office.Interop.Excel。web方式實(shí)現(xiàn)時(shí)需要服務(wù)器安裝excel和配置網(wǎng)絡(luò)安全選項(xiàng)??梢苑浅l`活的讀取Excel中的數(shù)據(jù),基于單元格方式讀取的,所以讀寫數(shù)據(jù)很慢,太大時(shí)不建議使用。

3)NPOI方式讀取Excel,NPOI是POI項(xiàng)目的.NET版本。POI是一個(gè)Apache軟件基金會(huì)開源的Java讀寫Excel、WORD等微軟文檔的項(xiàng)目。Nopi模式可以脫離excel讀寫excd文檔,可適用于c/s和b/s模式。

本文就采用nopi模式實(shí)現(xiàn)excel中數(shù)據(jù)的寫入。

方正县| 扎兰屯市| 枞阳县| 喀喇| 从江县| 睢宁县| 金川县| 永和县| 化州市| 丹寨县| 普兰店市| 玛沁县| 莫力| 吴桥县| 博爱县| 新邵县| 石屏县| 乌兰县| 大名县| 上虞市| 常熟市| 静乐县| 西青区| 师宗县| 西林县| 宁海县| 扶风县| 旬阳县| 黎平县| 顺昌县| 崇礼县| 白玉县| 阳高县| 周口市| 巩留县| 和龙市| 开阳县| 永宁县| 子洲县| 阿勒泰市| 东乡族自治县|