程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在C#中利用Excel做報表

在C#中利用Excel做報表

編輯:.NET實例教程

Visual Studio.Net 自2001年2月問世以來,受到越來越多人的喜愛,C#做為主力軍,集VB、Delphi的簡單和VC的簡煉與強大於一體,更是讓許多人愛不釋手,紛紛倒向它的懷抱。通常的軟件都要用到數據庫,數據庫中必然要用到報表,在Visual Studio.Net中自帶了一個水晶報表,雖然功能十分強大,但市面上相關資料非常缺乏,網上全面介紹其使用的文章也屈指可數。Excel是微軟公司辦公自動化套件中的一個軟件,主要是用來處理電子表格。Excel以其功能強大,界面友好等受到了許多用戶的歡迎,幾乎每一台機器都安裝了它,因此,我們可以將數據導入Excel進行排版。

由於Excel的格式是封閉的,無法直接創建一個Excel文件然後來排版,只有借助Com組件來完成,同樣,介紹用C#操作Excel的文章也就那麼幾篇,基本上都是告訴你如何新建一個Excel文件,然後,將數據寫入某單元格,最多再零星告訴你如何合並單元格,真正使用起來根本無法用C#做出漂亮報表。本文巧妙利用Excel的宏來自動排版,大大減少了工作量,而且可以隨時修改模板而無須修改程序,非常實用。

本人使用的是Office 2000,操作系統為Windows 2000 professinal,為使問題簡單化,這裡不介紹數據庫的知識,我一個二維數組來代表一個數據庫中的表,我們的目的是將該數組放到Excel中,並排版成需要的格式,數組如下:

車牌號 類 型 品 牌 型 號 顏 色 附加費證號 車架號 浙KA3676 危險品 貨車 鐵風SZG9220YY 白 1110708900 022836 浙KA4109 危險品 貨車 解放CA4110P1K2 白 223132 010898 浙KA0001A 危險品 貨車 南明LSY9190WS 白 1110205458 0474636 浙KA0493 上普貨 貨車 解放LSY9190WS 白 1110255971 0094327 浙KA1045 普貨 貨車 解放LSY9171WCD 藍 1110391226 0516003 浙KA1313 普貨 貨車 解放9190WCD 藍 1110315027 0538701d> 浙KA1322 普貨 貨車 解放LSY9190WS 藍 24323332 0538716 浙KA1575 普貨 貨車 解放LSY9181WCD 藍 1110314149 0113018 浙KA1925 普貨 貨車 解放LSY9220WCD 藍 1110390626 00268729 浙KA2258 普貨 貨車 解放LSY9220WSP 藍 1110481542 00320

為了在C#中使用Excel,我們要先做一點准備工作,通過查找(前提是你安裝Visual Studio.Net和Excel 2000),在你的計算機中找到TlbImp和Excel9.olb,將他們復制到一個文件夾中,在DOS窗口中執行 TlbImp Excel9.olb,這時會產生以下三個文件:Excel.dll、Office.dll和VBIDE.dll。

我們來完成兩項任務,一是按網上文章介紹的方法,增加將數據寫入一個Excel文件,也就是做一個簡單報表,二是用Excel創建一個文件,然後以此文件為模板生成高級報表。

打開Visual Studio.Net,新建一個C#的Windows應用程序,取名為MyExcel。根據個人愛好,對窗口做一些美化工作,然後放兩個按鈕:btnNormal和btnAdvance,Caption分別為“普通報表”和“高級報表”。

打開Visual Studio.Net,新建一個C#的Windows應用程序,取名為MyExcel。根據個人愛好,對窗口做一些美化工作,然後放兩個按鈕:btnNormal和btnAdvance,Caption分別為“普通報表”和“高級報表”。

點“打開”按鈕,再點“確定”按鈕。

切換到代碼窗口中,在文件頭添加下面兩個引用:

using System.IO;using System.Reflection;

再添加一個二維數組來表示數據表:

