一 创建Office项目

新建项目,出现 “新建项目”对话框。
在对话框顶部的组合框中,选择 “.NET Framework 3.5”或 “.NET Framework 4”。 
在“模板”窗格中想要使用的语言节点下,展开 “Office”。
选择 “2010”或 “2007”节点。
在项目模板的列表中,出现各种Office模板;可根据需要选择,如下图;

二 创建一个 Excel 文档级自定义项

在项目模板列表中,选择 “Excel 2007 工作簿”或 “Excel 2010 工作簿”;出现下图;输入文档名称;

出现下图,点确定;

可以通过修改在设计器中打开的工作表来设计自定义项的用户界面 (UI)。例如,可以向单元格添加文本、应用公式或添加 Excel 控件;如下图;

以编程方式向工作表中添加文本
用下面的代码替换 Sheet1_Startup 事件处理程序。 Sheet1 打开后,此代码便会向此工作表中添加第二行文本。
private void Sheet1_Startup(object sender, System.EventArgs e)
{
    Microsoft.Office.Tools.Excel.NamedRange nr =
        this.Controls.AddNamedRange(this.Range["A2", missing], "NamedRange1");
    nr.Value2 = "此文本由代码添加";
}

运行程序,自动打开Excel并显示如下内容;

清理项目;完成项目的开发后,应移除生成输出文件夹中的文件和生成过程创建的安全设置。
在 Visual Studio 的 “生成”菜单中,单击 “清理解决方案”。

三 创建一个 Excel 应用程序级外接程序

新建项目,在项目模板列表中,选择 “Excel 2007 外接程序”或 “Excel 2010 外接程序”。

编写用于向保存的工作簿中添加文本的代码

在 ThisAddIn 代码文件中,将下面的代码添加到 ThisAddIn 类中。 
void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel)
{
    Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
    Excel.Range firstRow = activeWorksheet.get_Range("A1", missing);
    firstRow.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown, System.Type.Missing);
    Excel.Range newFirstRow = activeWorksheet.get_Range("A1", missing);
    newFirstRow.Value2 = "Excel是个好东西";
}

以下代码添加到 ThisAddIn_Startup 事件处理程序中。
this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler(Application_WorkbookBeforeSave);

运行,结果如下图;单击 保存 按钮时,在程序中添加的文本出现在Excel中。

四 在运行时在应用程序级项目中向工作表中添加控件

在 “项目”菜单上,单击 “添加新项”;
在 “添加新项”对话框中,选择 “功能区(可视化设计器)”,再单击 “添加”;
名为 Ribbon1.cs 的文件将在功能区设计器中打开,并显示一个默认选项卡和组;
从 “工具箱”的 “Office 功能区控件”选项卡中将 CheckBox 控件拖到 “group1”上;如此添加三个CheckBox;
并把其名称和Text属性改为:Button,Button;NamedRange,NamedRange;ListObject,ListObject

并把其名称和Text属性分别改为:Button,Button;NamedRange,NamedRange;ListObject,ListObject

操作过程如下三图所示;

为Button控件添加如下代码,其他两个CheckBox类似;

private void Button_Click(object sender, RibbonControlEventArgs e)
{
    Worksheet worksheet = Globals.Factory.GetVstoObject(
        Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);

string buttonName = "MyButton";

if (((RibbonCheckBox)sender).Checked)
    {
        Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
        if (selection != null)
        {
            Microsoft.Office.Tools.Excel.Controls.Button button =
                new Microsoft.Office.Tools.Excel.Controls.Button();
            worksheet.Controls.AddControl(button, selection, buttonName);
        }
    }
    else
    {
        worksheet.Controls.Remove(buttonName);
    }
}

引用如下的命名空间;

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools.Excel.Extensions;

如果 using Microsoft.Office.Tools.Excel.Extensions;
出错;

手动添加引用:
C:\Program Files\Reference Assemblies\Microsoft\VSTO40\v4.0.Framework\Microsoft.Office.Tools.Excel.v4.0.Utilities.dll

将下面的方法添加到 ThisAddIn 类中。
void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
    bool SaveAsUI, ref bool Cancel)
{
    Excel.Worksheet worksheet =
        workbook.Worksheets[1] as Excel.Worksheet;

if (Globals.Factory.HasVstoObject(worksheet) && 
        Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0)
    {
        Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet);

while (vstoWorksheet.Controls.Count > 0)
        {
            object vstoControl = vstoWorksheet.Controls[0];
            vstoWorksheet.Controls.Remove(vstoControl);
        }

}
}

用下面的代码替换 ThisAddIn_Startup 方法。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.WorkbookBeforeSave += 
        new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler
            (Application_WorkbookBeforeSave);
}

运行,结果如下图;

