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、選擇菜單“工具”→“宏”→“錄制新宏”,輸入宏的名稱,歡迎光臨學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8]
就用默認的“宏1”吧,點確定;3、選擇菜單“格式”→“單元格”,在對話框中選擇“邊框”,將內邊框和外邊框均選中,按確定;4、此時,剛才選擇的單元格就有了邊框,再點工具欄中的“停止錄制宏”按鈕 來結束宏錄制。
剛才的操作目的是錄制宏而不是加邊框,因此,我們按“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{/// <summary>/// Form1 的摘要說明。/// </summary>public class Form1 : System.Windows.Forms.Form{private System.Windows.Forms.Button btnNormal;private System.Windows.Forms.Button btnAdvace;/// <summary>/// 必需的設計器變量。/// </summary>private System.ComponentModel.Container components = null;public Form1(){//// Windows 窗體設計器支持所必需的//InitializeComponent();//// TODO: 在 InitializeComponent 調用後添加任何構造函數代碼//}/// <summary>/// 清理所有正在使用的資源。/// </summary>protected override void Dispose( bool disposing ){if( disposing ){if (components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows Form Designer generated code/// <summary>/// 設計器支持所需的方法 - 不要使用代碼編輯器修改/// 此方法的內容。/// </summary>private void InitializeComponent(){this.btnNormal = new System.Windows.Forms.Button();this.btnAdvace = new System.Windo歡迎光臨學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8]
ws.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.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(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 = "Form1";this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;this.Text = "Form1";this.ResumeLayout(false);}#endregion/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(){Application.Run(new Form1());}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"},{"浙KA
上一頁 123下一頁
點此進一步了解“在C#中利用Excel做報表”相關的更多內容
轉載請注明[學網]:http://www.xue5.com
上一篇文章: 【原創-翻譯】C#編碼規范
下一篇文章: 學習 ibatisnet + castle 筆記
【更多.Net基礎資料……】
·ASP.NET中MD5與SHA1加密的幾種方法
·.Net平台開發的技術規范與實踐精華總結
·在.net開發中幾個重要的認識誤區
·c#.Net經典面試題目
·用C#生成隨機中文漢字驗證碼的基本原理
·分析ASP.NET讀取XML文件4種方法
·ASP.NET中cookie讀寫方法介紹
·ASP.NET頁面之間傳遞值的幾種方式
·淺析五大ASP.NET數據控件
·提高ASP.NET應用程序性能的10個小技巧
·Asp.net 使用Ajax時如何彈出對話框
·XML的加密和解密及ASP.NET下的實現方法
·髒字典過濾:用正則表達式來過濾髒數據
Windows 7的十大最
微軟Windows7系統
解讀javascript的
·ASP.NET中常用的26個優化性能方法
·.NET 將文本轉換成語音的實例
·ASP.NET中MD5與SHA1加密的幾種方法
·.Net平台開發的技術規范與實踐精華總結
·在.net開發中幾個重要的認識誤區
·c#.Net經典面試題目
·用C#生成隨機中文漢字驗證碼的基本原理
·分析ASP.NET讀取XML文件4種方法
·ASP.NET中cookie讀寫方法介紹
·ASP.NET頁面之間傳遞值的幾種方式
·淺析五大ASP.NET數據控件
·提高ASP.NET應用程序性能的10個小技巧
·Asp.net 使用Ajax時如何彈出對話框
Photoshop打造日本卡哇依非主流照片(1)
PhotoShop教程:制作非主流塗鴉效果大頭帖
PhotoShop教程:調出非主流MM照片溫馨色調
PhotoShop教程:制作非主流型男帥哥
教你改變眼睛的顏色
非主流柔紫色調圖片制作教程
非主流歐美粉色調圖片PS教程
滄桑懷舊非主流風格制作教程
學網·特別聲明: 本站除部分特別聲明禁止轉載的專稿外的其他文章可以自由轉載,但請務必注明出處和原始作者。本站所有文章版權歸文章原始作者所有。對於被本站轉載文章的個人和網站,我們表示深深的謝意。如果本站轉載的文章有版權問題,請聯系編輯人員Xababy#Gmail.com,我們盡快予以更正。
【最新.Net基礎資料】
·ASP.NET中MD5與SHA1加密的幾種方法
·.Net平台開發的技術規范與實踐精華總結
·在.net開發中幾個重要的認識誤區
·c#.Net經典面試題目
·用C#生成隨機中文漢字驗證碼的基本原理
·分析ASP.NET讀取XML文件4種方法
·ASP.NET中cookie讀寫方法介紹
·ASP.NET頁面之間傳遞值的幾種方式
【非主流照片制作】
Photoshop打造日本卡哇依非主流照片(1)
教你改變眼睛的顏色
PS教程_簡單調整偏色圖片
輕松打造效果之粉白水嫩
簡單的潮人閃圖制作教程
非主流頹廢照片制作丟失的顏色
【PhotoShop經典教程】
Photoshop四維立體特效40個教程
QQ登錄清明Banner概念創意設計過程
Photoshop作摳圖合成孔雀美人圖
Photoshop制作螺旋狀彩色線條圖形
Photoshop打造日本卡哇依非主流照片(1)
Photoshop制作網絡卡通簽名效果圖(1)
設為首頁 - 收藏學網 - 關於學網 - RSS訂閱 - 版權申明 - 友情鏈接 - 聯系學網 - 網站地圖 - 投稿學網
學網·2003-2008版權所有© CopyRight 2004-2008 WwW.Xue5.CoM.Inc All Rights Reserved合作、聯系E-Mail:cainiaoo.cn#live.cn QQ:1103290,329700200
學網_致力於電腦使用知識、軟件操作知識以及互聯網應用知識的普及
陝ICP備05000834號