private string [,] myData={{"車牌號","類型","品 牌","型 號","顏 色","附加費證號","車架號"},{"浙KA3676","危險品","貨車","鐵風SZG9220YY","白","1110708900","022836"},{"浙KA4109","危險品","貨車","解放CA4110P1K2","白","223132","010898"},{"浙KA0001A","危險品","貨車","南明LSY9190WS","白","1110205458","0474636"},{"浙KA0493","上普貨","貨車","解放LSY9190WS","白","1110255971","0094327"},{"浙KA1045","普貨","貨車","解放LSY9171WCD","藍","1110391226","0516003"},{"浙KA1313","普貨","貨車","解放9190WCD","藍","1110315027","0538701"},{"浙KA1322","普貨","貨車","解放LSY9190WS","藍","24323332","0538716"},{"浙KA1575","普貨","貨車","解放LSY9181WCD","藍","1110314149","0113018"},{"浙KA1925","普貨","貨車","解放LSY9220WCD","藍","1110390626","00268729"},{"浙KA2258","普貨","貨車","解放LSY9220WSP","藍","111048152","00320"}};

切換回設計窗口,雙擊“普通報表”按鈕,設計普通報表,代碼如下:

private void btnNormal_Click(object sender, System.EventArgs e){//創建一個Excel文件Excel.Application myExcel = new Excel.Application ( ) ;myExcel.Application.Workbooks.Add ( true ) ;//讓Excel文件可見myExcel.Visible=true;//第一行為報表名稱myExcel.Cells[1,4]="普通報表";//逐行寫入數據,for(int i=0;i<11;i++){for(int j=0;j<7;j++){//以單引號開頭,表示該單元格為純文本myExcel.Cells[2+i,1+j]="''"+myData[i,j];}}}

說明一下,Cells[2,1]指第2行第1個單元格,是以1為基准的,而在C#中的數組是以0為基准的,另外,我們還發現,對於編號之類的數據,實際是文本,而Excel將它認成了數字,由於太長,自動換成了科學計數,這不是我們要求的,在Excel中,如果某單元格以單引號“’”開頭,表示該單元格為純文本,因此,我們在每個單元格前面加單引號。

運行結果如下:

可以看出,該報表非常簡陋,標題行沒有合並局,字體大小也不合適,連表格線都沒有。當然,我們可以寫代碼來設置單元格字體、大小等等工作,這類技巧網上很多,但如果真要用C#來完成,是一件非常難的事情,還有個辦法就是將想要的操作錄制成宏,研究一下宏代碼,但宏是用VBA寫的,要轉換成果C#可不是件容易的事情。

第一種辦法不是本文的重點,就到此為止

下面進行高級報表設計,該方法的原理為:首先打開Excel,按照要求排好版,保存為一個文件做為模板,然後在C#中將該文件復制為一個新文件,在指定位置填入數據就可以了,為了添加表格線,我們錄制了一個宏,在C#中執行該宏即可。

參考模板如下:

當然,你還可以排得更漂亮,因為是單純的Excel操作,不需要特殊說明。如果記錄很多,往往一頁無法打印完成,我們要求在每一頁都顯示報表標題和小標題,也就是上圖中的第1、2行,這裡有一個技巧:選擇Excel的菜單“文件”→“頁面設置”,選擇“工作表”,在“頂端標題行”後的框中輸入“$1:$2”,也就是1~2行,當然,你也點右邊的紅箭頭,然後用鼠標選擇。當你的記錄超過一頁時,會自動在下一頁加入標題,非常方便。

表格中目前還沒有表格線,因為我們不知道到底有多少數據,因此,也無法知道為多少單元格設置邊框,我們借助宏來完成。

按下面步驟錄制一個宏:

1、隨便選擇幾個單元格;2、選擇菜單&ldquo;工具&rdquo;&rarr;&ldquo;宏&rdquo;&rarr;&ldquo;錄制新宏&rdquo;,輸入宏的名稱,歡迎光臨<strong><font color="#CC0000">學網</font></strong>,<strong><font color="#CC0000">點擊這裡</font></strong>查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8]<p> </p><p> 就用默認的&ldquo;宏1&rdquo;吧,點確定;3、選擇菜單&ldquo;格式&rdquo;&rarr;&ldquo;單元格&rdquo;,在對話框中選擇&ldquo;邊框&rdquo;,將內邊框和外邊框均選中,按確定;4、此時,剛才選擇的單元格就有了邊框,再點工具欄中的&ldquo;停止錄制宏&rdquo;按鈕 來結束宏錄制。

