C#中利用Excel(宏)做高级报表

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 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分别为“普通报表”和“高级报表”。 

 

点“打开”按钮,再点“确定”按钮。 

切换到代码窗口中,在文件头添加下面两个引用:  
 

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
rivate Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application '声明对象变量 Me.MousePointer = 11 '改变鼠标样式 Set objExl = New Excel.Application '初始化对象变量 objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1 objExl.Workbooks.Add '增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称 objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book2" objExl.Sheets.Add , objExl.Sheets("book2") '增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book3" objExl.Sheets("book1").Select '选工作薄<book1> For i = 1 To 50 '循环写入数据 For j = 1 To 5 If i = 1 Then objExl.Selection.NumberFormatLocal = "@" '设置格式为文本 objExl.Cells(i, j) = " E " & i & j Else objExl.Cells(i, j) = i & j End If Next Next objExl.Rows("1:1").Select '选第一行 objExl.Selection.Font.Bold = True '设为粗体 objExl.Selection.Font.Size = 24 '设置字体大小 objExl.Cells.EntireColumn.AutoFit '自动调整列宽 objExl.ActiveWindow.SplitRow = 1 '拆分第一行 objExl.ActiveWindow.SplitColumn = 0 '拆分列 objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" '打印标题 objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _ Format(Now, "yyyy年mm月dd日

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值