Visual Studio .NET自动化MS Excel

介绍

我写这篇文章是为了回应那些我在的e-mail中得到的要求,就是如何自动化MS Excel。许多正在看这篇文章的人也许也对下面关于如何自动化MS Word文档有兴趣,这儿有链接Automating MS Word using C#, 还有另外一个链接 Automating MS Word using C++.

回到主题,在商业世界中有许多电子表格,越来越我们不会只创建和使用简单的Excel,例如存储敏感和非常重要的试验数据等等……

作为开始,在这篇文章中我们不会探究非常高级的在Excel中可用的自动化,但它会给出一个有望供其他人使用的框架,以便能改进和让它更加具有可扩展性。该框架允许你创建一个Excel对象,并控制一些基本功能例如得到工作表信息,还有从给定范围的工作表中提取数据。

我们不得不开发的程序有更大的范围,我将集中精力在Excel部分。但是有少数几个我们为文件系统导航使用到线程而开发的简洁的类,如果对这篇文章有足够多的响应,或则我有机会去做它,我会继续把它发布,期间我希望下面的文章对你有用。

背景

充分理解OOP思想,熟悉C#编程语言。

用到的代码

我将提供一个能用在你的项目中的Excel外覆类。这些代码将在下面讨论。我将不会太深入Excel对象模型,因为,首先它将是一个巨大的任务,第二已经存在一些Microsoft写的类似文档了,这只是一个对想了解如何建立一个Office自动化工程的初学者的快速入门教程:

建立一个新工程,为了简便起见,建立一个Windows应用程序,建好后,右键单击“解决方案资源管理器”,选择“添加引用”,等添加引用窗口出现后,选择“COM”标签,这将显示你机器上所有可用的组件名称。既然我们将使用MS Excel,你就向下移动滚动条直到找到: Microsoft Excel 11.0 Object Library.

注意:你的也许是不同的版本,这将取决于你机器上安装的Office的版本。这是MS Excel 2003.

 1用Visual Studio .NET自动化MS Excel(翻译)using System;
 2用Visual Studio .NET自动化MS Excel(翻译)
 3用Visual Studio .NET自动化MS Excel(翻译)using System.IO;
 4用Visual Studio .NET自动化MS Excel(翻译)
 5用Visual Studio .NET自动化MS Excel(翻译)using System.Collections;
 6用Visual Studio .NET自动化MS Excel(翻译)
 7用Visual Studio .NET自动化MS Excel(翻译)using System.Threading;
 8用Visual Studio .NET自动化MS Excel(翻译)
 9用Visual Studio .NET自动化MS Excel(翻译)using Office = Microsoft.Office.Core;
10用Visual Studio .NET自动化MS Excel(翻译)
11用Visual Studio .NET自动化MS Excel(翻译)using Excel = Microsoft.Office.Interop.Excel;
12用Visual Studio .NET自动化MS Excel(翻译)
13用Visual Studio .NET自动化MS Excel(翻译)using System.Diagnostics;
14用Visual Studio .NET自动化MS Excel(翻译)
15用Visual Studio .NET自动化MS Excel(翻译) 
16用Visual Studio .NET自动化MS Excel(翻译)
17用Visual Studio .NET自动化MS Excel(翻译)namespace ATPMain
18用Visual Studio .NET自动化MS Excel(翻译)
19

你要想能够在你的代码中使用Excel 对象,需要包含上面两个名称空间。我们需要一个Excel.Application 对象,一个Excel.Workbook 对象,一个 Excel.Sheets 对象, 还有一个Excel.Worksheet 对象。这些对象将用来控制和从Excel中提取数据,因此我们声明如下的一些变量来代表提及到的对象:excelApp, excelWorkbook, excelSheets, excelWorksheet.

 

  1用Visual Studio .NET自动化MS Excel(翻译)    用Visual Studio .NET自动化MS Excel(翻译).
  2用Visual Studio .NET自动化MS Excel(翻译)
  3用Visual Studio .NET自动化MS Excel(翻译) 
  4用Visual Studio .NET自动化MS Excel(翻译)
  5用Visual Studio .NET自动化MS Excel(翻译)    private static object vk_missing    = System.Reflection.Missing.Value;
  6用Visual Studio .NET自动化MS Excel(翻译)
  7用Visual Studio .NET自动化MS Excel(翻译) 
  8用Visual Studio .NET自动化MS Excel(翻译)
  9用Visual Studio .NET自动化MS Excel(翻译)    private static object vk_visible    = true;
 10用Visual Studio .NET自动化MS Excel(翻译)
 11用Visual Studio .NET自动化MS Excel(翻译)    private static object vk_false        = false;
 12用Visual Studio .NET自动化MS Excel(翻译)
 13用Visual Studio .NET自动化MS Excel(翻译)    private static object vk_true        = true;
 14用Visual Studio .NET自动化MS Excel(翻译)
 15用Visual Studio .NET自动化MS Excel(翻译) 
 16用Visual Studio .NET自动化MS Excel(翻译)
 17用Visual Studio .NET自动化MS Excel(翻译)    private bool vk_app_visible = false;
 18用Visual Studio .NET自动化MS Excel(翻译)
 19用Visual Studio .NET自动化MS Excel(翻译) 
 20用Visual Studio .NET自动化MS Excel(翻译)
 21用Visual Studio .NET自动化MS Excel(翻译)    private object    vk_filename;
 22用Visual Studio .NET自动化MS Excel(翻译)
 23用Visual Studio .NET自动化MS Excel(翻译) 
 24用Visual Studio .NET自动化MS Excel(翻译)
 25