剛才的操作目的是錄制宏而不是加邊框,因此,我們按“Ctrl+Z”來撤消剛才的操作,通過按Alt+F8來調出宏,選擇“宏1”,選擇編輯,看到的代碼應該如下:

Sub 宏1()'' 宏1 Macro'' xx 記錄的宏 2003-5-1Selection.Borders(xlDiagonalDown).LinexlNoneSelection.Borders(xlDiagonalUp).LinexlNoneWith Selection.Borders(xlEdgeLeft).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithWith Selection.Borders(xlEdgeTop).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithWith Selection.Borders(xlEdgeBottom).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithWith Selection.Borders(xlEdgeRight).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithWith Selection.Borders(xlInsideVertical).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithWith Selection.Borders(xlInsideHorizontal).LinexlContinuous.Weight = xlThin.ColorIndex = xlAutomaticEnd WithEnd Sub

圖中表的數據都是供排版參考用的,結束前將實際內容刪除掉,即只留下排好版的格式,包括標題、列標題等,將實際內容去掉。將文件保存到一個地方,如D:\Normal.xls,當然,實際開發時,可以放到執行文件所在目錄下,為了防止用戶隨便修改,可以將文件名改為normal.rpt之類。

有了上面的准備,我們就可以在C#中使用了,添加“高級報表”按鈕的響應代碼。下面是全部代碼清單。

