[介绍]

本文是应在ASP.NET里创建Microsoft Word文档之需而写的。这篇文章演示了在ASP.NET里怎么创建和修改Microsoft Word文档。

[背景]

自动化是一种能让各种语言编写的(如:Visual Basic.NET或C#)应用程序在程序级别上控制其他应用程序。
    对于Word的自动化允许你执行诸如创建新的文档,向文档里添加文本,邮件合并和格式化文档这些操作。在Word和其他的Microsoft Office程序里,那些通过用户接口进行的可视化操作也可以通过程序级别的自动化来实现。
    Word通过对象模型把这个程序可操作的功能向外提供了使用接口。
    对象模型是一组类和方法的集合,这些类和方法与Word的逻辑组件构成对应。例如,他可能是应用程序对象,文档对象,段落对象,每一个对象都包含了Word组件的功能。

[建立工程]

在.NET里操作Word的第一步就是添加COM引用到你的工程里,通过右键点击Solution Explorer的Reference,Add Reference。选择COM选项卡,查找Microsoft Word 10.0 Object Library。点击选择,OK。
    这将把封装有Word的COM的程序集自动的添加到应用程序目录里。
    现在,你可以建立一个Word的实例了:

    Word.ApplicationClass oWordApp = new Word.ApplicationClass();

你可以调用Word提供给你的方法和属性来操纵Word文档。
    学习如何使用Word,Excel,Powerpoint的对象模型最好的途径就是使用在这些Office应用里使用Macro Recorder:

1.在Tools菜单的Macro选项里选择 Record New Macro ,并且执行你有兴趣的任务。
    2.在Tools菜单的Macro选项里选择 Stop Recording。
    3.如果你进行了纪录,选择Tools菜单的Macro选项里的Macros,找到你记录的宏,你可以编辑它。

上面的操作产生了VBA代码来完成你记录的任务。需要注意的是,宏在大多数情况下不是最好的代码,但是它提供了一种便捷和可用的方法。
    下面例子打开并添加一写文字:

    object fileName = "c:\\database\\test.doc";
    object readOnly = false;
    object isVisible = true;
    object missing = System.Reflection.Missing.Value;
    Word.ApplicationClass oWordApp = new Word.ApplicationClass();

Word.Document oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing,ref readOnly,
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref isVisible,ref missing,ref missing,ref missing);

oWordDoc.Activate();

oWordApp.Selection.TypeText("This is the text");
    oWordApp.Selection.TypeParagraph();
    oWordDoc.Save();

oWordApp.Application.Quit(ref missing, ref missing, ref missing);

如果创建一个新文档并保存是这样写的:

    Word.ApplicationClass oWordApp = new Word.ApplicationClass();

Word.Document oWordDoc = oWordApp.Documents.Add(ref missing, ref missing,ref missing, ref missing);

oWordDoc.Activate();

oWordApp.Selection.TypeText("This is the text");
    oWordApp.Selection.TypeParagraph();
    oWordDoc.SaveAs("c:\\myfile.doc");

oWordApp.Application.Quit(ref missing, ref missing, ref missing);

在C#里,Word文档类的打开方法是这样定义的:Open(ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object)。在C#里的打开方法需要15个参数,并且每个参数必须被ref关键字所描述,而且是object类型。
    第一个参数是文件,名,在Visual Basic.NET里通常是一个String,但是在在C#里,它必须是一个包含有String的object,代码是这样的:

    object fileName = "c:\\database\\test.doc";

虽然我们仅需要使用Open方法的第一个参数,但是C#不允许使用默认参数,所以我们赋予它14个object类型的值:System.Reflection.Missing.Value

[使用摸版]

如果你需要自动的建立有通用格式的文档,那你可以使用基于预格式化的摸版来建立新文档,这样可以方便很多。
    在Word里使用摸版而不是建立空文档有两个明显的优点:

1.你可以更大程度的格式化文档和控制文档里的对象。
    2.可以用较少的代码建立文档。

通过使用摸版,你可以调整表格、段落和其他一些在文档里的对象的位置,同时包括格式化这些对象。通过使用自动化处理,你可以建立一个基于摸版的文档,代码如下:

    Word.ApplicationClass oWordApp = new Word.ApplicationClass();
    object oTemplate = "c:\\MyTemplate.dot";
    oWordDoc = oWordApp.Documents.Add(ref oTemplate, ref Missing,ref Missing, ref Missing);