选择 Sheet1 中的任何单元格;单击 选择 加载项 选项卡;
在 “group1”组中,单击 “Button”,一个按钮显示在所选单元格中;
选择 Sheet1 中的另一个单元格,在 “group1”组中,单击 “NamedRange”,将为所选单元格定义一个命名区域;
选择 Sheet1 中的一系列单元格,在 “group1”组中,单击 “ListObject”,将为所选单元格添加一个列表对象。

五 创建一个 PowerPoint 应用程序级外接程序

新建项目,在项目模板列表中,选择 “PowerPoint 2007 外接程序”或 “PowerPoint 2010 外接程序”。

编写向每张新幻灯片中添加文本的代码
将下面的代码添加到 ThisAddIn 类中。
当用户将新幻灯片添加到活动演示文稿时,此事件处理程序会将文本框添加到新幻灯片的顶部,然后向文本框中添加一些文本。

void Application_PresentationNewSlide(PowerPoint.Slide Sld)
{
    PowerPoint.Shape textBox = Sld.Shapes.AddTextbox(
        Office.MsoTextOrientation.msoTextOrientationHorizontal, 0, 0, 500, 50);
    textBox.TextFrame.TextRange.InsertAfter("此文本由代码生成.");
}

将以下代码添加到 ThisAddIn_Startup 事件处理程序中。
this.Application.PresentationNewSlide += 
    new PowerPoint.EApplication_PresentationNewSlideEventHandler(
    Application_PresentationNewSlide);

运行程序,文本添加到幻灯片顶部的新文本框中,如下图;

六 创建一个 Word 文档级自定义项
新建项目,选择 “Word 2007 文档”或 “Word 2010 文档”,或 Word 2010 模板;

可以通过修改在设计器中打开的文档来设计自定义项的用户界面 (UI)。例如,可以添加文本、表或 Word 控件;

以编程方式向文档中添加文本

用下面的代码替换 ThisDocument_Startup 事件处理程序;
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    this.Paragraphs[1].Range.InsertParagraphAfter();
    this.Paragraphs[2].Range.Text = "此文本由代码生成";
}

运行程序,文档中出现由代码添加的文本,如下图;

七 运行时在应用程序级外接程序中向文档添加控件
首先创建 Word 外接程序项目;

提供用于向文档添加控件的 UI;
在 “项目”菜单上,单击 “添加新项”;
在 “添加新项”对话框中,选择 “功能区(可视化设计器)”;单击 “添加”;
在功能区设计器中,单击 “group1”组;
将 “group1”的 “Label”属性更改为“添加控件”;
从 “工具箱”的 “Office 功能区控件”选项卡中将 “CheckBox”控件拖到 “group1”上,更改其名称和Text属性为addButtonComboBox和 添加按钮 ;
向 “group1”再添加一个复选框,更改其名称和Text属性为addRichTextCheckBox和添加多格式文本控件;

将下面的代码添加到 ThisAddIn 类中;
private Microsoft.Office.Tools.Word.Controls.Button button = null;
private RichTextContentControl richTextControl = null;

将下面的方法添加到 ThisAddIn 类中;
internal void ToggleButtonOnDocument()
{
    Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);

string name = "MyButton";

if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
    {
        Word.Selection selection = this.Application.Selection;
        if (selection != null && selection.Range != null)
        {
            button = vstoDocument.Controls.AddButton(
                selection.Range, 100, 30, name);
        }
    }
    else
    {
        vstoDocument.Controls.Remove(name);
    }
}

将下面的方法添加到 ThisAddIn 类中;当用户单击功能区中的“添加多格式文本控件”复选框时,如果选中了该复选框,此方法会向文档中的当前选定内容中添加一个 RichTextContentControl;如果清除了该复选框,此方法会移除 RichTextContentControl;
internal void ToggleRichTextControlOnDocument()
{
    Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);

string name = "MyRichTextBoxControl";
    if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
    {
        Word.Selection selection = this.Application.Selection;
        if (selection != null && selection.Range != null)
        {
            richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                selection.Range, name);
        }
    }
    else
    {
        vstoDocument.Controls.Remove(name);
    }
}

在 ThisAddIn.cs 中,将下面的方法添加到 ThisAddIn 类中
private void Application_DocumentBeforeSave(Word.Document Doc, 
    ref bool SaveAsUI, ref bool Cancel)
{
    bool isExtended = Globals.Factory.HasVstoObject(Doc);

if (isExtended)
    {
        Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Doc);

if (vstoDocument.Controls.Contains(button))
        {
            vstoDocument.Controls.Remove(button);
            Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
        }
    }
}

将下面的代码添加到 ThisAddIn_Startup 事件处理程序中;
this.Application.DocumentBeforeSave += 
    new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
    Application_DocumentBeforeSave);

在Ribbon.cs 或 MyRibbon.vb 代码文件中,将生成的 addButtonCheckBox_Click 和 addRichTextCheckBox_Click 事件处理程序替换为下面的代码;
private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e)
{
    Globals.ThisAddIn.ToggleButtonOnDocument();
}

