999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Delphi編程實現Excel報表自動生成和發布

2013-12-31 00:00:00冷建功趙健
科技創新與應用 2013年11期

摘 要:文章介紹如何使用 Delphi 編程通過定義報表內容描述、Excel 模板文件和服務器描述文件實現 Oracle 數據庫和 Excel 模板文件的數據交換,并以 Ftp 方式自動發布到 Web 數據發布平臺。

關鍵詞:Delphi;Excel模板;報表定義;Ftp

1 引言

隨著計算機應用技術的快速發展,Excel 電子表格的普及,工作中常常需要從不同的信息管理系統中查詢統計數據并以 Excel 表格方式展現報表。由于行業或者業務部門需求的變化,導致報表格式、種類繁多。一些復雜報表,需求在軟件開發期間都無法明確,為了解決此類問題,采用了表格功能強大的 Excel 作為報表模板,Delphi 程序根據報表數據定義動態填入數據,完成數據填充后以 Ftp 方式上傳填寫完數據的文件到 Web 數據發布平臺,從而實現 Excel 報表的自動生成和發布功能。

2 實現原理

2.1 按照業務部門的需求,根據需要的報表格式,編輯好Excel報表模板文件;根據報表的數據內容和區域,編寫好報表定義文件。

2.2 以報表定義文件文件名作為運行的參數,在操作系統下創建批處理命令,并可以根據實際需要把批處理加入操作系統的計劃任務,實現按程序自動運行。

2.3 程序根據報表定義文件的描述,主要做如下操作:①讀取指定的 Excel 模板文件;②到指定的數據庫服務器查詢數據并填充 Excel 模板文件;③以Ftp方式上傳生成好的Excel報表文件到FTP服務器。

3 實現過程描述

3.1 報表定義文件

采用可擴展標記語言(XML文件描述),主要內容描述如下:

report name<!-報表名稱-->

<!-excel 模板文件-->

D:\xxxx\xxxxxx.xls<!--輸出文件名-->

1<!-輸出文件是否自動添加日期-->

ftp server name<!--ftp服務器名稱-->

ftp remote dir<!--上傳ftp目錄-->

……

<!--要填充的數據區域,可以多個-->

database name<!--對應數據庫名稱-->

1<!-- 數據區域對應 excel 頁面-->

n1,n2,n3,n4<!--數據區域 起始行、列, 截止行、列-->

select col1,col2,… from table_name<!--對應sql腳本文件-->

<!-存儲過程名-->

<!-返回游標名-->

……

……

在 Delphi 中使用控件解析方法生成 XML 文件接口框架代碼,通過生成的接口單元讀取 XML 文件,主要代碼如下:

Var xmlReport:IXMLReportType;//定義報表定義文件變量

……

xmlReport := LoadReport(報表定義XML文件);//讀取報表定義文件

if length(trim(xmlReport.Ftpserver))>0 then //是否指定FTP上傳服務器

uplaodFile(xmlReport.output);//上傳文件到Ftp服務器

……

3.2 服務器定義文件

文件格式同報表定義文件,主要內容及描述如下:

<!-- oracle數據庫服務器-->

<!-數據庫服務器,可以多個-->

server name<!-數據庫名稱,對應報表定義的dbname--> user/pwd@ip:port:sid<!--連接字串-->

……

<!--ftp服務器-->

<!-ftp服務器,可以多個-->

ftp server name<!--ftp服務,對應報表定義的ftpserver -->

xxx.xxx.xxx.xxx<!-- 服務器IP地址-->

21<!--端口號-->

5000<!-- 超時時間 毫秒-->

username<!-- 用戶名 -->

password<!-- 密碼 -->

……

Delphi 處理該文件方法同上,根據指定服務器名稱取查找服務器子節點,主要代碼如下:

//根據指定的FTP名稱,取服務器定義文件中 FTP 中節點

for i := 0 to xmlServers.Ftp.ChildNodes.Count - 1 do begin

if (trim(xmlServers.Ftp.server[i].Name) = trim(serverName)) then begin

result := xmlServers.Ftp.server[i]; exit; end;

end;

3.3 采用第三方數據庫控件 ODAC 訪問 Oracle 數據庫

ODAC 全稱 Oracle Data Access Components,是 Oracle 數據存取組件,直接使用 Oracle 接口(OCI),在應用中建立連接可以使用 ODAC Net 選項無需在客戶機上安裝 Oralce 客戶端,僅需 TCP/IP 支持,本次開發中使用了 TOraSession 和 TOraQuery 兩個控件,主要代碼如下:

if oraSession.Connected then oraSession.Close; //關閉數據庫連接

oraSession.ConnectString := getOracleServerNode(OracleServerNname).ConnectString;//修改連接字串, 函數 getOracleServerNode 返回變量 Oracle 服務器節點;

oraSession.Connect;//連接數據庫;

ToraQuery 的使用方法同 Delphi 中 TQuery;

3.4 Oracle 數據集填充 Excel 數據區域

根據指定數據區域和SQL語句向Excel模板文件中填寫數據,注意點:SQL語句運行結果和指定數據區域要一一對應。

//處理Excel模板主要代碼 excelTemplate 類型為 Variant;

