C#中创建、打开、读取、写入、保存Excel的一般性代码

摘要:
//Hi.baidu.com/zhaocbo/item/e840bcf941932d15fe3582281。Excel对象Microsoft的Excel对象模型包括128个不同的对象,包括COM组件、ActiveX组件、Win32API函数、指针操作等。在Visual C#中调用Excel的COM组件。A、 NET组件实际上是下面的DLL。NET,COM组件使用其类库(TLB)来存储其描述信息。

---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228

1. Excel对象
微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

2. C#中的受管代码和非受管代码 
在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写 程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比 如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编 写实时/高效程序等。

3 .Visual C#中调用Excel的COM组件
一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
3.1 将Excel的COM组件转换为.NET组件
在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到“Microsoft Excel 9.0 Object Library”(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。
这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。

3.2 Visual C#打开Excel表格
事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。
在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关 系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

Excel.Application excel = new Excel.Application ();//引用Excel对象
excel.Application.Workbooks.Add ( true );//引用Excel工作簿
excel.Visible = true ;//使Excel可视

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

3.3 往Excel表格中输入数据
在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。
Excel.Application excel = new Excel.Application () ;
excel.Application.Workbooks.Add ( true ) ;
excel.Cells[ 1 , 1 ] = "First Row First Column" ;
excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
excel.Visible = true ;
 
3.5安装一个使用COM组件的.NET程序
如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。
首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。
其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。
最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows Registry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装 在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET 仍然用传统的COM+机制来处理事务的提交、回滚等。

4 小结
通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。也使我们了解了在C#中如何使用COM组件。

参考文献:
[1] 刘洪成 C#高级编程 清华大学出版社 2003.7工作 187~200

C#中创建、打开、读取、写入、保存Excel的一般性代码

首先,在引用的COM中找到Microsoft Excel 11.0 Object Library,添加。

using System; 
using System.Reflection; // 引用这个才能使用Missing字段 
using Excel;

namespace CExcel1 
{ 
class Class1 
{ 
[STAThread] 
static void Main(string[] args) 
{ 
//创建Application对象 
Excel.Application xApp=new Excel.ApplicationClass(); 

xApp.Visible=true; 
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件 
Excel.Workbook xBook=xApp.Workbooks._Open(@"D:Sample.xls", 
Missing.Value,Missing.Value,Missing.Value,Missing.Value 
,Missing.Value,Missing.Value,Missing.Value,Missing.Value 
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);         
      //xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码 
//指定要操作的Sheet,两种方式: 

Excel.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1]; 
//Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet; 

//读取数据,通过Range对象 
Excel.Range rng1=xSheet.get_Range("A1",Type.Missing); 
Console.WriteLine(rng1.Value2); 

//读取,通过Range对象,但使用不同的接口得到Range 
Excel.Range rng2=(Excel.Range)xSheet.Cells[3,1]; 
Console.WriteLine(rng2.Value2); 

//写入数据 
Excel.Range rng3=xSheet.get_Range("C6",Missing.Value); 
rng3.Value2="Hello"; 
rng3.Interior.ColorIndex=6; //设置Range的背景色 

//保存方式一:保存WorkBook 
xBook.SaveAs(@"D:CData.xls", 
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value, 
Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value, 
Missing.Value,Missing.Value); 

//保存方式二:保存WorkSheet 
xSheet.SaveAs(@"D:CData2.xls", 
Missing.Value,Missing.Value,Missing.Value,Missing.Value, 
Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value); 

//保存方式三 
xBook.Save(); 
xSheet=null; 
xBook=null; 
xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出 
xApp=null; 
} 
} 
}

免责声明:文章转载自《C#中创建、打开、读取、写入、保存Excel的一般性代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇进度条QProgressBarC# 获取时间戳(支持毫秒)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python json数据的转换

1  Python数据转json字符串   import json   json_str = json.dumps(py_data) 参数解析:   json_str = json.dumps(py_data,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_asc...

单片机模拟 1/2 Bias、1/4 Duty的 LCD 驱动使用方法

工作原理方式一     根据 LCD 的驱动原理可知,LCD 像素点上只能加上 AC 电压,LCD 显示器的对比度由 COM脚上的电压值减去 SEG 脚上的电压值决定,当这个电压差大于 LCD 的饱和电压就能打开像素点,小于 LCD 阈值电压就能关闭像素点,LCD 型 MCU 已经由内建的 LCD 驱动电路自动产生 LCD 驱动信号,因此只要 I/O 口能...

RPA-UiPath学习之启程

因公司需要将部分原人工的业务采用RPA技术进行替代,把我抓了壮丁。 于是我开始学习起RPA。 公司选择的是目前市场占有率最高的Uipath。 UiPath这个Studio工具,大概是采用wpf开发。 在uipath实现的项目可以有两个选择VB和C#,两者都是基于.NET FRAMEWORK生态下的。 所以,这对C# .NET程序员而言,学习成本相对很低。...

[原创]C#通过引用Office Excel (2007) 组件实现对Excel文件的操作

对用应用软件来说,将报表转出为Excel文件,进行二次加工,或者根据Excel模版填充数据,是非常常用的。实现对Excel文件的操作,如将报表转出为Excel或根据已有的Excel模版进行填充,有很多方法,比如使用第三方组件,根据Open XML的标准,将WEB页面中的控件直接输出等等,还有一种方式就是引用Office Excel组件,直接由.NET程序调...

[转载]使用iText操作pdf文件

使用iText操作pdf文件        前段时间写过一篇文章《java读取pdf文件的内容》,pig0045给我回复,说可以直接利用iText搞定,我很感激,因为以前处理pdf文件并不多,对这块相关组件并不了解,pig0045给我介绍了一个新的方法,谢谢!欣喜之余,马上google了一把iText,发现iText在生成pdf文件方面功能很强大,而在读取...

java websocket @ServerEndpoint注解说明

http://www.blogjava.net/qbna350816/archive/2016/07/24/431302.html https://segmentfault.com/q/1010000004955225 https://www.cnblogs.com/interdrp/p/4091056.html 框架是workermansocket.io...