原文发布时间为: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. 人人必知的10个 jQuery 小技巧

    原文地址:http://info.9iphp.com/10-jquery-tips-everyone-should-know/ 人人必知的10个 jQuery 小技巧   收集的10个 jQuery ...

  2. Java使用HtmlUnit抓取js渲染页面

    需求: 需要采集js渲染的页面,有些网站的页面是js渲染的 实现: 基于HtmlUnit实现: public static void getAjaxPage() throws Exception{ W ...

  3. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  4. python 基础之运算符

    运算符 a=10 ,b=20 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘 ...

  5. k8s 创建资源的两种方式【转】

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  6. No package python-pip available

    因为没有此rpm包,此包包含在epel源里面 输入rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarc ...

  7. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键

    windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...

  8. bash编程的信号捕获:

    bash编程的信号捕获: kill -l KILL无法捕捉:   trap 'COMMAND' SIGNAL,    信号捕捉用于:在中途中止时做一些清理操作.   一. trap捕捉到信号之后,可以 ...

  9. 51nod 1135 原根 (数论)

    题目链接 建议与上一篇欧拉函数介绍结合食用. 知识点:1.阶:a和模m互质,使a^d≡1(mod m)成立的最小正整数d称为a对模m的阶(指数)   例如: 2^2≡1(mod3),2对模3的阶为2; ...

  10. css兼容处理-hack

    浏览器兼容之旅的第二站:各浏览器的Hack写法 Browser CSS Hacks Moving IE specific CSS into @media blocks Detecting browse ...