C# API: 生成和读取Excel文件

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C# API: 生成和读取Excel文件我们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, Excel文件要好一些.

因为相比csv,xml等文件, Excel中我们可以运用自动筛选, 窗口锁定, 还可以控制背景颜色, 前景颜色, 字体, 网格等等...

业务逻辑并不复杂, 文件的内容和格式也比较固定,所以大家决定直接拿C#去创建这些文件.

于是一搜索,首先来到了这个链接:C# Excel Tutorial

里面包含了下面这些主题的代码示例, 示例很详细, 编译可直接运行.

How to create Excel file in C#How to open an Excel file in C#How to read an Excel file in CSharpHow to format an Excel file using C#How to insert a picture in excel from C# AppHow to insert a background picture in excelHow to create Excel Chart from C#How to export excel chart from C#How to excel chart in C# pictureboxC# data validation input box in excel fileHow to read from an Excel file using OLEDBHow to insert data to Excel file using OLEDBHow to update data in Excel file using OLEDBHow to export databse to excel fileHow to export DataGridView to excel file

为了理解上面这些代码需要理解一下Excel的对象模型, 可以参考msdn的下面这个链接

Excel Object Model Overview

里面介绍了4个核心对象:

Microsoft.Office.Interop.Excel.application

Microsoft.Office.Interop.Excel.Workbook

Microsoft.Office.Interop.Excel.Worksheet

Microsoft.Office.Interop.Excel.Range

前三个对象比较好理解, 关键在于第四个对象:Range.

起初我以为更改一些单元格的字体颜色格式等等的, 是需要通过Cell这个对象来做.

看完了之后才发现, 这些操作其实都是通过Range来完成的.

还包括和并单元格, 设置网格线等等, 甚至读取和设置一个单元格的值,都可以通过Range来完成,

所以基本上当我们操作excel的时候, 我们最经常的就是和Range对象打交道, 而很少使用Cell等对象.

如果有什么需求不知道怎么实现,

建议可以先到Range对象里面翻一翻, 看看msdn上Range对象的Members,Methods,PRoperties的相关文档.

还有一点要补充的是:

不仅仅是C#, 还包括其他语言的Excel API, 都是对Excel对象模型的直接模拟和包装.不过java,Ruby等等.

也就是说, 其他语言的Excel API也都会有上面那四个主要对象, 而且也都会以近乎相同的方式, 干着差不多的事儿.

接下来想写一写关于Missing.Value的事儿

对于前面给出的,创建Excel表的例子的代码, 转载如下:

这段代码中,很多函数调用都传递了这个参数:

object misValue = System.Reflection.Missing.Value;

他的详细介绍参考这个链接Missing Class上面的例子,

简单的说就是:

当我想以一些参数的默认值来调用一些dll中的方法的, 我们在方法调用中忽略掉这些参数也不对,

我们用null传递给这些参数还不对,

这时我们便可以给这些参数赋值以Missing.Value来告诉运行时环境, 用这个参数的默认值帮我运行吧.

对于这段代码还有一个需要注意的问题:

注意Application,Workbook,Worksheet这三个对象的清理工作

该保存的保存, 该close的close, 该quit的quit, 最后, 他们还都应该被release

C#代码usingSystem;usingSystem.Windows.Forms;usingExcel=Microsoft.Office.Interop.Excel;namespaceWindowsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){Excel.ApplicationxlApp;Excel.WorkbookxlWorkBook;Excel.WorksheetxlWorkSheet;objectmisValue=System.Reflection.Missing.Value;xlApp=newExcel.ApplicationClass();xlWorkBook=xlApp.Workbooks.Add(misValue);xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);xlWorkSheet.Cells[1,1]="http://csharp.net-informations.com";xlWorkBook.SaveAs("csharp-Excel.xls",Excel.XlFileFormat.xlWorkbookNormal,misValue,misValue,misValue,misValue,Excel.XlSaveAsaccessMode.xlExclusive,misValue,misValue,misValue,misValue,misValue);xlWorkBook.Close(true,misValue,misValue);xlApp.Quit();releaSEObject(xlWorkSheet);releaseObject(xlWorkBook);releaseObject(xlApp);MessageBox.Show("Excelfilecreated,youcanfindthefilec:\\csharp-Excel.xls");}privatevoidreleaseObject(objectobj){try{System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);obj=null;}catch(Exceptionex){obj=null;MessageBox.Show("ExceptionOccuredwhilereleasingobject"+ex.ToString());}finally{GC.Collect();}}}}

最后想写一下关于如何设置字体的颜色, 以及单元格的背景颜色的事儿.

以背景色设置为红色为例, 首先我们可以写出形如下面这样的代码:

C#代码

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航