VSTO:使用C#开发Excel、Word【9】
文件背后的代码
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 /// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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 = ; i < ; i++)
table.Columns.Add("Col " + i.ToString()); for (int i = ; i < ; i++)
table.Rows.Add(r.NextDouble(), r.NextDouble(),
r.NextDouble(), r.NextDouble()); List1.DataSource = table;
} private void Sheet1_Shutdown(object sender, EventArgs e)
{
} #region VSTO Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(Sheet1_Startup);
this.Shutdown += new System.EventHandler(Sheet1_Shutdown);
} #endregion
}
}
构建并运行代码,并确保Excel启动,为工作表引发启动事件,并将该按钮添加到操作窗格。 单击按钮,生成随机DataTable并绑定到列表对象,如图2-12所示。 退出Excel以结束调试会话。
图2-12 运行清单2-7并单击我们添加到“文档操作”任务窗格中的按钮的结果
我们简要说明了VSTO对“文档操作”任务窗格的支持以及VSTO添加到Excel的列表对象的数据绑定能力。 有关VSTO对“文档操作”任务窗格的支持的更多信息,请参见第15章“使用操作窗格”。 有关VSTO对数据绑定的支持的更多信息,请参见第17章“VSTO数据编程”。
结论
本章介绍了Office解决方案的三种基本模式:一个自动化可执行文件,一个加载项和一个文档后面的代码。 本章还介绍了如何使用Visual Studio 2005和Visual Studio 2005 Tools for Office构建这三种基本模式的解决方案。
现在您知道如何在文档解决方案中创建基本的自动化可执行文件,加载项和代码,您将在下一章中使用这些技能,因为重点转向Excel,Word,Outlook和InfoPath的特定功能 可以在你的解决方案中使用
本章仅作为文档中的加载项和代码介绍。 第24章介绍Outlook的VSTO加载项。 第23章介绍Word和Excel的COM加载项。 第3章介绍了Excel的自动化加载项。 第13至17章详细介绍了VSTO文档模型背后的代码。
VSTO:使用C#开发Excel、Word【9】的更多相关文章
- VSTO:使用C#开发Excel、Word【10】
第二部分:.NET中的Office编程本书前两章介绍了Office对象模型和Office PIA. 您还看到如何使用Visual Studio使用VSTO的功能构建文档中的控制台应用程序,加载项和代码 ...
- VSTO:使用C#开发Excel、Word【5】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- VSTO:使用C#开发Excel、Word【4】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- VSTO:使用C#开发Excel、Word【3】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- VSTO:使用C#开发Excel、Word【2】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- VSTO:使用C#开发Excel、Word【1】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- 我的VSTO之路(三):Word基本知识
原文:我的VSTO之路(三):Word基本知识 在前一篇文章中,我初步介绍了如何如何开发一个VSTO程序,在本文中,我将进一步深入介绍Word的插件开发.Word是一个大家在日常工作中一直接触的文档工 ...
- Aspose 强大的服务器端 excel word ppt pdf 处理工具
Aspose 强大的服务器端 excel word ppt pdf 处理工具 http://www.aspose.com/java/word-component.aspx
随机推荐
- ChIP-seq实战 | 染色质免疫共沉淀技术 | ATAC-seq | 染色质开放性测序技术
参考:生信技能树 ChIP-Seq综述 一些简单的copy,纯属个人笔记. ChIP-seq的原理 用于在全基因组范围中研究DNA结合蛋白(相互反应).组蛋白修饰(表观遗传标记)和核小体的技术,研究这 ...
- exam_review to M1
1. 情态动词,尤其是can/can’t,should/shouldn’t. for example: You should have washed the wound.你应该已经洗好了伤口 Well ...
- Destructuring Assignment in JS(解构assignment in js)
Destructuring Assignment In JavaScript 更省事,代码显得也清楚. Arrays 传统的声明赋值: let johnDoe = ["John", ...
- Kali安装nessus
下载 在官方网站下载对应的 Nessus 版本:http://www.tenable.com/products/nessus/select-your-operating-system 这里选择 Kal ...
- AVL平衡二叉树的各种问题(Balanced Binary Tree)
AVL树或者是一棵空树,或者是具有以下性质的非空二叉搜索树: 1. 任一结点的左.右子树均为AVL树: 2.根结点左.右子树高度差的绝对值不超过1. 1.声明 #include<iostream ...
- python基础之lambda,sort,filter,map,递归函数的运用
内容梗概:1. lamda 匿名函数2. sorted()3. filter()4. map()5. 递归函数 1.lambda 形式: lambda 参数:返回值 f = lambda x,y: x ...
- Kubernetes DNS 高阶指南(转发别人 解析很详细)
转发地址:http://www.jintiankansha.me/t/Js1R84GGAl DNS 是 Kubernetes 的核心功能之一,Kubernetes 通过 kube-dns 或 Cor ...
- Leetcode 1004. 最大连续1的个数 III
1004. 最大连续1的个数 III 显示英文描述 我的提交返回竞赛 用户通过次数97 用户尝试次数143 通过次数102 提交次数299 题目难度Medium 给定一个由若干 0 和 1 组成 ...
- MongoDB 教程(三):MongoDB 的下载、安装和配置
一.下载 下载地址:https://www.mongodb.com/download-center#community(这里是Windows 版,其他版本也可以在该网页进行下载) 版本选择: Mong ...
- PostgreSQL CPU占用100%性能分析及慢sql优化
查看连接数变化 CPU利用率到达100%,首先怀疑,是不是业务高峰活跃连接陡增,而数据库预留的资源不足造成的结果.我们需要查看下,问题发生时,活跃的连接数是否比平时多很多.对于RDS for PG,数 ...