VSTO之旅系列(四):创建Word解决方案

原文:VSTO之旅系列(四):创建Word解决方案

本专题概要

  • 引言
  • Word对象模型
  • 创建Word外接程序
  • 小结

 

一、引言

  在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个专题中,我将为大家介绍如何用VSTO来创建Word项目,对于Word的VSTO开发和Excel的开发很类似,你同样也可以为Word自定义界面的,他们的区别主要在于对象模型的不同,只要熟悉了Word的对象模型,操作Word也就很简单了。下面首先就开始介绍Word的对象模型的。

二、Word对象模型

 创建Word解决方案和创建Excel解决方案之前都需要对他们的对象模型进行了解,因为只有了解了他们中各对象的关系,才能更好处理Word和Excel的文档,下面先给出一张Word对象模型层次结构图:

看上面朋友们肯定对个对象的关系是有所了解了,但是对于每个对象到底代表什么意思还是不怎么明白,下面就具体为大家介绍下每个对象所代表的意思.

Application对象代表Word应用程序,我们打开Word文档就是开启了一个Word应用程序,这里需要注意的是——无论你打开几个Word文档,都是在一个Word进程里进行管理的。它是所有对象的父级(从图中也可以看出,每个对象都是它的子节点)。

在应用程序外接程序项目中(这个在Excel解决方案里都有介绍,对于Word也存在应用程序外接程序项目和文档级项目),我们可以通过下面的方式来获得Application对象: Globals.ThisAddIn.Application

在文档级别项目中,我们可以通过ThisDocument类的Application属性来获得Application对象,即代码为: Word.Application app = Globals.ThisDocument.Application;

Document对象代表着一个Word文档,即使你打开的是一个空文档,也是有一个Document对象,在我们对Word文档的内内容进行编辑,修改,删除,添加操作之前,我们都需要提前获得该对象,获得焦点的文档我们称为活动文档,我们可以通过Application对象的ActiveDocument属性来获得当前活动的文档,代码为:

using Word = Microsoft.Office.Interop.Word;

// 应用程序级项目中获得文档对象
            Word.Document doc= Globals.ThisAddIn.Application.ActiveDocument;

// 文档级项目中获得文档对象
            Word.Application app = Globals.ThisDocument.Application;
            Word.Document doc = app.ActiveDocument;

Selection对象代表当前选择的区域。我们在对Word中内容进行某些操作的时候,例如,改变文本字体大小,此时我们就需要选中该文本,然后设置选中文本的字体大小,这样选择的文本就代表一个Selection对象,这里需要注意的是——Selection对象是一直存在于文档中的,因为有些朋友会问,如果我们没有选中任何文本时,是否还有Selection对象呢?答案是肯定的,当我们没有选择任何文本时,插入点(即操作文本时都会有一个这个符号“|”,该符号就是代表一个插入点)即是一个Selection对象,并且所选的内容可以包含多个不连续的文本块。

Range对象代表一个连续的区域,由一个开始字符位置和一个结束字符位置来确定。我们在文档中定义多个Range对象,看到Range对象,朋友们就会联想到Selection对象,他们都是代表区域,到底他们有什么区别呢?对于他们的区别——Range对象在文档中是不可见的,并且是连续的,而Selection对象是在文档中可见的,且可以包含多个不连续的文本块。通俗的说就是,例如,我们想对某些文本改变字体大小的操作,此时我们可以有两种方式来实现:第一种,就是使用Selection对象来选中该文本再改变其样式(此时选中的文本我们可以在Word文档中可以看见,我们可以清楚的明白那些文本需要改变字体),第二种就是使用Range对象来指定一个开始字符(就是一个文字)位置和一个结束字符的位置,这样在开始字符和结束字符之间就是一个Range对象,然后对该Range对象来设置它的字体样式,但是这整个过程中我们是看不到那些文本被选中了,所以在应用样式之前,我们是不知道那些文本会改变字体的,而是用Selection对象却不同,即使在应用字体样式之前,我们可以肉眼看出那些文本将会改变字体的。

Bookmark对象即书签,在现实生活中,我们使用书签是用来做标记的。同样Word文档中也有书签这个功能,我们可以对Word做一个标记,让你可以知道上次阅读到哪里了,Bookmark就是这样的一个对象。书签可以隐藏也可以变得可见,我们可以通过 View对象的ShowBookmarks属性设置为truefalse