在你使用的摸版里,你可以定义一些记号,自动化处理将向这些位置填充文本,如下:

    object oBookMark = "MyBookmark";
    oWordDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";

使用摸版的另一个优点是你可以创建和保存那些在运行过程中你想要的格式化样式,如下:

    object oStyleName = "MyStyle";
    oWordDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);

[使用CCWordApp类]

在工程中包含了CCWordApp.cs这个文件,我不想总是在写象插入文本,打开文档这样的代码。
    所以,我决定把一些最重要的功能封装到CCWordApp类里去。
    下面代码简要描述了这个类和他的功能:

    public class CCWordApp
    {
    //it's a reference to the COM object of Microsoft Word Application
    private Word.ApplicationClass oWordApplic;
    // it's a reference to the document in use
    private Word.Document oWordDoc;

// Activate the interface with the COM object of Microsoft Word
    public CCWordApp();

// Open an existing file or open a new file based on a template
    public void Open( string strFileName);

// Open a new document
    public void Open( );

// Deactivate the interface with the COM object of Microsoft Word
    public void Quit( );

// Save the document
    public void Save( );

//Save the document with a new name as HTML document
    public void SaveAs(string strFileName );

// Save the document in HTML format
    public void SaveAsHtml(string strFileName );

// Insert Text
    public void InsertText( string strText);

// Insert Line Break
    public void InsertLineBreak( );

// Insert multiple Line Break
    public void InsertLineBreak( int nline);

// Set the paragraph alignment
    // Possible values of strType :"Centre", "Right", "Left", "Justify"
    public void SetAlignment(string strType );

// Set the font style
    // Possible values of strType :"Bold","Italic,"Underlined"
    public void SetFont( string strType );

// Disable all the style
    public void SetFont( );

// Set the font name
    public void SetFontName( string strType );

// Set the font dimension
    public void SetFontSize( int nSize );

// Insert a page break
    public void InsertPagebreak();

// Go to a predefined bookmark
    public void GotoBookMark( string strBookMarkName);

// Go to the end of document
    public void GoToTheEnd( );

// Go to the beginning of document
    public void GoToTheBeginning( );

打开一个存在的文件的代码将是这样的:

    CCWordApp test ;
    test = new CCWordApp();
    test.Open ("c:\\database\\test.doc");
    test.InsertText("This is the text");
    test.InsertLineBreak;
    test.Save ();
    test.Quit();

[细节]

演示工程包含:
    CCWordApp.cs - 上面使用的类
    CreateDocModel.aspx - 建立基于使用书签的摸版的新文档的例子。
    CreateNewDoc.aspx - 建立新文档,并向其中添加一写文本。
    ModifyDocument.aspx - 打开一个存在的文档,并在末尾追加一些文本。
    template\template1.dot - 摸版的例子(在CreateDocModel.aspx中使用到)

注意你用来保存文档的目录,应该是可重写的。
    可以在 Web.config 里修改这个路径。

[说明]

Word操作权限问题,有两种方法:
1、使用模拟帐户,在Web.config文件中加入
<!identity impersonate="true" userName="administrator" password=""/>
2、在DCOM组件服务中给MICROSOFT.Word组件 赋予ASP.NET的操作权限,具体步骤:
(1)打开开始菜单的运行对话框,输入dcomcnfg命令,确定,这时会弹出组件服务窗口
(2)展开计算机-〉我的电脑-〉DCOM配置,找到Microsoft Word应用程序节点
(3)单击右键-〉属性,选中“安全”选项,在下面三个项目都选择“自定义”,并单击编辑按钮
(4)在启动权限对话框中点击添加按钮,添加相应的用户(注意:如果是WIN2000,XP,则添加“机器名/ASPNET”用户,我这里是以WIN2003为例,WIN2003是添加“NETWORK Service”用户),并赋予最大权限)

[来源]http://www.codeproject.com/useritems/wordapplication.asp

[作者]Michela

[下载本文中使用的演示工程] 工程文件 大小:309 Kb

[参考文献]

Microsoft Word Objects Converting Microsoft Office VBA Macros to Visual Basic .NET and C# HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual Basic .NET A Primer to the Office XP Primary Interop Assemblies HOWTO: Find and Use Office Object Model Documentation Creating and Opening Microsoft Word Documents from .NET using C#

[转载]在ASP.NET中使用Microsoft Word文档相关推荐

  1. 在ASP.NET中使用Microsoft Word文档

    [来源]http://www.codeproject.com/useritems/wordapplication.asp [作者]Michela [下载本文中使用的演示工程] 工程文件 大小:309 ...

  2. ASP.NET里创建Microsoft Word文档

    原文发布时间为:2008-08-03 -- 来源于本人的百度文章 [由搬家工具导入] 本文是应在ASP.NET里创建Microsoft Word文档之需而写的.这篇文章演示了在ASP.NET里怎么创建 ...

  3. 从ASP.NET得到Microsoft Word文档

    引言 这篇文章是应在一个ASP.NET项目中建立Microsoft Word文档的需要而写的.本文描述了怎样使用ASP.NET来创建和修改Microsoft Word文档. 背景 自动化(Automa ...

  4. 如何在Microsoft Word文档中插入表情符号

    Emoji work basically anywhere these days, including in Microsoft Word documents. Jazz up your docume ...

  5. 如何将Microsoft Word文档转换为PDF

    PDFs are handy for distributing documents so that they're seen the same way by all parties. Typicall ...

  6. word如何添加行号_如何将行号添加到Microsoft Word文档

    word如何添加行号 Adding line numbers to a Microsoft Word document can help you point others to exact posit ...

  7. Microsoft Word文档损坏,如何快速修复?一招解决文档修复

    遇见过☞文件无法打开,或☞文件打开乱码等情况的伙伴们看过来,从事数据恢复行业20余年的"技术宅"效哥,直接给大家上权威恢复方法啦~ 方法一:通过手动重建文件头,修复损坏的Micro ...

  8. php 读取word文档_如何使用PHP制作Microsoft Word文档

    php 读取word文档 As I had pointed out in my previous article, PHP and WMI – Dig deep into Windows with P ...

  9. 新建Microsoft Word文档

    问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:"你出的题目叫<新建Microsoft Word文档>吗?",L大喜,一拍桌子,说:&qu ...

最新文章

  1. 王炸不断,半导体巨头们到底在打什么牌?
  2. eureka的惊群效应
  3. 拒绝服务(DoS)理解、防御与实现
  4. HadoopSourceAnalyse---RMAppAttempt FSM
  5. 蓝图设计对SAP项目实施的重要性
  6. JZOJ 5167. 【NOIP2017模拟6.26】下蛋爷
  7. Codeforces #440.Div.2
  8. es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...
  9. php email 发送,php 发送 Email
  10. java用scanner 和random的一个小案例
  11. poi excel导入 判断合并单元格_Excel合并单元格,你需要知道的那些事
  12. Java并发-ThreadLocal
  13. 蓝牙芯片排行_7月TWS 全球品牌出货量排行榜出炉
  14. 2018年网络视听付费用户规模惊人 视听消费习惯逐步形成
  15. 采用Spring管理Bean和依赖注入
  16. Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)
  17. mysql修改启动command_MySQL Command Line[mysql命令行常用命令]
  18. 乐易模块V7.62更新日志
  19. ActionScript Adobe Flash Builder Adobe Flash CC 学习笔记
  20. Tableau详细安装教程【踩坑】

热门文章

  1. dbutils mysql_使用DBUtils控制mysql事务
  2. linux mint 19新功能,Linux Mint 19.3将在2019年12月正式发布,附新功能简介
  3. mysql优化了解_了解MySQL如何优化
  4. 设置只能查看一条_苹果手机QQ又一次更新 可分屏查看文件
  5. ireport交叉报表 crosstab排序_质性数据分析软件NVivo教程:交叉表查询
  6. 以太网的分层架构_读《企业应用架构模式》记录-分层
  7. OJ和PTA常见的错误代码含义
  8. linux frame buffer 显示图片 没有颜色,新路程----linux framebuffer显示图片c程序
  9. linuxoracle静默安装应答文件修改_Windows7重要更新补丁安装包 2020.01.17
  10. docker 删除image_不是吧!Docker上手,看会觉得自己又行了!