在 Visual C# 中要操作 Excel 文件必须先调用 Excel 的 COM 组件,调用的方式就是在项目中添加引用,如下图:
引用後,会增加两项:
将 Excel 的 COM 添加入引用後,就可以编写程序代码来操作 Excel 了。先来看一下底下的一段代码:
Excel.Application aExcelApp = new Excel.Application();
aExcelApp.Visible = true;
Excel.Workbook aBook1 = aExcelApp.Workbooks.Add();
Excel.Worksheet aSheet1 = (Excel.Worksheet)aBook1.Sheets[1];
Excel.Range aRange = aSheet1.get_Range("A1");
aRange.Value2 = "Hello!";
aBook1.Close();
aExcelApp.Quit();
记得先在源代码文件开头处添加对 Excel 对象的命名空间引用:
using Excel = Microsoft.Office.Interop.Excel;
上面这一段代码执行时会开启一个 Excel 空档,然後在 Sheet1 的 A1 填入"Hello!"。
Excel 的四个基本对象
Microsoft Excel 对象模型很多不同的对象,但最重要丶用得最多的,则是下列四个对象。
(1) Application :代表一个 Excel 程序。
(2) WorkBook :代表一个 Excel 工作簿。
(3) WorkSheet :代表一个 Excel 工作表,一个 WorkBook 包含好几个工作表。
(4) Range :代表 WorkSheet 中的一个或多个单元格。
正如上面的代码中所但到的,Application 对象的 Workbooks 属性表示该 Excel 中的工作簿集合,而 Workbook 对象的 Sheets 属性代表了该工作簿的表格集合,包括了工作表及图表。Workbook 对象也提供了 Worksheets 属性和 Charts 属性,分别代表纯粹的工作表集合和图表集合。如果能确认表格的类型,那麽可以直接使用这两个属性。
为了方便应用程序开发,Application 对象也提供了 Sheets 丶 Worksheets 和 Charts 这三个属性,表示当前活动工作簿的表格集合。如果 Excel 中没有打开的工作簿,调用这些属行会发生异常。
反过来,Workbook 丶Worksheet 和 Range 对象都提供了一个 Application 属性,用于获得它们所属的应用程序对象。
建立了 Application 对象之後,必须向工作簿集合新增一个新的工作簿:
Excel.Workbook aBook1 = aExcelApp.Workbooks.Add( [Template=Type.Missing] );
Add 方法的参数可以被忽略略,表示新增一个空白的工作簿,默认有三个空白表。如果直接打开 Excel 时所看到的一样。若给定一个已存在的全路径档名,那麽将会开启该档。例如:D:\\temp\\Book1.xls。
开启已存在的档案,有时会用如下的方式,因为 Open 方法的参数除了档名之外,还有很多,如 UdateLink, ReadOnly, … 等等,各有其目的,在此就略过不谈。
Excel.Workbook aBook1 = aExcelApp.Workbooks.Open(“D:\\temp\\Book1.xls”);
打开了工作簿,接下来就是要取得工作表,取得工作表的方式有下列几种:
Excel.Worksheet aSheet1 = (Excel.Worksheet)aBook1.Sheets[1];
Excel.Worksheet aSheet1 = (Excel.Worksheet)aBook1.Sheets[“Sheet1”];
Excel.Worksheet aSheet1 = (Excel.Worksheet)m_aWB.Sheets.get_Item(1);
Excel.Worksheet aSheet1 = (Excel.Worksheet)m_aWB.Sheets.[ “Sheet1”];
而取得工作表中单元格的方式有下列几种:
Excel.Range aRange = aSheet1.get_Range(“A1”);
Excel.Range aRange = aSheet1.get_Range(“A1”, Type.Missing);
Excel.Range aRange = aSheet1.get_Range(“A1:C10”, Type.Missing);
Excel.Range aRange = aSheet1.get_Range(“A1”, "C10”); // 与上列相同
Excel.Range aRange = aSheet1.get_Range(“A:C”, Type.Missing);
Excel.Range aRange = aSheet1.get_Range(“3:5”, Type.Missing);
如果要取得的区域只有一个单元格,那麽可以使用 Worksheet 对象的 Cells 属性,例如:
Excel.Range aRange = (Range)aSheet1.Cells[Row, Col];
取得 Range 之後,就能对单元格进行读取或写入的动作了。
aRange.Value2 = "Hello!";
string buf = (string)aRange.Value2;
关毕 Excel 的方式如下:
aExcelApp.Workbooks.Close();
aExcelApp.Quit();