为了帮助更进一步理解这些对象,下面通过一张图来表示各个对象在一个Word文档中的对应关系:

三、创建Word外接程序

  上面已经介绍了Word对象中主要几个对象,在我们对Word文档进行操作的时候都是使用这些主要的对象来进行操作的,对于如何更好的掌握这些对象的使用?方法就是多写程序来练习了。下面就实现一个常见的需求的——把Word文档转换为PDf或xps文件。这里对于如何创建外接项目的过程就不介绍,具体的操作步骤和创建Excel解决方案是一样,只是选择的模板不一样,Excel中选择的是Excel 2010 外接程序模板,Word就自然选择的是Word 2010外接程序模板了。下面具体介绍实现该需求的过程:

  1. 创建完Word 2010外接程序之后,右键项目——>添加——>新建项,选择功能区(可视化设计器),在名称部分输入:“ExportPDFRibbon.cs“;
  2.  点击工具箱,在”Office功能区控件"中拖入Menu控件,然后在Menu控件中插入两个Button按钮,分别命名为"PDF"和”XPS“
  3. 设计RibbonTab,因为上一专题中设计的Ribbon是一个独立的选项卡,所以在本项目中,我不想创建独立的Ribbon,想把Ribbon下的控件放在Home选项卡下,为了实现这个目的,必须把下图中的几个属性设置下,具体属性见下图: 

  4. 在ExportPDFRibbon.cs文件的后台代码(可以按F7来查看后天代码)中插入下面的实现代码:

