VSTO扩展Excel之一:工作薄相关处理

一般地,Excel的VSTO外接程序经常需要获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理,但针对工作薄的创建、打开、关闭、重命名等操作还是会遇到的。
首先我们要清楚两个概念,工作薄与工作表的概念,其中工作薄是文件,工作表是工作薄的工作页,一个工作薄可以有多个工作表(Excel2007以前的版本,一个工作簿中最多有255个工作表,07版本之后的理论上可以有无限个工作表,其建立的工作表数量受电脑内存的影响)。
Excel的Workbooks 对象包括以下方法:

  • Add
  • CanCheckOut
  • CheckOut
  • Close
  • Open
  • OpenDatabase
  • OpenText
  • OpenXML
    经常用到的方法主要是Add,Open,Close等。

一、 创建工作表

  • 一般使用Workbooks对象的Add方法创建新工作簿;
  • expression.Add(Template)
  • expression 必需。该表达式返回一个 Workbooks 对象。
  • Template Variant 类型,可选。确定如何创建工作簿。如果本参数为指定一现有 Microsoft Excel
    文件名的字符串,那么创建新工作簿将以该指定的文件作为模板。如果本参数为常量,新工作簿将包含指定类型的单张工作表。可为
    XlWBATemplate的常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet 或 xlWBATWorksheet。如果省略本参数,Microsoft Excel 将创建包含一定数目的空白工作表的工作簿(该数目由SheetsInNewWorkbook 属性设置)。
    下面我们由这4种参数来创建Excel的工作薄,看看他们有什么区别,代码如下:
 private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            eApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
            //开启VSTO之旅,添加工作薄
            //xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet、 xlWBATWorksheet用法
            eApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATChart);
            eApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATExcel4IntlMacroSheet);
            eApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATExcel4MacroSheet);
            eApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
        }

如下图所示:
在这里插入图片描述各参数加上后形成的Excel工作薄分别如下:

  • Excel.XlWBATemplate.xlWBATChart
    在这里插入图片描述
  • Excel.XlWBATemplate.xlWBATExcel4IntlMacroSheet(国际通用宏)

在这里插入图片描述

  • Excel.XlWBATemplate.xlWBATExcel4MacroSheet(宏)
    在这里插入图片描述
  • Excel.XlWBATemplate.xlWBATWorksheet
    在这里插入图片描述

二、 打开已存在的工作簿

更多详细资料点击:https://docs.microsoft.com/zh-CN/office/vba/api/Excel.Workbooks.Open
要打开现有的工作簿,可以使用Workbook集合的Open方法,该方法返回已打开的Workbook对象。 打开一个必需的parametera字符串表示要打开的工作簿的文件名。 它还有14个可选参数,如果不想使用任何这些参数,您可以传递Type.Missing。
语法
表达式 . Open( FileName , UpdateLinks , ReadOnly , Format , Password , WriteResPassword , IgnoreReadOnlyRecommended , Origin , Delimiter , Editable , Notify , Converter , AddToMru , Local , CorruptLoad )
表达式 一个代表 Workbooks 对象的变量。
参数

