大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C# API: 生成和读取Excel文件

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

关键词:APIC#生成Excel文件C#读取Excel文件  阅读(739) 赞(10)

[摘要]本文是对C# API: 生成和读取Excel文件的讲解,对学习C#编程技术有所帮助,与大家分享。

我们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, 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 CSharp
  • How to format an Excel file using C#
  • How to insert a picture in excel from C# App
  • How to insert a background picture in excel
  • How to create Excel Chart from C#
  • How to export excel chart from C#
  • How to excel chart in C# picturebox
  • C# data validation input box in excel file
  • How to read from an Excel file using OLEDB
  • How to insert data to Excel file using OLEDB
  • How to update data in Excel file using OLEDB
  • How to export databse to excel file
  • How 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#代码 收藏代码
  1. usingSystem;
  2. usingSystem.Windows.Forms;
  3. usingExcel=Microsoft.Office.Interop.Excel;
  4. namespaceWindowsApplication1
  5. {
  6. publicpartialclassForm1:Form
  7. {
  8. publicForm1()
  9. {
  10. InitializeComponent();
  11. }
  12. privatevoidbutton1_Click(objectsender,EventArgse)
  13. {
  14. Excel.ApplicationxlApp;
  15. Excel.WorkbookxlWorkBook;
  16. Excel.WorksheetxlWorkSheet;
  17. objectmisValue=System.Reflection.Missing.Value;
  18. xlApp=newExcel.ApplicationClass();
  19. xlWorkBook=xlApp.Workbooks.Add(misValue);
  20. xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
  21. xlWorkSheet.Cells[1,1]="http://csharp.net-informations.com";
  22. xlWorkBook.SaveAs("csharp-Excel.xls",Excel.XlFileFormat.xlWorkbookNormal,misValue,misValue,misValue,misValue,Excel.XlSaveAsAccessMode.xlExclusive,misValue,misValue,misValue,misValue,misValue);
  23. xlWorkBook.Close(true,misValue,misValue);
  24. xlApp.Quit();
  25. releaseObject(xlWorkSheet);
  26. releaseObject(xlWorkBook);
  27. releaseObject(xlApp);
  28. MessageBox.Show("Excelfilecreated,youcanfindthefilec:\\csharp-Excel.xls");
  29. }
  30. privatevoidreleaseObject(objectobj)
  31. {
  32. try
  33. {
  34. System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
  35. obj=null;
  36. }
  37. catch(Exceptionex)
  38. {
  39. obj=null;
  40. MessageBox.Show("ExceptionOccuredwhilereleasingobject"+ex.ToString());
  41. }
  42. finally
  43. {
  44. GC.Collect();
  45. }
  46. }
  47. }
  48. }

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

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

C#代码 收藏代码
  1. Excel.RangechartRange;
  2. chartRange=xlWorkSheet.get_Range("a1","e4");
  3. chartRange.Interior.Color=255;

但是这个255很不好记, 比如青色对应的数字是16777164, 这个就更加不好理解.

所以我们可以改为这样设置颜色, 使用ColorTranslator转换一下:

C#代码 收藏代码
  1. chartRange.Interior.Color=System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

最后还有一种设置方法是不对Color进行设置, 而是设置相应的ColorIndex, 形如下面这样:

C#代码 收藏代码
  1. chartRange.Interior.ColorIndex=3;

ColorIndex的色表参考下面这两个连接:

Color Palette and the 56 Excel ColorIndex Colors

Excel Color Palette and Color Index change using VBA

第一个连接特别详细,

第二个连接则介绍了如何使用VBA在Excel文件中生成这些色表, 同时还提供了一个xls格式的色表文件下载.



相关评论