using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.IO;using System.Reflection;namespace MyExcel{/// &lt;summary&gt;/// Form1 的摘要說明。/// &lt;/summary&gt;public class Form1 : System.Windows.Forms.Form{private System.Windows.Forms.Button btnNormal;private System.Windows.Forms.Button btnAdvace;/// &lt;summary&gt;/// 必需的設計器變量。/// &lt;/summary&gt;private System.ComponentModel.Container components = null;public Form1(){//// Windows 窗體設計器支持所必需的//InitializeComponent();//// TODO: 在 InitializeComponent 調用後添加任何構造函數代碼//}/// &lt;summary&gt;/// 清理所有正在使用的資源。/// &lt;/summary&gt;protected override void Dispose( bool disposing ){if( disposing ){if (components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows Form Designer generated code/// &lt;summary&gt;/// 設計器支持所需的方法 - 不要使用代碼編輯器修改/// 此方法的內容。/// &lt;/summary&gt;private void InitializeComponent(){this.btnNormal = new System.Windows.Forms.Button();this.btnAdvace = new System.Windo歡迎光臨<strong><font color="#CC0000">學網</font></strong>,<strong><font color="#CC0000">點擊這裡</font></strong>查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8]<p> </p><p> ws.Forms.Button();this.SuspendLayout();//// btnNormal//this.btnNormal.Location = new System.Drawing.Point(49, 55);this.btnNormal.Name = &quot;btnNormal&quot;;this.btnNormal.TabIndex = 0;this.btnNormal.Text = &quot;普通報表&quot;;this.btnNormal.Click += new System.EventHandler(this.btnNormal_Click);//// btnAdvace//this.btnAdvace.Location = new System.Drawing.Point(169, 55);this.btnAdvace.Name = &quot;btnAdvace&quot;;this.btnAdvace.TabIndex = 1;this.btnAdvace.Text = &quot;高級報表&quot;;this.btnAdvace.Click += new System.EventHandler(this.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 = &quot;Form1&quot;;this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;this.Text = &quot;Form1&quot;;this.ResumeLayout(false);}#endregion/// &lt;summary&gt;/// 應用程序的主入口點。/// &lt;/summary&gt;[STAThread]static void Main(){Application.Run(new Form1());}private string [,] myData={{&quot;車牌號&quot;,&quot;類型&quot;,&quot;品 牌&quot;,&quot;型 號&quot;,&quot;顏 色&quot;,&quot;附加費證號&quot;,&quot;車架號&quot;},{&quot;浙KA3676&quot;,&quot;危險品&quot;,&quot;貨車&quot;,&quot;鐵風SZG9220YY&quot;,&quot;白&quot;,&quot;1110708900&quot;,&quot;022836&quot;},{&quot;浙KA4109&quot;,&quot;危險品&quot;,&quot;貨車&quot;,&quot;解放CA4110P1K2&quot;,&quot;白&quot;,&quot;223132&quot;,&quot;010898&quot;},{&quot;浙KA0001A&quot;,&quot;危險品&quot;,&quot;貨車&quot;,&quot;南明LSY9190WS&quot;,&quot;白&quot;,&quot;1110205458&quot;,&quot;0474636&quot;},{&quot;浙KA0493&quot;,&quot;上普貨&quot;,&quot;貨車&quot;,&quot;解放LSY9190WS&quot;,&quot;白&quot;,&quot;1110255971&quot;,&quot;0094327&quot;},{&quot;浙KA1045&quot;,&quot;普貨&quot;,&quot;貨車&quot;,&quot;解放LSY9171WCD&quot;,&quot;藍&quot;,&quot;1110391226&quot;,&quot;0516003&quot;},{&quot;浙KA1313&quot;,&quot;普貨&quot;,&quot;貨車&quot;,&quot;解放9190WCD&quot;,&quot;藍&quot;,&quot;1110315027&quot;,&quot;0538701&quot;},{&quot;浙KA1322&quot;,&quot;普貨&quot;,&quot;貨車&quot;,&quot;解放LSY9190WS&quot;,&quot;藍&quot;,&quot;24323332&quot;,&quot;0538716&quot;},{&quot;浙KA1575&quot;,&quot;普貨&quot;,&quot;貨車&quot;,&quot;解放LSY9181WCD&quot;,&quot;藍&quot;,&quot;1110314149&quot;,&quot;0113018&quot;},{&quot;浙KA</p><b>上一頁 1<font color='red'>2</font>3下一頁 </b> <INPUT title='點擊復制標題和地址到剪貼版,直接在MSN/QQ上粘貼即可.' type=button value='將這篇文章發給QQ/MSN上的好友' onclick='copyToClipBoard()'> <u><font color="#0033CC">點此進一步了解“</font><b><font color="#800000">在C#中利用Excel做報表</font></b><font color="#0033CC">”相關的更多內容</font></u> 轉載請注明[學網]:<u>http://www.xue5.com</u>&nbsp; <li>上一篇文章: 【原創-翻譯】C#編碼規范</li>&nbsp; <br> <li>下一篇文章: 學習&nbsp;ibatisnet&nbsp;+&nbsp;castle&nbsp;筆記</li>&nbsp; 【更多.Net基礎資料……】&nbsp;&nbsp;&nbsp; ·ASP.NET中MD5與SHA1加密的幾種方法<br>·.Net平台開發的技術規范與實踐精華總結<br>·在.net開發中幾個重要的認識誤區<br>·c#.Net經典面試題目<br>·用C#生成隨機中文漢字驗證碼的基本原理<br>·分析ASP.NET讀取XML文件4種方法<br>·ASP.NET中cookie讀寫方法介紹<br>·ASP.NET頁面之間傳遞值的幾種方式<br>·淺析五大ASP.NET數據控件<br>·提高ASP.NET應用程序性能的10個小技巧<br>·Asp.net&nbsp;使用Ajax時如何彈出對話框<br>·XML的加密和解密及ASP.NET下的實現方法<br>·髒字典過濾:用正則表達式來過濾髒數據<br> <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434405.jpg' width='100' height='75' border='0'> Windows&nbsp;7的十大最 <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434437.jpg' width='100' height='75' border='0'> <b>微軟Windows7系統</b> <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434480.jpg' width='100' height='75' border='0'> 解讀javascript的 ·ASP.NET中常用的26個優化性能方法<br>·.NET&nbsp;將文本轉換成語音的實例<br>·ASP.NET中MD5與SHA1加密的幾種方法<br>·.Net平台開發的技術規范與實踐精華總結<br>·在.net開發中幾個重要的認識誤區<br>·c#.Net經典面試題目<br>·用C#生成隨機中文漢字驗證碼的基本原理<br>·分析ASP.NET讀取XML文件4種方法<br>·ASP.NET中cookie讀寫方法介紹<br>·ASP.NET頁面之間傳遞值的幾種方式<br>·淺析五大ASP.NET數據控件<br>·提高ASP.NET應用程序性能的10個小技巧<br>·Asp.net&nbsp;使用Ajax時如何彈出對話框<br> <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434459.jpg' width='150' height='113' border='0'><br>Photoshop打造日本卡哇依非主流照片(1)<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434547.jpg' width='150' height='113' border='0'><br>PhotoShop教程:制作非主流塗鴉效果大頭帖<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434594.jpg' width='150' height='113' border='0'><br>PhotoShop教程:調出非主流MM照片溫馨色調<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434586.jpg' width='150' height='113' border='0'><br>PhotoShop教程:制作非主流型男帥哥<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434524.jpg' width='150' height='113' border='0'><br>教你改變眼睛的顏色<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434437.jpg' width='150' height='113' border='0'><br>非主流柔紫色調圖片制作教程<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434640.jpg' width='150' height='113' border='0'><br>非主流歐美粉色調圖片PS教程<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434667.jpg' width='150' height='113' border='0'><br>滄桑懷舊非主流風格制作教程 <b>學網·特別聲明:</b><br> 本站除部分特別聲明禁止轉載的專稿外的其他文章可以自由轉載,但請務必注明出處和原始作者。本站所有文章版權歸文章原始作者所有。對於被本站轉載文章的個人和網站,我們表示深深的謝意。如果本站轉載的文章有版權問題,請聯系編輯人員Xababy#Gmail.com,我們盡快予以更正。 <!--右邊 --> 【最新.Net基礎資料】 ·ASP.NET中MD5與SHA1加密的幾種方法<br>·.Net平台開發的技術規范與實踐精華總結<br>·在.net開發中幾個重要的認識誤區<br>·c#.Net經典面試題目<br>·用C#生成隨機中文漢字驗證碼的基本原理<br>·分析ASP.NET讀取XML文件4種方法<br>·ASP.NET中cookie讀寫方法介紹<br>·ASP.NET頁面之間傳遞值的幾種方式<br> 【非主流照片制作】 <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434459.jpg' width='135' height='102' border='0'><br>Photoshop打造日本卡哇依非主流照片(1)<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434524.jpg' width='135' height='102' border='0'><br>教你改變眼睛的顏色<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434655.jpg' width='135' height='102' border='0'><br>PS教程_簡單調整偏色圖片<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434605.jpg' width='135' height='102' border='0'><br>輕松打造效果之粉白水嫩<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434675.gif' width='135' height='102' border='0'><br>簡單的潮人閃圖制作教程<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434673.jpg' width='135' height='102' border='0'><br>非主流頹廢照片制作丟失的顏色 【PhotoShop經典教程】 <img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434794.jpg' width='135' height='102' border='0'><br>Photoshop四維立體特效40個教程<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434723.jpg' width='135' height='102' border='0'><br>QQ登錄清明Banner概念創意設計過程<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434750.jpg' width='135' height='102' border='0'><br>Photoshop作摳圖合成孔雀美人圖<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434771.jpg' width='135' height='102' border='0'><br>Photoshop制作螺旋狀彩色線條圖形<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434459.jpg' width='135' height='102' border='0'><br>Photoshop打造日本卡哇依非主流照片(1)<img class='pic1' src='https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011311434827.jpg' width='135' height='102' border='0'><br>Photoshop制作網絡卡通簽名效果圖(1) <!--右邊 --> <!--下邊 --> 設為首頁 - 收藏學網 - 關於學網 - RSS訂閱 - 版權申明 - 友情鏈接 - 聯系學網 - 網站地圖 - 投稿學網 <FONT face=Verdana>學網·2003-2008版權所有</FONT><BR><FONT face=Verdana>&copy; CopyRight 2004-2008 <B>WwW.Xue5.CoM</B>.Inc All Rights Reserved</FONT><BR><FONT face=Verdana>合作、聯系E-Mail:cainiaoo.cn#live.cn QQ:1103290,329700200</FONT><BR> <BR>學網_致力於電腦使用知識、軟件操作知識以及互聯網應用知識的普及<BR><B>陝ICP備05000834號</B></FONT><BR> </BODY> </HTML> 1925","普貨","貨車","解放LSY9220WCD","藍","1110390626","00268729"},{"浙KA2258","普貨","貨車","解放LSY9220WSP","藍","111048152","00320"}};//普通報表,即單純的文件導出功能private void btnNormal_Click(object sender, System.EventArgs e){//創建一個Excel文件Excel.Application myExcel = new Excel.Application ( ) ;myExcel.Application.Workbooks.Add ( true ) ;//讓Excel文件可見myExcel.Visible=true;//第一行為報表名稱myExcel.Cells[1,4]="普通報表";//逐行寫入數據,for(int i=0;i<11;i++){for(int j=0;j<7;j++){//以單引號開頭,表示該單元格為純文本myExcel.Cells[2+i,1+j]="''"+myData[i,j];}}}//高級報表,根據模板生成的報表private void btnAdvace_Click(object sender, System.EventArgs e){string filename="";//將模板文件復制到一個新文件中SaveFileDialog mySave=new SaveFileDialog();mySave.Filter="Excel文件(*.XLS)|*.xls|所有文件(*.*)|*.*";if(mySave.ShowDialog()!=DialogResult.OK){return;}else{filename=mySave.FileName;//將模板文件copy到新位置,建議實際開發時用相對路徑,如//Application.StartupPath.Trim()+"\\report\\normal.xls"string filenameold=mySave.FileName;FileInfo mode=new FileInfo("d:\\normal.xls");try{mode.CopyTo(filename,true);}catch(Exception ee){MessageBox.Show(ee.Message);return;}}//打開復制後的文件object missing=Missing.Value;Excel.Application myExcel=new Excel.Application ( );//打開新文件myExcel.Application.Workbooks.Open(filename,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing, missing,missing);//將Excel顯示出來myExcel.Visible=true;//逐行寫入數據,數組中第一行我列標題,忽略for(int i=1;i<11;i++){for(int j=0;j<7;j++){//以單引號開頭,表示該單元格為純文本myExcel.Cells[4+i,1+j]="''"+myData[i,j];}}//將列標題和實際內容選中Excel.Workbook myBook=myExcel.Workbooks[1];Excel.Worksheet mySheet=(Excel.Worksheet)myBook.Worksheets[1];Excel.Range r=mySheet.get_Range(mySheet.Cells[3,1],mySheet.Cells[14,7]);r.Select();//=====通過執行宏來格表格加邊框=======//try{myExcel.Run("宏1",missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);}catch{}//保存修改myBook.Save();}}//end of form}

在上述代碼中,我們指定了選定范圍:

Excel.Range r=mySheet.get_Range(mySheet.Cells[3,1],mySheet.Cells[14,7]);

具體開發時,我們可以根據數據庫中的實際數據來計算范圍,我們的列標題是從.Cells[3,1]開始的,在程序中定死了,為靈活使用,

我們完全可以在模板的Cells[1,1]或者其他單元格填入一些基本信息,如實際數據起始位置等等,操作時,從該單元格讀入數據,然後將該單元格內容替換成需要的內容。還有個問題,我們往單元格中寫內容時假設某列應該放什麼內容,為靈活起見,我們在得到了列標題起始位置後,讀入該單元格內容(即該列應該是什麼字段),再從數據庫中找到相應的字段來填充該列,可以保證所填內容與設計的報表對應起來,還可以忽略數據庫中無用的字段,也就是說同一個數據庫表可以有許多種報表,只要有相應的模板就可以了,讀入某單元格內容的代碼如下:

     Excel.Range r;r=mySheet.get_Range(mySheet.Cells[2,1],mySheet.Cells[2,1]);  //取得值存放的區域string strValue=r.Value.ToString();

一次只能讀一個單元格,否則得不到相應的數據,即=mySheet.get_Range(mySheet.Cells[2,1],mySheet.Cells[2,1])中兩個參數都必須是同一個單元格,本例中為mySheet.Cells[2,1]。

有了上面的知識,再做報表就簡單多了,本軟件運行結果如下:


google_ad_clIEnt = "pub-6883892033868119"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; //2006-12-03: www.xfok.com google_ad_channel = "8395146216"; google_color_border = "ffffff"; google_color_bg = "ffffff"; google_color_link = "000000"; google_color_text = "000000"; google_color_url = "008000";  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved