C#操作Excel.docx

上传人:b****7 文档编号:10982375 上传时间:2023-02-24 格式:DOCX 页数:35 大小:30.30KB
下载 相关 举报
C#操作Excel.docx_第1页
第1页 / 共35页
C#操作Excel.docx_第2页
第2页 / 共35页
C#操作Excel.docx_第3页
第3页 / 共35页
C#操作Excel.docx_第4页
第4页 / 共35页
C#操作Excel.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

C#操作Excel.docx

《C#操作Excel.docx》由会员分享,可在线阅读,更多相关《C#操作Excel.docx(35页珍藏版)》请在冰豆网上搜索。

C#操作Excel.docx

C#操作Excel

VisualC#的Excel编程

前言

Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。

Excel以其功能强大,界面友好等受到了许多用户的欢迎。

在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来。

这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,在程序中处理数据库中的数据比其处理Excel表格中的数据容易许多。

那么如何用VisualC#读取Excel表格中的数据?

在以前用Delphi编程的时候,对于不同的用户,他们对于打印的需求是不一样的,如果要使得程序中的打印功能适用于每一个用户,可以想象程序设计是十分复杂的。

这时想到Excel,由于Excel表格的功能强大,又由于几乎每一台机器都安装了它,如果把程序处理的结果放到Excel表格中,这样每一个用户就可以根据自己的需要在Excel中定制自己的打印。

这样不仅使得程序设计简单,而且又满足了诸多用户的要求,更加实用了。

那么用VisualC#如何调用Excel,如何又把数据存放到Excel表格中?

本文就来探讨一下上述问题的解决办法。

一.程序设计及运行环境

(1).微软视窗2000服务器版

  

(2)..NetFrameworkSDKBeta2

(3).MicrosoftDataAccessComponent2.6以上版本(MDAC2.6)

(4).Office2000套件

二.VisualC#读取Excel表格中的数据:

本节将通过一个程序来介绍VisualC#读取Excel表格中的数据,并把数据以DataGrid的形式显示出来。

(1).如何读取数据

其实读取Excel表格中的数据和读取数据库中的数据是非常类似的,因为在某种程度上Excel表格可以看成是一张一张的数据表。

其二者的主要区别在于所使用的数据引擎不一样。

在本文的程序中,通过下列代码实现读取Excel表格数据,具体如下:

//创建一个数据链接

stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:

\\sample.xls;ExtendedProperties=Excel8.0";

OleDbConnectionmyConn=newOleDbConnection(strCon);

stringstrCom="SELECT*FROM[Sheet1$]";

myConn.Open();

file:

//打开数据链接,得到一个数据集

OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);

file:

//创建一个DataSet对象

myDataSet=newDataSet();

file:

//得到自己的DataSet对象

myCommand.Fill(myDataSet,"[Sheet1$]");

file:

//关闭此数据链接

myConn.Close();

怎么样读取Excel表格中的数据其实和读取数据库中的数据没有什么实质上的区别。

注释:

这里读取的是C盘根目录下的"Sample.xls"文件。

(2).用DataGrid来显示得到的数据集

 在得到DataSet对象后,只需要通过下列二行代码,就可以把数据集用DataGrid显示出来了:

DataGrid1.DataMember="[Sheet1$]";

DataGrid1.DataSource=myDataSet;

(3).用VisualC#读取Excel表格,并用DataGrid显示出来的程序代码(Read.cs)和程序运行的界面

掌握了上面二点,水到渠成就可以得到以下代码:

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.Data.OleDb;

publicclassForm1:

Form

{

privateButtonbutton1;

privateSystem.Data.DataSetmyDataSet;

privateDataGridDataGrid1;

privateSystem.ComponentModel.Containercomponents=null;

publicForm1()

{

file:

//初始化窗体中的各个组件

InitializeComponent();

file:

//打开数据链接,得到数据集

GetConnect();

}

file:

//清除程序中使用过的资源

protectedoverridevoidDispose(booldisposing)

{

if(disposing)

{

if(components!

=null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

privatevoidGetConnect()

{

file:

//创建一个数据链接

stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:

\\sample.xls;ExtendedProperties=Excel8.0";

OleDbConnectionmyConn=newOleDbConnection(strCon);

stringstrCom="SELECT*FROM[Sheet1$]";

myConn.Open();

file:

//打开数据链接,得到一个数据集

OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);

file:

//创建一个DataSet对象

myDataSet=newDataSet();

file:

//得到自己的DataSet对象

myCommand.Fill(myDataSet,"[Sheet1$]");

file:

//关闭此数据链接

myConn.Close();

}

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

DataGrid1.DataMember="[Sheet1$]";

DataGrid1.DataSource=myDataSet;

}

staticvoidMain()

{

Application.Run(newForm1());

}

}

(4).总结

以上只是读取了Excel表格中"Sheet1"中的数据,对于其他"Sheet"中的内容,可以参照读取"Sheet1"中的程序,只作一点修改就可以了,譬如要读取"Sheet2"中的内容,只需要把"Read.cs"程序中的"Sheet1$"改成"Sheet2$"就可以了。

三.VisualC#调用Excel表格,并在Excel表格中存储数据:

 在VisualC#中调用Excel表格,并不像读取Excel表格中的数据那么容易了,因为在VisualC#中调用Excel表格要使用到Excel的COM组件。

如果你安装Office套件在"C"盘,那么在"C:

\ProgramFiles\MicrosoftOffice\Office"可以找到这个COM组件"EXCEL9.OLB",在《VisualC#如何使用ActiveX组件》一文中,这些COM组件都是非受管代码的,要在VisualC#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的类库。

所以在用VisualC#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。

(1).非受管代码COM组件转换成受管代码的类库

首先把COM组件"EXCEL9.OLB"拷贝到C盘的根目录下,然后输入下列命令:

tlbimpexcel9.olb

这样在C盘的根目录下面就产生了三个DLL文件:

"Excel.dll"、"Office.dll"、"VBIDE.dll"。

在产生了上面的三个文件后,这种转换就成功完成了。

在下面的程序中,就可以利用这转换好的三个类库编写和Excel表格相关的各种操作了。

注释:

1.在安装的程序中或许找不到excel9.olb,可以利用下面的命令格式获取dll文件

Tlbimpexecel.exe

也可以生成文件"Excel.dll","VBIDE.dll"

2.也可以使用VisualStudio.net2003或其以上版本添加引用找到Excel.exe文件,会自动转化为excel.dll文件,然后在程序中添加包含即可

例如:

usingExcel;

请根据包的不同情况添加

(2).VisualC#打开Excel表格:

在"Excel.dll"中定义了一个命名空间"Excel",在差命名空间中封装了一个类"Application",这个类和启动Excel表格有非常重要的关系,在VisualC#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

Excel.Applicationexcel=newExcel.ApplicationClass();

excel.Application.Workbooks.Add(true);

excel.Visible=true;

  但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。

(3).往Excel表格中输入数据:

在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个下单元。

通过给差"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。

Excel.Applicationexcel=newExcel.ApplicationClass();

excel.Application.Workbooks.Add(true);

excel.Cells[1,1]="第一行第一列";

excel.Cells[1,2]="第一行第二列";

excel.Cells[2,1]="第二行第一列";

excel.Cells[2,2]="第二行第二列";

excel.Cells[3,1]="第三行第一列";

excel.Cells[3,2]="第三行第二列";

excel.Visible=true;

(4).VisualC#调用Excel表格,并在Excel表格中存储数据的程序代码(Excel.cs):

了解了上面的这些知识,得到完成上述功能的程序代码就显得比较容易了,具体如下:

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.Data.SqlClient;

publicclassForm1:

Form

{

privateButtonbutton1;

privateSystem.ComponentModel.Containercomponents=null;

publicForm1()

{

file:

//初始化窗体中的各个组件

InitializeComponent();

}

file:

//清除程序中使用的各个资源

protectedoverridevoidDispose(booldisposing)

{

if(disposing)

{

if(components!

=null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

privatevoidInitializeComponent()

{

button1=newButton();

SuspendLayout();

button1.Location=newSystem.Drawing.Point(32,72);

button1.Name="button1";

button1.Size=newSystem.Drawing.Size(100,30);

button1.TabIndex=0;

button1.Text="调用Excel文件!

";

button1.Click+=newSystem.EventHandler(button1_Click);

AutoScaleBaseSize=newSystem.Drawing.Size(5,13);

this.ClientSize=newSystem.Drawing.Size(292,273);

this.Controls.Add(button1);

this.Name="Form1";

this.Text="如何用VisualC#调用Excel表格!

";

this.ResumeLayout(false);

}

staticvoidMain()

{

Application.Run(newForm1());

}

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

Excel.Applicationexcel=newExcel.Application();

excel.Application.Workbooks.Add(true);

excel.Cells[1,1]="第一行第一列";

excel.Cells[1,2]="第一行第二列";

excel.Cells[2,1]="第二行第一列";

excel.Cells[2,2]="第二行第二列";

excel.Cells[3,1]="第三行第一列";

excel.Cells[3,2]="第三行第二列";

excel.Visible=true;

}

}

(5).编译源程序和程序运行界面:

 在经过了下列命令编译后:

Csc.exe/r:

system.dll/r:

system.windows.forms.dll/r:

system.drawing.dll/r:

excel.dll/r:

office.dll/r:

vbide.dllexcel.cs

  就可以得到"Excel.exe",运行后界面如下

四.VisualC#处理Office套件中的其他成员程序:

本文虽然只介绍了VisualC#在处理Excel表格中经常遇到的一些问题的解决方法,但其实对Office套件的其他成员也有很强的借鉴意义,譬如VisualC#来处理Word文档,在调用Word文档的时候,必须先完成COM组件从非受管代码到受管代码的转换,Word的COM组件位"MSWORD9.OLB",经过转换后也会产生三个DLL文件,但分别是"Word.dll"、"Office.dll"、"VBIDE.dll"。

其实在VisualC#中调用Word,也非常容易。

只需要把调用Excel表格中的代码换成调用Word的代码就可以了,具体如下:

Word.Applicationword=newWord.Application();

word.Application.Visible=true;

  不信你试一下,看看是否达到你的要求。

对于针对Word的其他的操作,总体来说和对Excel表格的操作相类似。

由于针对Word只是一个文档,程序对Word进行的操作是比较少的,所以就不一一介绍了。

五.总结:

本文介绍VisualC#来处理Excel表格的几种最常遇到的情况,虽然针对的只是Excel表格,但对其他Office套件中的成员也具有十分的借鉴意义。

 

程序示例及常见问题:

前提:

首先要把Excel加入到引用,加入方法见:

非受管代码COM组件转换成受管代码的类库

示例1:

读取一个模板excel文件另存为另外一个excel文件

usingSystem;

usingExcel;

namespaceExcelOperator.ClassExcel

{

///

///Example1的摘要说明。

///-----2006.08.31Peter---------

///读取一个模板excel文件另存为另外一个excel文件

///在做完操作之后立刻结束excel进程

///--------End------------

///

publicclassExample1

{

privateDateTimebeforeTime;//Excel启动之前时间

privateDateTimeafterTime;//Excel启动之后时间

privatestringOriginalPath;

privatestringCurrentPath;

publicExample2(stringCurrentPath,stringOriginalPath)

{

this.OriginalPath=OriginalPath;

this.CurrentPath=CurrentPath;

}

publicvoidOperatorExcel()

{

//GC.Collect();

Excel.Applicationexcel;//声明excel对象

beforeTime=DateTime.Now;//获取excel开始启动时间

excel=newExcel.ApplicationClass();//创建对象实例,这时在系统进程中会多出一个excel进程

afterTime=DateTime.Now;//获取excel启动结束的时间

try

{

objectmissing=System.Reflection.Missing.Value;//Missing用于调用带默认参数的方法。

objectreadOnly=true;

excel.Visible=false;//是否显示excel文档

//OpenOriginalExcelFile

excel.Application.Workbooks.Open(OriginalPath,missing,readOnly,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);

Excel.WorkbookmyBook=excel.Workbooks[1];//Workbooks从1开始计数的

Excel.WorksheetmySheet=(Excel.Worksheet)myBook.Worksheets[3];//从1开始计数的

Excel.Ranger=mySheet.get_Range(mySheet.Cells[1,17],mySheet.Cells[65231,17]);//获取矩形选择框

r.NumberFormatLocal=XlColumnDataType.xlTextFormat;//设置该矩形框的文本格式

//SaveAsOriginalExcelFileToCurrentPath

mySheet.SaveAs(CurrentPath,missing,missing,missing,missing,missing,missing,missing,missing,missing);

//释放Excel对象,但在AWeb程序中只有转向另一个页面的时候进程才结束

//可以考虑使用KillExcelProcess()杀掉进程

//ReleaseComObject方法递减运行库可调用包装的引用计数。

详细信息见MSDN

System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);

System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

System.Runtime.InteropServices.Marshal.ReleaseComObject(r);

myBook.Close(null,null,null);

excel.Workbooks.Close();

r=null;

mySheet=null;

myBook=null;

missing=null;

readOnly=null;

excel.Quit();

excel=null;

}

catch

{

KillExcelProcess();//杀掉进程

}

finally

{

//可以把KillExcelProcess();放在该处从而杀掉Excel的进程

}

}

privatevoidKillExcelProcess()

{

System.Diagno

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1