原文发布时间为: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. mysql 存在更新,不存在插入

    String sql = "insert into wb_result " + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ...

  2. IOS音频视频

    视频播放 MediaPlayer.framework MPMoviePlayerViewController VS MPMoviePlayerController MPMoviePlayerViewC ...

  3. 原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历

    一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  4. linux yum 安装mysql

    1.安装查看有没有安装过: yum list installed MySQL* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安装mysql客户端: ...

  5. 移动网页端HTML5 meta便签

    width = device-width:标识宽度是设备屏幕的宽度 initial-scale = 1.0 :标识初始的缩放比例 minimum-scale =0.5 :表示最小的缩放比例 maxim ...

  6. django(django框架了解,http协议)

    Django框架 学习目的: 完成web应用的编写 django的作用: 0.业务逻辑分发(路由分发) 1.业务逻辑实现: 业务逻辑根据分发来完成具体的事,再根据具体事的需求,和页面或数据库交互,返回 ...

  7. Poj 1041--欧拉回路

    Description Little Johnny has got a new car. He decided to drive around the town to visit his friend ...

  8. Experiments done

    喷重金属 换重金属溶液 荧光光合 备注 ASD 备注 高光谱 备注 泡EDTA 备注 电镜 备注 2018.12.19(day1) 2018.12.19(day1) 2018.12.18晚(day0) ...

  9. [WPF自定义控件库]使用WindowChrome的问题

    1. 前言 上一篇文章介绍了使用WindowChrome自定义Window,实际使用下来总有各种各样的问题,这些问题大部分都不影响使用,可能正是因为不影响使用所以一直没得到修复(也有可能别人根本不觉得 ...

  10. C#简易日志输出

    精简版: public static void WriteLog(string message, string group = "") { var logPath = System ...