private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e)
{
    Globals.ThisAddIn.ToggleRichTextControlOnDocument();
}

运行程序;在Word文档中,多次按 Enter 以向文档添加新的空段落;
选择一个段落;选择 加载项 选项卡;
在 “添加控件”组中,单击 “添加按钮”,一个按钮随即显示在第一个段落中;
选择最后一个段落,在 “添加控件”组中,单击 “添加多格式文本控件”;一个多格式文本内容控件随即添加到最后一个段落中;
如下图所示;

以上项目的源码下载:

http://pan.baidu.com/s/1eQy9RPK

需要安装VS2010和Office 2010,才能运行;若装的是Office 2007,按上述步骤操作,把模板类型改为Office 2007类型;

.Net操作Office总结一 - 使用VS2010自带的Office模板进行开发相关推荐

  1. 未来教育计算机二级Excel解析,Excel操作小技巧,助你学好计算机二级office!

    原标题:Excel操作小技巧,助你学好计算机二级office! Office考试中最难的是什么?当然是Excel函数啊! 小编辛苦整理了excel10大懒人技巧,让你考试速提分!还不赶紧收藏起来 一. ...

  2. python office库使用_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...

    一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...

  3. python实践答辩ppt_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶没压力!...

    看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶没压力!一.导读大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了

  4. python开发office插件_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...

    一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...

  5. python的ppt报告_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...

    一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...

  6. word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!

    全套office零基础视频教程|200集视频+插件+模板,免费送! 大学生.教师.职员进入职场的基础技能有Word,Excel,PPT.这几个软件不能局限于基础功能操作,还要能熟练的设计.表格美化界面 ...

  7. office实操技能01:修改微软Office页面的(非背景的)浅绿底色、设置默认字体和主题颜色、取消页眉横线、PPT默认的等线字体

    目录 1 处理word中默认中文字体是等线的问题 2 处理word中没有设置背景色,但页面底色是浅绿色的问题 3 修改office的主题颜色 4 删除页眉横线 5 处理PPT中的等线字体 这篇博文主要 ...

  8. 计算机上装的word怎么卸载,电脑残留Office无法重新安装如何解决|电脑完全卸载Office的方法...

    我们知道在电脑中如果存在之前安装版本的软件,那么很有可能会导致软件重新安装失败.如果想要成功安装软件,必须要完全卸载之前版本的软件.这对于微软Office系列办公软件来说也是一样的,接下来介绍通过官 ...

  9. office移动端_微软推出移动端office三合一版 相比WPS哪个更好?我对比了一下

    最近,微软终于正式上线了其在移动端的三合一office客户端,摆脱了以往想用office办公软件需要分别下载word.excel.powerpoint三个独立应用的情况.而老对手金山早已在移动端深耕多 ...

  10. 信息学奥赛一本通 1227:Ride to Office | OpenJudge NOI 4.6 2404:Ride to Office

    [题目链接] ybt 1227:Ride to Office OpenJudge NOI 4.6 2404:Ride to Office 原题是英文题,虽说两题题意相同,但一本通网站没有对该问题进行直 ...

最新文章

  1. 记录由Equal基础知识引起的内存泄露
  2. 河北传媒学院计算机专业分数线,河北传媒学院2019年各省各专业录取分数
  3. swift 字符串中查找字符位置
  4. what happened after a template is selected in Create with template button
  5. Git 初始化版本库
  6. C# 二维码的生成 Open Source QRCode Library
  7. php thinkphp重定向,ThinkPHP框架让页面重定向方法总结
  8. MVC 下拉列表三级联动
  9. python 类初始化函数_C类初始化函数
  10. 5G通信网络专题报告:新一轮移动通信网络建设迎来高潮
  11. Android官方模拟器安装
  12. 如何搭建一个可以搜题的微信公众号?完整教程
  13. 计算机要重启电脑才能检测出u盘启动,u盘要电脑重启才能用
  14. 元数据与数据治理|apache-atlas2.0.0 源码编译和安装部署(CHD版本)
  15. v-charts组件化示例及动态传参
  16. Web安全之认证机制
  17. 解决:mmc0: error -110 whilst initialising SD card.md
  18. CSDN博客放阿里妈妈广告代码的方法
  19. MobileNetV2网络结构分析
  20. Android 天气APP(三十四)语音搜索

热门文章

  1. JSP-session编写购物车
  2. 【一周头条盘点】中国软件网(2018.2.5~2018.2.9)
  3. 2019年美赛E题翻译与思路详解
  4. R语言文本分析|利用jiebaR进行分词与词频统计
  5. 一个LaTeX论文模板
  6. 盘点开发者喜欢用的浏览器,最后这一款值得拥有
  7. vscode最适合编程的 6 种字体
  8. 合并报表软件系统_报表难题统统扫除!
  9. 互联网招聘数据分析处理与可视化
  10. java离线安装包_java8电脑版安装包下载