from: http://sifang2004.cnblogs.com/archive/2006/02/04/325345.html

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 Excelusing System;
 2
用Visual Studio .NET自动化MS Excel
 3用Visual Studio .NET自动化MS Excelusing
 System.IO;
 4
用Visual Studio .NET自动化MS Excel
 5用Visual Studio .NET自动化MS Excelusing
 System.Collections;
 6
用Visual Studio .NET自动化MS Excel
 7用Visual Studio .NET自动化MS Excelusing
 System.Threading;
 8
用Visual Studio .NET自动化MS Excel
 9用Visual Studio .NET自动化MS Excelusing Office =
 Microsoft.Office.Core;
10
用Visual Studio .NET自动化MS Excel
11用Visual Studio .NET自动化MS Excelusing Excel =
 Microsoft.Office.Interop.Excel;
12
用Visual Studio .NET自动化MS Excel
13用Visual Studio .NET自动化MS Excelusing
 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 Excelnamespace
 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[]形式返回范围内的值。

以上就是全部了!

相关文章:

  • 2022-12-23
  • 2021-05-18
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
  • 2022-02-13
  • 2021-12-21
猜你喜欢
  • 2022-02-09
  • 2021-10-07
  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2021-07-15
相关资源
相似解决方案