一般地,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之中。