在C 中利用Excel做高階報表

2021-09-05 14:25:23 字數 3712 閱讀 3520

visual studio.net 自2023年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

0538701

浙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分別為「普通報表」和「高階報表」。

點「開啟」按鈕,再點「確定」按鈕。

執行結果如下:

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

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

下面進行高階報表設計,該方法的原理為:首先開啟excel,按照要求排好版,儲存為乙個檔案做為模板,然後在c#中將該檔案複製為乙個新檔案,在指定位置填入資料就可以了,為了新增**線,我們錄製了乙個巨集,在c#中執行該巨集即可。

**中目前還沒有**線,因為我們不知道到底有多少資料,因此,也無法知道為多少單元格設定邊框,我們借助巨集來完成。

按下面步驟錄製乙個巨集:

1、隨便選擇幾個單元格; 2、選擇選單「工具」→「巨集」→「錄製新巨集」,輸入巨集的名稱,就用預設的「巨集1」吧,點確定; 3、選擇選單「格式」→「單元格」,在對話方塊中選擇「邊框」,將內邊框和外邊框均選中,按確定; 4、此時,剛才選擇的單元格就有了邊框,再點工具欄中的「停止錄製巨集」按鈕 來結束巨集錄製。 剛才的操作目的是錄製巨集而不是加邊框,因此,我們按「ctrl+z」來撤消剛才的操作,通過按alt+f8來調出巨集,選擇「巨集1」,選擇編輯,看到的**應該如下:

sub 巨集1() ' 巨集1 macro ' xx 記錄的巨集 2003-5-1 selection.borders(xldiagonaldown).linestyle = xlnone selection.borders(xldiagonalup).linestyle = xlnone with selection.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 .colorindex = 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(xlinsidehorizontal) .linestyle = xlcontinuous .weight = xlthin .colorindex = xlautomatic end with end sub 圖中表的資料都是供排版參考用的,結束前將實際內容刪除掉,即只留下排好版的格式,包括標題、列標題等,將實際內容去掉。將檔案儲存到乙個地方,如d:\normal.xls,當然,實際開發時,可以放到執行檔案所在目錄下,為了防止使用者隨便修改,可以將檔名改為normal.rpt之類。

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

c 中的報表簡單操作(Excel)

開啟 工具 nuget程式包管理器 程式包管理器控制台 我用的vs2015 在控制台輸入 install package npoi 稍等片刻即可 excelhelper.cs class excelhelper datatable轉換為excel檔案 public void datatabletoe...

在EXCEL中利用巨集群發郵件

設定收件人位址 從通訊錄表的 e mail位址 欄位中獲得 objmail.from energy gdecc.cn objmail.to worksheets 郵箱位址 cells rowcount,2 value 設定郵件主題 objmail.subject worksheets 郵件內容 ce...

C 對Excel的操作(可以做報表匯出的元件)

using system iworkbook iworkbook 內部屬性 using system using system.collections.generic using system.diagnostics namespace abc endregion region 私有方法 gc.co...