Excel表格是微软公司Office套件中专门用作电子表格处理的软件,在实际的办公中,Excel表格的用途是非常广的,由此许多办公人员喜欢以Excel表格的形式来存取数据。这就要求程序设计人员要掌握把已经得到数据集,转换成Excel表格中。那么作为.Net程序开发语言中的一个重要组成部分的C#是如何来实现这个过程的转换的,本文就来探讨一下这个问题。
一、COM组件的转换:
虽然C#可以利用.Net框架中的类库——.Net FrameWork SDK,这个内容丰富,功能强大的类库来实现很多功能。其实对于C#来说,还有一个重要的资源,那就是已经拥有的COM组件,最大可能使用这些COM组件,往往会得到问题解决的最佳路径。说到这里,可能有读者会问,编译C#所使用到的类库,都是受管代码(Managed Code),而COM是非受管代码(Unmanaged Code)的文件,这些COM组件难道可以被C#直接使用么?这个问题问的非常好,其实这也是C#中使用COM组件的关键问题。就如问题中所讲的,编译C#文件的时候,所使用的类库必须是受管代码(Managed Code)文件,所以要使用是非受管代码(Unmanaged Code)的文件的COM组件,必须实现从非受管代码文件到受管代码文件的转换。在.Net FrameWrok SDK中就专门为这种转换提供了一个工具“tlbimp.exe”。如果你安装.Net FrameWork SDK在“C”盘,那么你会在目录“C:\Program Files\Microsoft.NET\FrameworkSDK\Bin”中发现他。同样我们知道Excel对象的COM组件名称为“EXCEL9.OLB”,如果你在“C”盘安装了Office套件,你可以在目录“C:\Program Files\Microsoft Office\Office”中发现这个文件。在找到了上述的二个文件后,把这二个文件都拷贝到C盘的根目录下面后,只需要运行下列简单的命令就可以实现对此COM组件的转换了,具体的命令如下:
tlbimp.exe Excel9.olb
运行完此命令后,就可以在C盘的根目录下面发现多出来三个DLL文件,分别是“excel.dll”、“vbide.dll”和“office.dll”。这就是由此COM组件转换而成的类库文件。在编译下面介绍的程序的时候,将会用到此三个文件。
二、本文中介绍的程序设计及运行环境
(1).微软视窗2000 服务器版
(2)..Net Framework SDK Beta 2以上版本
(3).Microsoft Data Access Component 2.6以上版本(MDAC2.6)
(4).Office 2000套件
三、本文介绍的数据库的数据字典:
在下面程序中,采用的数据库类型是SQL Server 7.0。数据库服务器选用的是本地服务器,数据库名称为“temp”,数据表名称为“table01”,数据字典如下:
字段名称 |
字段类型 |
字段长度 |
姓名 |
varchar |
10 |
性别 |
varchar |
10 |
工作单位 |
varchar |
50 |
四、C#实现从数据集到Excel表格的转变的主要步骤和实现方法:
(1)连接数据库,得到数据集:
实现这个过程相对比较简单,利用下面这些代码就可以实现对数据库的连接和得到自己的数据集,在下面的代码中,都有相应的注释,具体如下:
try
{
// 建立数据连接,此字符串的意思是打开Sql server数据库,服务器名称为本//地,数据库为temp
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = temp ; Data Source = Localhost " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = "SELECT * FROM table01" ;
//创建一个 DataSet对象
DataSet myDataSet = new DataSet ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
myCommand.Fill ( myDataSet , "table01" ) ;
//关闭此OleDbConnection
myConn.Close ( ) ;
}
catch ( Exception ey )
{
MessageBox.Show ( "连接错误! " + ey.ToString ( ) , "错误" ) ;
}
DataTable table = myDataSet.Tables[0];
//得到数据集
(2)创建一个空的Excel电子表格文档
这就要使用到由COM组件转换成的三个DLL文件了,在这些文件中定义了一个类“Excel.Application”,C#就是通过这个类来创建Excel电子表格文档的,下面是在C#中创建Excel表格的具体实现代码:
Excel.Application excel = new Excel.Application ( ) ;
excel.Application.Workbooks.Add ( true ) ;
这样一个空的Excel表格就产生了。
(3)读取数据的字段名称,并在产生的Excel表格的第一行显示出来
为了在电子表格中显示的更明了,所以在定义字段名称的时候采用了中文,在“excel”对象中有一个属性“Cells”,此属性就是特指Excel表格中的每一个小的单元,你可以通过设定此属性的二个参数来访问创建的Excel表格中的每一个单元。下面就是实现此段功能的代码:
int colIndex = 0 ;
foreach ( DataColumn col in table.Columns )
{
colIndex++ ;
excel.Cells[ 1 ,colIndex ] = col.ColumnName ;
}
(4).实现数据集到Excel表格的转换
以Excel表格来显示数据集中的数据,所运用的知识和(3)中的基本相同,下面是实现此功能的程序代码:
int rowIndex = 1 ;
foreach ( DataRow row in table.Rows )
{
rowIndex++ ;
colIndex = 0 ;
foreach ( DataColumn col in table.Columns )
{
colIndex++ ;
excel.Cells[ rowIndex , colIndex ] =
row[ col.ColumnName ].ToString ( ) ;
}
}
五、C#实现以Excel表格的的形式来显示数据的完整代码:
我们把C#实现以Excel表格的的形式来显示数据过程分成了四个部分,掌握了这四个部分,就可以轻松得到以下完整的源代码(excel.cs),具体如下:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Data.OleDb ;
public class Form1 : Form
{
private Button button1;
private DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
InitializeComponent ( ) ;
}
//清除程序中所使用过的各种资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
button1 = new Button ( ) ;
SuspendLayout ( ) ;
button1.Location = new Point ( 32 , 72) ;
button1.Name = "button1" ;
button1.Size = new Size ( 216 , 112 ) ;
button1.TabIndex = 0 ;
button1.Text = "C#实现从数据集到Excel表格的转变" ;
button1.Click += new System.EventHandler ( button1_Click ) ;
AutoScaleBaseSize = new Size ( 5 , 13 ) ;
ClientSize = new Size ( 292 , 273 ) ;
this.Controls.Add ( this.button1 ) ;
this.Name = "Form1" ;
this.Text = "C#实现从数据集到Excel表格的转变" ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
//连接数据库,得到数据集
try
{
// 设定数据连接字符串,此字符串的意思是打开Sql server数据库,服务器名
//称为本地 ,数据库为temp
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = temp ; Data Source = Localhost " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = "SELECT * FROM table01" ;
//创建一个 DataSet
myDataSet = new DataSet ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
myCommand.Fill ( myDataSet , "table01" ) ;
//关闭此OleDbConnection
myConn.Close ( ) ;
}
catch ( Exception ey )
{
MessageBox.Show ( "连接错误! " + ey.ToString ( ) , "错误" ) ;
}
DataTable table = myDataSet.Tables[ 0 ] ;
//创建一个空的Excel电子表格文档
Excel.Application excel= new Excel.Application ( ) ;
excel.Application.Workbooks.Add ( true ) ;
//读取数据的字段名称,并在产生的Excel表格的第一行显示出来
int colIndex = 0 ;
foreach ( DataColumn col in table.Columns )
{
colIndex++ ;
excel.Cells[ 1 , colIndex ] = col.ColumnName ;
}
//实现数据集到Excel表格的转换
int rowIndex = 1 ;
foreach ( DataRow row in table.Rows )
{
rowIndex++ ;
colIndex = 0 ;
foreach ( DataColumn col in table.Columns )
{
colIndex++ ;
excel.Cells[ rowIndex , colIndex ] =
row[ col.ColumnName ].ToString ( ) ;
}
}
excel.Visible=true ;
}
}
六、编译excel.cs命令:
要成功编译此文件,还需要引用到由COM组件转换而成的三个DLL文件,具体的编译命令如下:
csc.exe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:office.dll /r:vbide.dll /r:excel.dll excel.cs
可以得到excel.exe。
至用此C#实现以Excel表格的的形式来显示数据的工作就全部完成了。
|