public partial class ExportPDFRibbon
    {
        private void ExportPDFRibbon_Load(object sender, RibbonUIEventArgs e)
        {
            // 为PDf和XPS按钮注册点击时间
            btnRibbonPDF.Click += new RibbonControlEventHandler(ExportDocument);
            btnRibbonXPS.Click += new RibbonControlEventHandler(ExportDocument);
        }

        // 导出文件方法
        private void ExportDocument(object sender, RibbonControlEventArgs e)
        {

            switch (e.Control.Id)
            {
                    // 判断点击的按钮ID
                case "btnRibbonPDF":
                    // 打开保存文件窗口
                    using (SaveFileDialog saveFileDialog = new SaveFileDialog())
                    {
                        // 设置保存文件窗口的相关属性
                        saveFileDialog.Filter = "All File(*.*)|*.*";
                        saveFileDialog.DefaultExt = ".pdf";
                        saveFileDialog.RestoreDirectory = true;
                        // 在保存文件窗口中点击保存按钮
                        if (saveFileDialog.ShowDialog() == DialogResult.OK)
                        {
                            // 导出为PDF格式
                            Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(
                                saveFileDialog.FileName,
                                Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
                        }
                    }
                    break;
                case "btnRibbonXPS":
                    using (SaveFileDialog saveFileDialog2 = new SaveFileDialog())
                    {
                        saveFileDialog2.Filter = "All File(*.*)|*.*";
                        saveFileDialog2.DefaultExt = ".xps";
                        saveFileDialog2.RestoreDirectory = true;
                        if (saveFileDialog2.ShowDialog() == DialogResult.OK)
                        {
                            // 导出为XPS格式
                            Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(
                                saveFileDialog2.FileName,
                                Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS);
                        }
                    }
                    break;
                default:
                    return;
            }
        }
    }

通过上面的步骤就可以完成开始提出的需求:把Word文档保存为PDF或XPS文件,具体运行结果为:

点击PDF按钮之后,会弹出另存为窗口,在弹出的窗口中输入你想保存的名称,点击保存按钮之后,此时你可以在保存的位置中看到保存的文件名。

 

四、小结

  到这里,本专题的内容就介绍完成了,本专题主要介绍了Word对象模型,通过对对象模型中各对象的使用来对Word文档进行操作,关于对Word文档更多的操作内容我会放在实现Office自动化专题中向大家介绍,最后实现了一个简单的需求——把Word文件转换为PDF或xps文件。希望通过本专题大家可以用VSTO技术来进行Word操作,然后在下一个专题中将为大家介绍下OutLook相关的内容。

 

时间: 2024-12-25 06:21:46

VSTO之旅系列(四):创建Word解决方案的相关文章

VSTO之旅系列(二):创建Excel解决方案

原文:VSTO之旅系列(二):创建Excel解决方案   本专题概要 引言 创建VSTO项目 Excel对象模型 创建Excel外接程序 创建Excel文档级自定义项 小结   一.引言 也许很多朋友都没有听说过VSTO这个东西的,本人之前也同样也不知道的,但是由于工作的原因接触了这方面,由于VSTO方面国内的资料比较少,本人刚开始学习的时候都是参考MSDN的,但是上面很多资料都是英文的,可能学习起来会比较慢点,所以本人把最近一段时间学习的内容记录下来,一来是作为一个巩固的学习笔记,二来希望这些

VSTO之旅系列(五):创建Outlook解决方案

原文:VSTO之旅系列(五):创建Outlook解决方案  本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结   一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案的,所以本专题中将为大家介绍下Outlook相关的内容.我们从Visual Studio 2010 中Office节点下的模板中我们可以看到,Outlook只有外接程序的模板,并没有提供像Word或Excel这样的文档级的模板,所以VSTO没有为Outlook解决方案创建宿主项和宿主控件(Ex

VSTO之旅系列(三):自定义Excel UI

原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结   引言 在上一个专题中为大家介绍如何创建Excel的解决方案,相信大家通过从上面一个专题之后了解了Excel的对象模型,以及Office两种解决方案的,看完上一个专题之后,肯定很多朋友想为Excel自定义属于自己的UI界面,例如,有这样的一些疑问--是否可以使用VSTO来自定义选项卡呢? 是否可以自定义上下文菜单的呢?如果你也有这些

VSTO之旅系列(一):VSTO入门

原文:VSTO之旅系列(一):VSTO入门 引言: 因为工作的原因,这段时间一直在看VSTO的相关的内容的,因此希望通过这个系列来记录下我学习的过程和大家分享Office开发的相关知识,希望以后有朋友从事这方面的也希望通过本系列提供点帮助. 本专题将简单介绍VSTO和VSTO中的一些基本概念进行介绍,下面就直接进入正题了.   1. VSTO介绍 首先介绍下VSTO的历史吧,之前都是用VBA来开发Office解决方案的,后来微软开发出了VSTO这个工具包来创建自定义的Office应用程序,使得开

Listen Software解决方案 “How To” 系列4:创建数据库

创建|解决|数据|数据库 Listen Software解决方案 "How To" 系列4:创建数据库 计划数据库文件位置        三组重演日志文件,每组有两个成员文件        创建数据文件的文件结构        手工创建数据库 1.设定唯一的实例名和数据库字符集 2.设置操作系统变量             (UNIX)                  ORACLE_HOME                  ORACLE_SID                  O

VSTO学习笔记(四)从SharePoint 2010中下载文件

原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给COM加载项添加一些功能:从SharePoint 2010的文档库中下载一个Excel文档到本地. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus Beta x64 上测试通过.   1.

创建Word 2007插件项目——Word 2007高级应用

创建Word 2007插件项目--Word 2007高级应用 创建 Word 2007 插件项目 这里,我将会使用Visual Studio 2008 Beta 2所带的VSTO(Visual Studio Tools for Office)来开发这个插件,此外,Office 2007也是必须的. 图 1 如上图所示,你首先需要确保选择了 .NET Framework 3.5的项目,接着选择Visual C#Office2007Word Add-in作为项目模板(当然,你也可以选择Visual

参数-VSTO运行出现错误,使word启动后开发项无法运行

问题描述 VSTO运行出现错误,使word启动后开发项无法运行 VSTO运行后,出现如下错误:"SignFile"任务不支持"TargetFrameworkVersion"参数.请确认参数存在于此任务中,并且是可设置的公共实例属性未能使用"SignFile"任务的输入参数初始化该任务. 请问是什么原因啊,如何解决呢?谢谢啦... 解决方案 是不是版本的问题?........ 解决方案二: 楼主问题解决没有? 我也遇到类似问题,不过是excel程序

word-使用C#创建Word文档,创建时会崩溃

问题描述 使用C#创建Word文档,创建时会崩溃 想死的心都有了,每次建立一个新的word的时候,就崩溃了.详情见图 解决方案 不好意思,代码给错了,参照一下代码哈: `` //Create New Word Document doc = new Document(); doc.SaveToFile("OperateWord.docx", FileFormat.Docx); 解决方案二: 建议用npoi,不要用office,庞大不稳定还得带上整个office 解决方案三: 可以使用Fr