VSTO:使用C#开发Excel、Word【9】

2021-08-09 16:56

阅读:727

标签:操作   生成   mat   point   code   注意   src   结果   ima   文件背后的代码VSTO支持文档背后的代码,要求开发人员使用VSTO项目中生成的具有预连接上下文和预连接事件的类。这些类有时被称为“代码后面”类,因为它们是与特定文档或工作表相关联的代码。在Word中,与文档对应的类后面有一个代码。在Excel中,工作簿中的classone有多个代码,工作簿中的每个工作表或图表工作表都有一个代码。 您的代码在文档项目后面的VSTO代码中第一次运行时,当Office引发由为您创建的类后面的任何代码处理的Startup事件。 VSTO通过您正在编写代码的类的代码的基类提供上下文。自定义Excel工作表的类后面的VSTO代码源自包含Excel工作表的所有方法,属性和事件的基类。这使您能够在工作表类的启动方法中编写这样的代码。 MessageBox.Show(String.Format("{0} is the sheet name", this.Name)); 通过使用this.Name,您是指从基类继承的Excel Worksheet对象的Name属性。 清单2-6显示了Excel Worksheet的类后面的VSTO代码。 除了类中的代码中的启动和关闭方法之外,还有一个名为InternalStartup的生成方法。 您不应该将任何代码放在这个InternalStartup方法中,因为它是由VSTO自动生成的,修改它可能会破坏Visual Studio对类后面的代码的支持。 相反,您的启动代码应该在启动事件处理程序中。 文档类后面的VSTO代码也使用部分类来隐藏VSTO生成的一些附加代码。 清单2-6  VSTO Excel工作簿定制 using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Microsoft.VisualStudio.Tools.Applications.Runtime; using Excel = Microsoft.Office.Interop.Excel; using Office = Microsoft.Office.Core; namespace ExcelWorkbook1 { public partial class Sheet1 { private void Sheet1_Startup(object sender, EventArgs e) { // Initial entry point. // This code gets run first when the code behind is created // The context is implicit in the Sheet1 class MessageBox.Show("Code behind the document running."); MessageBox.Show(String.Format("{0} is the sheet name", this.Name)); } private void Sheet1_Shutdown(object sender, EventArgs e) { } #region VSTO Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InternalStartup() { this.Startup += new System.EventHandler(Sheet1_Startup); this.Shutdown += new System.EventHandler(Sheet1_Shutdown); } #endregion } } Excel中的文档后面的VSTO代码在本节中,我们使用VSTO在Excel中为文档创建一些简单的代码。 首先,启动VSTO并选择文件>新建>项目菜单项。 如前所述,导航到Visual C#根下的Office节点。 我们将使用C#创建一个Excel工作簿项目。 如果您已经有一个要添加VSTO自定义代码的工作簿,则可以在“新建项目”对话框中单击“确定”后出现的对话框中指定其位置。 这一次,我们将从零开始,创建一个新的,空白的工作簿。 图2-8  选择与您的代码关联的工作簿 图2-7  使用“新建项目”对话框创建Excel Workbook项目 创建项目后,会出现设计器视图,如图2-9所示。   图2-9  VSTO Excel代码的设计视图。 请注意图2-9中的一些有趣的事情。 首先,Excel作为设计器在Visual Studio 2005中运行,与开发Windows窗体项目时的Windows窗体设计器相同。 其次,看菜单栏如图2-10所示。 VSTO将Visual Studio菜单(构建,调试等)和Excel菜单项(格式,数据等)合并在一起。 在Visual Studio和Excel(例如工具)中显示的菜单项通过向Visual Studio菜单(如Microsoft Office Excel工具)添加子菜单进行合并,可以选择此菜单项以查看Excel工具菜单。 图2-10 合并Visual Studio和Excel菜单 第三,请注意图2-9中的工具箱包含一个新的类别:Excel控件。使用Visual Studio设计文档时,可以使用Excel用户熟悉的Excel菜单项或Visual Studio用户熟悉的工具箱习惯,创建命名范围和列表对象。 第四,请注意,在这种情况下,“属性”窗口显示所选对象的属性Sheet1。您可以使用“属性”窗口来编辑Excel对象的属性,与Windows窗体项目中编辑控件和窗体的属性相同。 第五,请注意,解决方案资源管理器已经有四个类。每个底层的Excel工作表和工作簿对象都由一个可以扩展和自定义的.NET类来表示。当您对设计器中的文档进行更改时,后面的代码将自动更新。例如,将列表对象从工具箱拖到Sheet1设计器上,并将其绘制为10行×4列,如图2-11所示。 图2-11 在设计器中创建ListObject 从“属性”窗口可以看到,设计者为新的列表对象选择了一个默认名称。我们可以编辑它,但在这个例子中,我们将保留默认名称List1。 我们来看看这个工作表背后的代码,并对它进行一些简单的更改。右键单击解决方案资源管理器中的Sheet1.cs并选择查看代码。我们将简要说明两个VSTO功能:ActionsPane和列表对象数据绑定。我们将声明一个Windows窗体按钮作为类的成员变量,并将其称为myButton。在启动事件中,我们将通过将其添加到ActionsPane的Controls集合中,在Excel的“文档操作”任务窗格中显示该按钮。这样做会导致Excel显示“文档操作”任务窗格并显示我们的按钮。我们还将处理按钮的Click事件,当点击按钮时,我们将数据将我们的列表对象绑定到随机生成的DataTable。清单2-7显示了这段代码。 清单2-7 将文档操作任务窗格和数据添加控件的VSTO自定义将ListObject控件绑定到数据表 using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Microsoft.VisualStudio.Tools.Applications.Runtime; using Excel = Microsoft.Office.Interop.Excel; using Office = Microsoft.Office.Core; namespace ExcelWorkbook1 { public partial class Sheet1 { Button myButton = new Button(); DataTable table; private void Sheet1_Startup(object sender, EventArgs e) { myButton.Text = "Databind!"; myButton.Click += new EventHandler(myButton_Click); Globals.ThisWorkbook.ActionsPane.Controls.Add(myButton); } void myButton_Click(object sender, EventArgs e) { List1.DataSource = null; table = new DataTable(); Random r = new Random(); for (int i = 0; i


评论


亲,登录后才可以留言!