zoukankan      html  css  js  c++  java
  • 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相关的内容。

  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/zhili/p/VSTO_Word.html
Copyright © 2011-2022 走看看