关键在于第四个对象

来源:互联网 发布:网络歌曲改编歌词 编辑:程序博客网 时间:2024/06/06 19:43

  我们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, Excel文件要好一些。

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

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

  于是一搜索,里面包含了这些主题的代码示例, 示例很详细, 编译可直接运行。

  为了理解上面这些代码需要理解一下Excel的对象模型,

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

  前三个对象比较好理解, 关键在于第四个对象: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;

  简单的说就是:

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

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

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

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

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

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

  using System;

  using System.Windows.Forms;

  using Excel = Microsoft.Office.Interop.Excel;

  namespace WindowsApplication1

  {

  public partial class Form1 : Form

  {

  public Form1()

  {

  InitializeComponent();

  }

  private void button1_Click(object sender, EventArgs e)

  {

  Excel.Application xlApp ;

  Excel.Workbook xlWorkBook ;

  Excel.Worksheet xlWorkSheet ;

  object misValue = System.Reflection.Missing.Value;

  xlApp = new Excel.ApplicationClass();

  xlWorkBook = xlApp.Workbooks.Add(misValue);

  xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

  xlWorkSheet.Cells[1, 1]

  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("Excel file created , you can find the file c:\\csharp-Excel.xls");

  }

0 0