excelTemplate := CreateOleObject( 'Excel.Application' );

excelTemplate.Visible := 1;//設置程序運行時為不可見

excelTemplate.WorkBooks.Open(Excel模板文件);

……

excelTemplate.workbooks[1].saveas(outFile);//保存Execl模板文件

excelTemplate.quit; //關閉

//填充 OraQuery 數據集到 excel 模板文件主要代碼, rectarea 為報表定義文件中當前數據區域節點

rect := strToRect(rectarea.Rect);// strToRect為自定義 String 轉 TRect 函數

excelTemplate.WorkSheets[rectarea.Sheet].Activate;//指定 excelTemplate中sheet;

oraQuery.First;

for nowRow := rect.Top to rect.Bottom do begin

for nowCol := rect.Left to rect.Right do begin

excelTemplate.Cells[nowRow,nowCol] := oraQuery.FieldList[nowCol-rect.Left].AsString; end;

oraQuery.Next;

end;

……

采用Delphi中 TNMFTP 控件上傳文件

所有數據區域數據填充結束后,根據報表定義文件中指定的 FTP 服務器名稱,在服務器定義中查找對應 FTP 服務器節點上傳文件,實現主要代碼如下:

FtpFile:=TNMFTP.create(nil);

FtpFile.Host:= trim(serverFtp.addr); //FTP設置服務器地址

FtpFile.Port:= StrToInt (serverFtp.port); //FTP設置端口號

FtpFile.UserID:=trim(serverFtp.user); //FTP設置用戶名

FtpFile.Password:=trim(serverFtp.pwd); //FTP設置口令

FtpFile.TimeOut:= StrToInt(serverFtp.timeout); //FTP設置延時

……

If FtpFile.Connected then FtpFile.Mode(MODE_BYTE);//設置按二進制方式傳

FtpFile.Upload(xmlReport.output, xmlReport.ftpdir+ ExtractFileName (xmlReport.output));//上傳文件

……

4 結束語

Excel是使用廣泛的辦公軟件,通過Excel與Delphi結合,使用者只要熟悉Oracle數據庫查詢語言就可以設計出比較復雜的報表格式,并實現報表的定期自動生成與上傳,切實提高了工作效率。

參考文獻

[1]耿宏運,等.Delphi6組件大全[M].北京:電子工業出版社,2002,7.

[2]Casteel,J.Oracle9i開發指南(PL\SQL程序設計)[M].北京:清華大學出版社,2004,3.

主站蜘蛛池模板: 国产一二视频| 免费久久一级欧美特大黄| 国模私拍一区二区| 国产人妖视频一区在线观看| 亚洲精品卡2卡3卡4卡5卡区| 青青草原国产av福利网站| 青青操国产| 国产不卡在线看| 亚洲AV无码久久天堂| 一级片一区| 91丝袜美腿高跟国产极品老师| 国产一区二区免费播放| 国产乱子伦一区二区=| 亚洲国产精品一区二区第一页免 | 国产精品女同一区三区五区| 欧美19综合中文字幕| 亚洲国产一区在线观看| 萌白酱国产一区二区| 国产综合精品一区二区| 欧美亚洲另类在线观看| 九九热这里只有国产精品| 国产欧美自拍视频| 日韩无码视频专区| 成人国产免费| 亚洲成人高清在线观看| 亚洲首页在线观看| 国产小视频免费| 国产精品亚洲五月天高清| 亚洲欧美成人综合| 欧洲高清无码在线| 久久免费视频6| 欧美一级视频免费| 成人小视频在线观看免费| 亚洲天堂视频在线观看| 高清欧美性猛交XXXX黑人猛交 | 亚洲午夜天堂| 4虎影视国产在线观看精品| 久久亚洲国产最新网站| 欧美性猛交一区二区三区| 亚洲一区二区三区在线视频| 在线观看免费AV网| 久久伊人色| 98超碰在线观看| 欧美a在线| 亚洲精品在线91| 国产在线观看精品| 毛片免费在线| 美女潮喷出白浆在线观看视频| 免费一级无码在线网站| 婷婷亚洲天堂| 欧洲亚洲一区| 国产极品美女在线播放| 久久一本精品久久久ー99| 国产亚卅精品无码| 凹凸国产熟女精品视频| 激情六月丁香婷婷四房播| 真实国产乱子伦视频| 制服丝袜 91视频| 在线观看国产精美视频| 国产无码在线调教| 欧美日本不卡| 一级高清毛片免费a级高清毛片| 国产精品成人AⅤ在线一二三四 | 一级香蕉视频在线观看| 久久久久无码精品| 中国黄色一级视频| av一区二区三区在线观看| 97影院午夜在线观看视频| 福利在线一区| 精品国产香蕉在线播出| 亚洲成aⅴ人片在线影院八| 欧美日韩精品综合在线一区| 人人看人人鲁狠狠高清| 国产精品视屏| 国产素人在线| 69免费在线视频| 99久久精品免费看国产免费软件| 九九视频免费看| 欧美三级不卡在线观看视频| 精品乱码久久久久久久| 精品亚洲国产成人AV| 亚洲精品视频网|