原文发布时间为:2008-08-03 —— 来源于本人的百度文章 [由搬家工具导入]

本文是应在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();

ASP.NET里创建Microsoft Word文档的更多相关文章

  1. ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)

    ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)      上述博文里提到的在线浏览pdf的方案不错,但word转pdf的那个dll只支持doc不支持docx,附上最新的下载链 ...

  2. 算法笔记_104:蓝桥杯练习 算法提高 新建Microsoft Word文档(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫<新建Microsoft Word文档>吗? ...

  3. 新建Microsoft Word文档

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

  4. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

  5. C语言 · 新建Microsoft Word文档

    算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题 ...

  6. Asp.Net在线预览Word文档的解决方案与思路

    前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈. 这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览Word文档. 首先想到的是用第三方 ...

  7. 使用 python 创建&更改 word 文档

    使用 python 修改 word 文档 说明:这个需求是老师想要一个自动识别 word 文档中指定位置的分数,并填入相应表格. 使用库 python-docx 的官方文档地址是:python-doc ...

  8. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法

    1.下载notepad++. 2.将代码粘贴进notepad++,或者直接用notepad++打开. 3.点击顶栏 ===> 插件 ===> NppExport ===> cope ...

  9. asp.net生成word文档服务器配置

    一.asp.net生成word文档,布署到正式的服务器上就出现           错误:System.Runtime.InteropServices.COMException (0x800A1098 ...

随机推荐

  1. 集成iAd广告

    在iPhone程序中集成广告,管他能不能赚钱,不放上一个iAd就心有不甘. 参考了下面这篇文章: http://bees4honey.com/blog/tutorial/how-to-add-iad- ...

  2. 欧拉函数求在1-n-1与n互质的个数

    long long phi(long long x) { long long res=x,a=x,i; ;i*i<=a;i++) { ) { res=res/i*(i-); ) a=a/i; } ...

  3. JavaScript -- 语法和数据类型

    前戏 前面学了HTML和CSS相关的知识,那JavaScript是做什么的呢?你在网页上看到的那些炫酷的特效都是通过JS来实现的,所以,想要开发一个逼格满满的web页面,JS是必须要会的 什么是Jav ...

  4. Ubuntu下Hyperledger Fabric v0.6安装部署

    系统环境:虚拟机VMware Workstation中的Ubuntu 16.04LTS 1.环境准备 1.1安装Docker Docker安装命令: curl –fsSL https://get.do ...

  5. a标签点击后更改颜色

    function choose(id){ document.getElementById("typeid").value = id; //var infoa=document.ge ...

  6. 使用jQuery 发送Ajax

    jQuery AJAX 方法 AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下更新网页的一部分. 下面的表格列出了所有的 jQuery AJAX 方法: 构建页面:jqlogi ...

  7. shell脚本,录制和回放终端的小工具script。

    action.log和time.log这两个配置文件被当做script命令的参数.这两个文件可以随便命名.这里用time.log和action.log.其中time.log用于存储时序信息,描述每一个 ...

  8. 继上一篇随笔,优化3张以上图片轮播React组件

    import React from 'react'; import PropTypes from 'prop-types'; import {getSwipeWay} from '../utils/s ...

  9. 《零基础入门学习Python》【第一版】视频课后答案第005讲

    测试题答案: 0.Python中: int:整型 bool:布尔类型 float:浮点型 str:字符串类型 1.为什么布尔类型(bool)的TRUE和FALSE分别用0和1表示? 计算机只认识二进制 ...

  10. POST一个多部分编码(Multipart-Encoded)的文件

    Requests使得上传多部分编码文件变得很简单: >>> url = 'http://httpbin.org/post' >>> files = {'file': ...