VSTO:使用工作簿
一、新建工作簿
以编程方式创建工作簿时,所创建的将是一个本机Microsoft.Office.Interop.Excel.Workbook对象,而不是Microsoft.Office.Tools.Excel.Workbook宿主项。
1.单击工作表中的按钮新建工作簿
在工作簿Sheet1中新建一个按钮,在按钮的单击事件中编写以下代码新建一个工作簿:
using Excel=Microsoft.Office.Interop.Excel;
Excel.Workbook newWorkbook = this.Application.Workbooks.Add();
newWorkbook.Application.Caption ="新建工作簿";
2.单击功能区按钮新建工作簿
在Ribbon中添加一个按钮,编写以下代码可新建一个工作簿:
Excel.Workbook wb =Globals.ThisWorkbook.Application.Workbooks.Add();
wb.Application.Caption ="test";
二、打开工作簿
Microsoft Office Excel 中的 Workbooks 集合使您能够使用所有打开的工作簿和打开工作簿。
使用 Workbooks 集合的 Open 方法,传入工作簿的路径。
在Ribbon中添加一个按钮,编写以下代码可打开一个工作簿:
Excel.Workbook wb =Globals.ThisWorkbook.Application.Workbooks.Open(@"c:\test.xlsx");
三、关闭工作簿
调用ThisWorkbook.Close方法来关闭与自定义项关联的工作簿。
Globals.ThisWorkbook.Close();
四、保存工作簿
可通过多种方式保存工作簿。
如果工作簿以前没有保存过,则应该通过指定一个路径来保存工作簿。如果没有显式路径,Excel会使用创建文件时为其指定的名称将文件保存在当前文件夹中。
还可以保存工作簿的副本,而不修改内存中打开的工作簿。
1.在当前位置保存工作簿
调用ThisWorkbook类的Save方法可保存工作簿。
2.另存工作簿
调用ThisWorkbook类的SaveAs方法使用新路径保存工作簿。
this.SaveAs(@"C:\Book1.xml")
3.保存工作簿副本
调用ThisWorkbook类的SaveCopyAs方法可以将工作簿的副本保存到文件中,而不修改内存中打开的工作簿。当需要创建备份副本而不修改工作簿的位置时,此方法十分有用。
在保存工作簿时,取消任何保存或复制工作簿的方法将在代码中引发运行时错误。例如,如果过程调用了SaveAs方法但未禁用Excel的提示,用户在得到提示时单击了“取消”时,Excel就会引发一个运行时错误,应该在程序中捕获该错误。
五、激活工作簿
Workbooks 集合的Activate方法激活一个Excel工作簿并选择该工作簿中的第一个工作表。
1.用Activate方法激活工作簿
使用Workbooks集合的Activate方法可激活工作簿。
((Microsoft.Office.Interop.Excel._Workbook)this.Application.Workbooks[1]).Activate();
2.引用工作簿
可以使用整数(指示集合中的位置)或工作簿名称将索引编入Workbooks集合。但是,如果要通过名称引用工作簿,则必须使用标题栏中显示的名称,在保存文件之前,该名称将不包括文件扩展名。
可使用工作簿的位置号或名称引用各个工作簿。如以下代码:
Excel.Workbook wb = this.Application.Workbooks[1];
// Before Book1 is saved:
wb = this.Application.Workbooks["Book1"];
// After Book1 is saved:
wb = this.Application.Workbooks["Book1.xls"];
六、保护工作簿
可以保护Excel工作簿,使用户无法添加或删除工作表,并且还可以通过编程方式取消对工作簿的保护。可以选择指定一个密码,指示是否希望保护该结构(使用户无法移动表)以及指示是否希望保护工作簿的窗口。
1.保护工作簿
保护工作簿并不会阻止用户编辑单元格。若要保护数据,必须保护工作表。
下面的代码示例使用变量来设置密码。
调用工作簿的Protect方法并包含一个密码。
this.Protect(getPasswordFromUser, missing, missing);
必须在ThisWorkbook类中运行此示例,而不要在工作表类中运行。
2.取消工作簿保护
调用 Unprotect方法取消工作簿保护,如果需要,还需传递一个密码。
this.Unprotect(getPasswordFromUser);
七、设置和清除工作簿密码
给工作簿设置一个密码可以限制其他用户对工作簿的访问。
下面的示例设置工作簿的密码。
将ThisWorkbook的密码属性设置为由用户提供的字符串。
private void SetPassword()
{
string password =this.Application.InputBox("请输入密码:", missing, missing,missing, missing, missing, missing, missing).ToString();
string confirmPassword =this.Application.InputBox("请再输一次密码:", missing, missing,missing, missing, missing, missing, missing).ToString();
if (password !=confirmPassword)
{
MessageBox.Show("两次输入的密码不同!");
Globals.ThisWorkbook.Password = "";
}
else
{
Globals.ThisWorkbook.Password= password;
}
}
若要清除密码,只需将Password属性设置为空字符串即可。
八、获取和设置工作簿的默认文件路径
使用_Application对象的DefaultFilePath属性可获取默认路径。下面的代码显示当前默认路径。
System.Windows.Forms.MessageBox.Show(this.Application.DefaultFilePath);
向Application对象的DefaultFilePath属性赋予一个字符串值,可设置工作簿的默认路径。以下代码设置工作簿保存路径为C:\temp。
this.Application.DefaultFilePath = @"C:\temp";
九、最近使用的工作簿文件
RecentFiles属性返回一个集合,该集合包含Excel最近使用的文件列表中出现的所有文件名。列表长度因用户选择要保留的文件数而异。
以下代码遍历最近使用的文件的列表,并将名称显示在相对于工作表单元格中。
Excel.Range rng = this.Application.get_Range("A1",missing);
for(int i=1; i<=this.Application.RecentFiles.Count; i++)
{
rng.get_Offset(i -1,0).Value2 = this.Application.RecentFiles.get_Item(i).Name;
}
十、显示打开对话框
下面的代码提示用户在Excel中打开一个新工作簿。它设置属性以允许多重选择、清除可用筛选器的列表,并添加两个新筛选器。然后,该代码将调用FileDialog对象Execute方法,以打开请求的文件。
Microsoft.Office.Core.FileDialog fd =this.Application.get_FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogOpen);
fd.AllowMultiSelect = true;
fd.Filters.Clear();
fd.Filters.Add("Excel Files", "*.xls;*.xlw",missing);
fd.Filters.Add("All Files", "*.*", missing);
if (fd.Show() != 0)
{
fd.Execute();
}