名称 必需/可选 数据类型 说明
FileName 可选 Variant String. 要打开的工作簿的文件名。
UpdateLinks 可选 Variant 指定更新文件中外部引用(链接)的方式,如下面的公式 =SUM([Budget.xls]Annual!C10:C25) 中对 Budget.xls 工作簿中某个区域的引用。如果省略此参数,则提示用户指定链接的更新方式。有关此参数所用值的详细信息,请参阅"说明"部分。如果 Microsoft Excel 正在打开 WKS、WK1 或 WK3 格式的文件,并且 UpdateLinks 参数为 0,则不创建任何图表;否则 Microsoft Excel 将根据附加于该文件的图形生成图表。
ReadOnly 可选 Variant 如果为 True,则以只读模式打开工作簿。
Format 可选 Variant 如果 Microsoft Excel 打开文本文件,则由此参数指定分隔符。如果省略此参数,则使用当前的分隔符。有关此参数使用的值的详细信息,请参阅"备注"部分。
Password 可选 Variant 一个字符串,包含打开受保护工作簿所需的密码。如果省略此参数并且工作簿已设置密码,则提示用户输入密码。
WriteResPassword 可选 Variant 一个字符串,包含写入受保护工作簿所需的密码。如果省略此参数并且工作簿已设置密码,则提示用户输入密码。
IgnoreReadOnlyRecommended 可选 Variant 如果为 True ,则不让 Microsoft Excel 显示只读的建议消息(如果该工作簿以 "建议只读"选项保存)。
Origin 可选 Variant 如果该文件为文本文件,则此参数用于指示该文件的来源,以便正确映射代码页和回车/换行符 (CR/LF))。可为以下XlPlatform 常量之一: xlMacintosh 、 xlWindows 或 xlMSDOS 。如果省略此参数,则使用当前操作系统。
Delimiter 可选 Variant 如果该文件为文本文件并且 Format 参数为 6,则此参数是一个字符串,指定用作分隔符的字符。例如,可使用 Chr(9) 代表制表符,使用",“代表逗号,使用”;"代表分号,或者使用自定义字符。只使用字符串的第一个字符。
Editable 可选 Var iant
Notify 可选 Variant 当文件不能以可读写模式打开时,如果此参数为 True ,则可将该文件添加到文件通知列表。Microsoft Excel 将以只读模式打开该文件并轮询文件通知列表,并在文件可用时向用户发出通知。如果此参数为 False 或被省略,则不请求任何通知,并且不能打开任何不可用的文件。
Converter 可选 Variant 打开文件时试用的第一个文件转换器的索引。首先试用的是指定的文件转换器;如果该转换器不能识别此文件,则将试用所有其他转换器。转换器索引由FileConverters 属性返回的转换器行号组成。
AddToMru 可选 Variant 如果为 True ,则将该工作簿添加到最近使用的文件列表中。默认值为 False 。
Local 可选 Variant 如果为 True ,则以 Microsoft Excel(包括控制面板设置)的语言保存文件。如果为 False (默认值),则以 Visual Basic for Applications (VBA) 语言保存文件(VBA 通常为美国英语版本,除非从中运行 Workbooks.Open 的 VBA 项目是旧的国际化 XL5/95 VBA 项目)。
CorruptLoad 可选 XlCorruptLoad 可为以下常量之一: xlNormalLoad 、 xlRepairFile 和 xlExtractData 。如果未指定任何值,则默认行为是 xlNormalLoad ,并且当通过 OM 启动时不尝试恢复状态。

返回值
一个代表打开的工作簿的 Workbook 对象。
注解
默认情况下,以编程方式打开文件时将启用宏。使用 AutomationSecurity 属性可设置以编程方式打开文件时所用的宏安全模式。
可在 UpdateLinks 参数中指定下面的一个值,以确定在工作簿打开时是否更新外部引用(链接)。

含义
0 工作簿打开时不更新外部引用(链接)。
3 工作簿打开时更新外部引用(链接)。

您可在 Format 参数中指定下面的一个值,以确定文件的分隔字符。

分隔符
1 标签
2 逗号
3 空格
4 分号
5 没有
6 自定义字符(请参阅 Delimiter 参数)

示例如下(打开C盘根目录下的CVSTO.xlsx文件):

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            //eApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
            //开启VSTO之旅,添加工作薄
         Excel.Workbook workbook = this.Application.Workbooks.Open(  @"c:\CVSTO.xlsx", missing,missing,missing,missing, missing, missing, missing, missing, missing, missing,missing, missing, missing, missing); 
        }

三、OpenDatabase 方法

返回一个代表数据库的工作簿 对象。
语法
表达式。OpenDatabase(FileName、 CommandText、 CommandType、 BackgroundQuery、 ImportDataAs)
_表达式_一个代表工作簿 对象的变量。
参数

名称 必需/可选 数据类型 说明
FileName 必需 String 包含数据库的位置和文件名称的连接字符串。
CommandText 可选 Variant 查询的命令文本。
CommandType 可选 Variant 查询的命令类型。 指定XlCmdType 枚举的常量之一: xlCmdCube、 xlCmdList、 xlCmdSql、 xlCmdTable和xlCmdDefault。
BackgroundQuery 可选 Variant 此参数是 variant 数据类型, 但只能传递布尔值。 如果传递 True,将在后台(异步)执行查询。 默认值为 False。
ImportDataAs 可选 Variant 此参数使用XlImportDataAs 枚举的值之一。 此枚举的两个值为 xlPivotTableReport 和 xlQueryTable。 传递这两个值之一以便以数据透视表或查询表的形式返回数据。 默认值为 xlQueryTable。

返回值
Workbook
示例

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            //eApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
            //开启VSTO之旅,添加工作薄
           //我们把C:\Users\Administrator\AppData\Local\Microsoft\Office\16.0\OfficeFileCache下的CentralTable.accdb文件拷贝到c盘的根目录下,然后打开它
            Excel.Workbook workbook = this.Application.Workbooks.OpenDatabase(@"C:\CentralTable.accdb", missing,missing, missing, missing);                      
        }

运行程序后,出现如下界面,提示将数据库文件导入到Excel之中。
在这里插入图片描述

发布了19 篇原创文章 · 获赞 36 · 访问量 4090

猜你喜欢

转载自blog.csdn.net/CVSTO/article/details/104281898