在上面的代码块中,我们预先定义了一些常量,将会使用这些来打开一个给定的Excel文件,要找出更多关于每个参数代表什么,能做什么,你应该查询与Excel一起的文档。

我们有两个构造函数: VkExcel() ,默认构造函数将启动一个隐藏的Excel,而另外一个VkExcel(bool visible) 构造函数,将给你一个选择,确认Excel应用程序是否可见。

 1用Visual Studio .NET自动化MS Excel(翻译)    用Visual Studio .NET自动化MS Excel(翻译)
 2用Visual Studio .NET自动化MS Excel(翻译)
 3

上面的代码启动和停止Excel应用程序。startExcel() 检查excelApp 对象是否初始化,如果已经初始化,仅确认设定在visible属性的可见性;如果没有初始化,就继续向前,初始化对象。stopExcel() 也检查对象是否正在使用,如果是就关闭该进程。

注意:pProcess[0].Kill() 将确认Excel正常运行!有些做Excel自动化的人总是抱怨,在他们退出应用程序后,Excel消失了,但是Excel进程仍然在任务监视器里,这代码将为你处理好那情况!

 

 1用Visual Studio .NET自动化MS Excel(翻译)   用Visual Studio .NET自动化MS Excel(翻译)
 2用Visual Studio .NET自动化MS Excel(翻译)
 3

好的,这样看来,上面的代码允许我们打开一个Excel文件。OpenFile(string fileName, string password) 携带两个参数,文件名,或者是完整名称,路径+文件名,还有就是密码参数,该密码是用来保护表格的。注意这个打开函数携带了一大串参数,我们在类中已经定义了它们。CloseFile() 将会关闭文件。

注意: 这些代码是为MS Excel 2003提供的,对于更早的版本,参数有一点不同,你需要去查看下文档。如果你需要帮助,给我发一个e-mail,我将尽量帮助你解决。

 1用Visual Studio .NET自动化MS Excel(翻译)    用Visual Studio .NET自动化MS Excel(翻译)
 2用Visual Studio .NET自动化MS Excel(翻译)
 3

 

上面的代码演示怎样得到一个工作簿中所有的电子表格,还有得到一个确定的表格并从中提取数据。GetExcelSheets()得到所有表格. FindExcelATPWorkSheet(string worksheetName) 搜索名为worksheetName表格。

 1用Visual Studio .NET自动化MS Excel(翻译)    用Visual Studio .NET自动化MS Excel(翻译)
 2用Visual Studio .NET自动化MS Excel(翻译)
 3

GetRange(string range) 这个函数用来从Excel表格中实际上得到数据,我们转化返回的值把它们放入一个string[]. 我们用接下来的函数完成这工作:this.ConvertToStringArray(array). 然后这个string[]被返回给调用者,调用者可用以任何方式来使用它。

 

 1用Visual Studio .NET自动化MS Excel(翻译)   用Visual Studio .NET自动化MS Excel(翻译)
 2用Visual Studio .NET自动化MS Excel(翻译)
 3

在最后的代码部分: ConvertToStringArray(System.Array values) 将接收这个从GetRange(...) 传来的数组,把数组放入一个字符串数组中,并返回它。

我们已经到达了我们对象的结尾,就像你能看到的,它是一个只有最小功能的非常简单的对象,但它对任何需要快速入门的人是一个很好的起点,而且你能非常简单地把它扩展成一个更加复杂的对象。

我没有包含一个demo工程。原因是使用这个工程是相当简单的。你只要按照下面的步骤初始化和使用 VkExcel对象。

  1. 建立一个VkExcel类型的对象:VkExcel excel = new VkExcel(false);. 记住那个VkExcel(...) 带了一个参数,确认Excel程序是否可见。

  2. 打开一个Excel文件:file: string status = excel.OpenFile( filename, password );, 传人文件名或者完整文件名(如果你使用的是一个OpenFileDialog),如果文件没有密码保护,把password设为null

  3. 检查文件是否成功打开: if( status.equal("OK")) ...

  4. 重新得到Excel表格: excel.GetExcelSheets(); 将得到对象内的所有表格。

  5. 搜索特定的表格:excel.FindExcelWorksheet(worksheetName); 将查找给定文件中任何的表格,传人worksheetName作为参数。

  6. 获取给定范围的数据:string[] A4D4 = excel.GetRange("A4:D4"); 这将以string[]形式返回范围内的值。

以上就是全部了!

 

相关文章:

  • 2021-11-26
  • 2022-12-23
  • 2022-01-03
  • 2021-09-28
  • 2022-03-03
  • 2021-12-28
  • 2021-07-15
  • 2022-12-23
猜你喜欢
  • 2021-09-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
  • 2021-06-07
  • 2022-12-23
相关资源
相似解决方案