版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、在C#中利用Excel做高級報表浙江省麗水市汽車運輸集團有限公司信息中心 茍安廷 Visual Studio.Net 自2001年2月問世以來,受到越來越多人的喜愛,C#做為主力軍,集VB、Delphi的簡單和VC的簡煉與強大于一體,更是讓許多人愛不釋手,紛紛倒向它的懷抱。通常的軟件都要用到數(shù)據(jù)庫,數(shù)據(jù)庫中必然要用到報表,在Visual Studio.Net中自帶了一個水晶報表,雖然功能十分強大,但市面上相關(guān)資料非常缺乏,網(wǎng)上全面介紹其使用的文章也屈指可數(shù)。Excel是微軟公司辦公自動化套件中的一個軟件,主要是用來處理電子表格。Excel以其功能強大,界面友好等受到了許多用戶的歡迎,幾乎每一臺
2、機器都安裝了它,因此,我們可以將數(shù)據(jù)導(dǎo)入Excel進行排版。由于Excel的格式是封閉的,無法直接創(chuàng)建一個Excel文件然后來排版,只有借助Com組件來完成,同樣,介紹用C#操作Excel的文章也就那么幾篇,基本上都是告訴你如何新建一個Excel文件,然后,將數(shù)據(jù)寫入某單元格,最多再零星告訴你如何合并單元格,真正使用起來根本無法用C#做出漂亮報表。本文巧妙利用Excel的宏來自動排版,大大減少了工作量,而且可以隨時修改模板而無須修改程序,非常實用。本人使用的是Office 2000,操作系統(tǒng)為windows 2000 professinal,為使問題簡單化,這里不介紹數(shù)據(jù)庫的知識,我一個二維數(shù)
3、組來代表一個數(shù)據(jù)庫中的表,我們的目的是將該數(shù)組放到Excel中,并排版成需要的格式,數(shù)組如下:車牌號類 型品 牌型 號顏 色附加費證號車架號浙KA3676危險品貨車鐵風(fēng)SZG9220YY白1110708900022836浙KA4109危險品貨車解放CA4110P1K2白223132010898浙KA0001A危險品貨車南明LSY9190WS白1110205458浙KA0493上普貨貨車解放LSY9190WS白1110255971浙KA1045普貨貨車解放LSY9171WCD藍1110391226浙KA1313普貨貨車解放9190WCD藍1110315027浙KA1322普貨貨車解放LSY919
4、0WS藍浙KA1575普貨貨車解放LSY9181WCD藍1110314149浙KA1925普貨貨車解放LSY9220WCD藍1110390626浙KA2258普貨貨車解放LSY9220WSP藍111048154200320為了在C#中使用Excel,我們要先做一點準備工作,通過查找(前提是你安裝Visual Studio.Net和Excel 2000),在你的計算機中找到TlbImp和Excel9.olb,將他們復(fù)制到一個文件夾中,在DOS窗口中執(zhí)行 TlbImp Excel9.olb,這時會產(chǎn)生以下三個文件:Excel.dll、Office.dll和VBIDE.dll。我們來完成兩項任務(wù),一
5、是按網(wǎng)上文章介紹的方法,增加將數(shù)據(jù)寫入一個Excel文件,也就是做一個簡單報表,二是用Excel創(chuàng)建一個文件,然后以此文件為模板生成高級報表。打開Visual Studio.Net,新建一個C#的windows應(yīng)用程序,取名為MyExcel。根據(jù)個人愛好,對窗口做一些美化工作,然后放兩個按鈕:btnNormal和btnAdvance,Caption分別為“普通報表”和“高級報表”。從菜單中選擇“項目”“添加應(yīng)用”,在彈出的對話框中選com頁,再點瀏覽按鈕,選擇剛才生成的三個文件,如下:點“打開”按鈕,再點“確定”按鈕。切換到代碼窗口中,在文件頭添加下面兩個引用:using System.IO;
6、using System.Reflection;再添加一個二維數(shù)組來表示數(shù)據(jù)表:private string , myData= "車牌號","類 型","品 牌","型 號","顏 色","附加費證號","車架號","浙KA3676","危險品","貨車","鐵風(fēng)SZG9220YY","白","1110708900","022
7、836","浙KA4109","危險品","貨車","解放CA4110P1K2","白","223132","010898","浙KA0001A","危險品","貨車","南明LSY9190WS","白","1110205458","0474636","浙KA0493","上普貨
8、","貨車","解放LSY9190WS","白","1110255971","0094327","浙KA1045","普貨","貨車","解放LSY9171WCD","藍","1110391226","0516003","浙KA1313","普貨","貨車","解放9190WCD
9、","藍","1110315027","0538701","浙KA1322","普貨","貨車","解放LSY9190WS","藍","24323332","0538716","浙KA1575","普貨","貨車","解放LSY9181WCD","藍","1110314149&q
10、uot;,"0113018","浙KA1925","普貨","貨車","解放LSY9220WCD","藍","1110390626","00268729","浙KA2258","普貨","貨車","解放LSY9220WSP","藍","111048152","00320"切換回設(shè)計窗口,雙擊“普通報
11、表”按鈕,設(shè)計普通報表,代碼如下:private void btnNormal_Click(object sender, System.EventArgs e)/創(chuàng)建一個Excel文件Excel.Application myExcel = new Excel.Application ( ) ;myExcel.Application.Workbooks.Add ( true ) ;/讓Excel文件可見myExcel.Visible=true;/第一行為報表名稱myExcel.Cells1,4="普通報表"/逐行寫入數(shù)據(jù),for(int i=0;i<11;i+)for(
12、int j=0;j<7;j+)/以單引號開頭,表示該單元格為純文本myExcel.Cells2+i,1+j="'"+myDatai,j;說明一下,Cells2,1指第2行第1個單元格,是以1為基準的,而在C#中的數(shù)組是以0為基準的,另外,我們還發(fā)現(xiàn),對于編號之類的數(shù)據(jù),實際是文本,而Excel將它認成了數(shù)字,由于太長,自動換成了科學(xué)計數(shù),這不是我們要求的,在Excel中,如果某單元格以單引號“”開頭,表示該單元格為純文本,因此,我們在每個單元格前面加單引號。運行結(jié)果如下:可以看出,該報表非常簡陋,標題行沒有合并局,字體大小也不合適,連表格線都沒有。當然,我們可
13、以寫代碼來設(shè)置單元格字體、大小等等工作,這類技巧網(wǎng)上很多,但如果真要用C#來完成,是一件非常難的事情,還有個辦法就是將想要的操作錄制成宏,研究一下宏代碼,但宏是用VBA寫的,要轉(zhuǎn)換成果C#可不是件容易的事情。第一種辦法不是本文的重點,就到此為止。下面進行高級報表設(shè)計,該方法的原理為:首先打開Excel,按照要求排好版,保存為一個文件做為模板,然后在C中將該文件復(fù)制為一個新文件,在指定位置填入數(shù)據(jù)就可以了,為了添加表格線,我們錄制了一個宏,在C#中執(zhí)行該宏即可。參考模板如下:當然,你還可以排得更漂亮,因為是單純的Excel操作,不需要特殊說明。如果記錄很多,往往一頁無法打印完成,我們要求在每一頁
14、都顯示報表標題和小標題,也就是上圖中的第1、2行,這里有一個技巧:選擇Excel的菜單“文件”“頁面設(shè)置”,選擇“工作表”,在“頂端標題行”后的框中輸入“$1:$2”,也就是12行,當然,你也點右邊的紅箭頭,然后用鼠標選擇。當你的記錄超過一頁時,會自動在下一頁加入標題,非常方便。表格中目前還沒有表格線,因為我們不知道到底有多少數(shù)據(jù),因此,也無法知道為多少單元格設(shè)置邊框,我們借助宏來完成。按下面步驟錄制一個宏:1、 隨便選擇幾個單元格;2、 選擇菜單“工具”“宏”“錄制新宏”,輸入宏的名稱,就用默認的“宏1”吧,點確定;3、 選擇菜單“格式”“單元格”,在對話框中選擇“邊框”,將內(nèi)邊框和外邊框均
15、選中,按確定;4、 此時,剛才選擇的單元格就有了邊框,再點工具欄中的“停止錄制宏”按鈕來結(jié)束宏錄制。剛才的操作目的是錄制宏而不是加邊框,因此,我們按“Ctrl+Z”來撤消剛才的操作,通過按Alt+F8來調(diào)出宏,選擇“宏1”,選擇編輯,看到的代碼應(yīng)該如下:Sub 宏1()'' 宏1 Macro' 茍安廷 記錄的宏 2003-5-7'' Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Sel
16、ection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .Co
17、lorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHori
18、zontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End WithEnd Sub圖中表的數(shù)據(jù)都是供排版參考用的,結(jié)束前將實際內(nèi)容刪除掉,即只留下排好版的格式,包括標題、列標題等,將實際內(nèi)容去掉。將文件保存到一個地方,如D:Normal.xls,當然,實際開發(fā)時,可以放到執(zhí)行文件所在目錄下,為了防止用戶隨便修改,可以將文件名改為normal.rpt之類。有了上面的準備,我們就可以在C#中使用了,添加“高級報表”按鈕的響應(yīng)代碼。下面是全部代碼清單。using System;using Syste
19、m.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.IO;using System.Reflection;namespace MyExcel/ <summary>/ Form1 的摘要說明。/ </summary>public class Form1 : System.Windows.Forms.Formprivate System.Windows.Forms.Button btnN
20、ormal;private System.Windows.Forms.Button btnAdvace;/ <summary>/ 必需的設(shè)計器變量。/ </summary>private System.ComponentModel.Container components = null;public Form1()/ Windows 窗體設(shè)計器支持所必需的/InitializeComponent();/ TODO: 在 InitializeComponent 調(diào)用后添加任何構(gòu)造函數(shù)代碼/ <summary>/ 清理所有正在使用的資源。/ </summa
21、ry>protected override void Dispose( bool disposing )if( disposing )if (components != null) components.Dispose();base.Dispose( disposing );#region Windows Form Designer generated code/ <summary>/ 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改/ 此方法的內(nèi)容。/ </summary>private void InitializeComponent()this.btnNor
22、mal = new System.Windows.Forms.Button();this.btnAdvace = new System.Windows.Forms.Button();this.SuspendLayout();/ / btnNormal/ this.btnNormal.Location = new System.Drawing.Point(49, 55);this.btnNormal.Name = "btnNormal"this.btnNormal.TabIndex = 0;this.btnNormal.Text = "普通報表"this.
23、btnNormal.Click += new System.EventHandler(this.btnNormal_Click);/ / btnAdvace/ this.btnAdvace.Location = new System.Drawing.Point(169, 55);this.btnAdvace.Name = "btnAdvace"this.btnAdvace.TabIndex = 1;this.btnAdvace.Text = "高級報表"this.btnAdvace.Click += new System.EventHandler(thi
24、s.btnAdvace_Click);/ / Form1/ this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.ClientSize = new System.Drawing.Size(292, 133);this.Controls.AddRange(new System.Windows.Forms.Control this.btnAdvace, this.btnNormal);this.Name = "Form1"this.StartPosition = System.Windows.Forms.For
25、mStartPosition.CenterScreen;this.Text = "Form1"this.ResumeLayout(false);#endregion/ <summary>/ 應(yīng)用程序的主入口點。/ </summary>STAThreadstatic void Main() Application.Run(new Form1();private string , myData= "車牌號","類 型","品 牌","型 號","顏 色",
26、"附加費證號","車架號","浙KA3676","危險品","貨車","鐵風(fēng)SZG9220YY","白","1110708900","022836","浙KA4109","危險品","貨車","解放CA4110P1K2","白","223132","010898","浙
27、KA0001A","危險品","貨車","南明LSY9190WS","白","1110205458","0474636","浙KA0493","上普貨","貨車","解放LSY9190WS","白","1110255971","0094327","浙KA1045","普貨","貨
28、車","解放LSY9171WCD","藍","1110391226","0516003","浙KA1313","普貨","貨車","解放9190WCD","藍","1110315027","0538701","浙KA1322","普貨","貨車","解放LSY9190WS","藍
29、","24323332","0538716","浙KA1575","普貨","貨車","解放LSY9181WCD","藍","1110314149","0113018","浙KA1925","普貨","貨車","解放LSY9220WCD","藍","1110390626","00
30、268729","浙KA2258","普貨","貨車","解放LSY9220WSP","藍","111048152","00320"/普通報表,即單純的文件導(dǎo)出功能private void btnNormal_Click(object sender, System.EventArgs e)/創(chuàng)建一個Excel文件Excel.Application myExcel = new Excel.Application ( ) ;myExcel.Appli
31、cation.Workbooks.Add ( true ) ;/讓Excel文件可見myExcel.Visible=true;/第一行為報表名稱myExcel.Cells1,4="普通報表"/逐行寫入數(shù)據(jù),for(int i=0;i<11;i+)for(int j=0;j<7;j+)/以單引號開頭,表示該單元格為純文本myExcel.Cells2+i,1+j="'"+myDatai,j;/高級報表,根據(jù)模板生成的報表private void btnAdvace_Click(object sender, System.EventArgs
32、 e)string ""/將模板文件復(fù)制到一個新文件中Save mySave=new Save();mySave.Filter="Excel文件(*.XLS)|*.xls|所有文件(*.*)|*.*"if(mySave.ShowDialog()!=DialogResult.OK)return;else;/將模板文件copy到新位置,建議實際開發(fā)時用相對路徑,如Application.StartupPath.Trim()+"reportnormal.xls"string ; mode=new ("d:normal.xls&qu
33、ot;);trymode.CopyTo(,true);catch(Exception ee)MessageBox.Show(ee.Message);return;/打開復(fù)制后的文件object missing=Missing.Value;Excel.Application myExcel=new Excel.Application ( );/打開新文件myExcel.Application.Workbooks.Open(,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing); /將Excel顯示出來myExcel.Visible=true;/逐行寫入數(shù)據(jù),數(shù)組中第一行我列標題,忽略for(int i=1;i<11;i+)for(int j=0;j<7;j+)/以單引號開頭,表示該單元格為純文本myExcel.Cells4+i,1+j="'"+myDatai,j;/將列標題和實際內(nèi)容選中Excel.Workbook myBook=myExcel.Workbooks1;Excel.Wo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025項目施工合同模板
- 2025房屋建筑合同模板 房屋建筑合同
- 2025專業(yè)版電子版權(quán)委托代理合同
- 二零二五年度XX房地產(chǎn)公司收取管理費合作協(xié)議3篇
- 二零二五年度股權(quán)代持與公司研發(fā)創(chuàng)新合作協(xié)議3篇
- 2025年度農(nóng)機設(shè)備委托管理與農(nóng)業(yè)人才培養(yǎng)協(xié)議3篇
- 二零二五年度特色農(nóng)產(chǎn)品電商平臺合作合同范本3篇
- 2025年度養(yǎng)老院老人外出看護責(zé)任約定協(xié)議3篇
- 2025年度全新二零二五年度離婚后子女心理輔導(dǎo)及關(guān)愛協(xié)議3篇
- 二零二五年度養(yǎng)殖場品牌授權(quán)與合作承包協(xié)議3篇
- JGJ46-2024 建筑與市政工程施工現(xiàn)場臨時用電安全技術(shù)標準
- 2023-2024-1習(xí)思想學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- DB37∕T 5112-2018 村莊道路建設(shè)規(guī)范
- 說明書hid500系列變頻調(diào)速器使用說明書s1.1(1)
- 牽引供電系統(tǒng)遠動技術(shù)概述講解課件
- 義務(wù)教育《道德與法治》課程標準(2022年版)
- 乙肝五項詳解(課堂PPT)
- TD汽車維修公司管理制度和崗位職責(zé)匯編-30頁
- 數(shù)字化設(shè)計與制造PPT課件
- 個人信息查詢使用授權(quán)書
- 工作證明(通用)
評論
0/150
提交評論