在ASP.NET中使用Microsoft Word文档

原创 2004年07月19日 21:32:00

在ASP.NET中使用Microsoft Word文档

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

[作者]Michela

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

[介绍]

    本文是应在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 里修改这个路径。

Asp.net如何操作Word文档

引用Word对象库文件 具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为DLL组...
  • jkpi888
  • jkpi888
  • 2013年12月04日 23:52
  • 1371

ASP.NET利用DOC模板导出Word

首先创建DOC模板   再次,在项目中添加该中间页面 ReportWord.aspx 重点方法: private string PrintWord() { ...
  • hugaozhuang
  • hugaozhuang
  • 2013年12月03日 22:10
  • 1529

asp.net读写Word、拼接Word文件

ASP.NET调用Word进行文件处理说明   一、    编程 1)  添加引用 2)  代码 利用标签对文档内容进行修改 将多个文档进行合并        #region 打开文件  ...
  • lk_cool
  • lk_cool
  • 2015年04月23日 10:37
  • 5696

asp.net实现word文档在线预览功能代码

先在项目里添加引用:COM->Microsoft Word 12 Object Libraryusing System; using System.Collections.Generic; using...
  • gannanhu
  • gannanhu
  • 2014年12月19日 15:55
  • 2101

算法提高 新建Microsoft Word文档

问题描述   L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫《新建Microsoft Word文档》吗?”,L大喜,一拍桌子,说:“好,就叫这个名字了。”   仔...
  • qq_29656961
  • qq_29656961
  • 2017年01月08日 12:19
  • 131

算法提高 新建Microsoft Word文档

问题描述   L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫《新建Microsoft Word文档》吗?”,L大喜,一拍桌子,说:“好,就叫这个名字了。” ...
  • qq_36238595
  • qq_36238595
  • 2017年02月10日 20:50
  • 181

算法提高 新建Microsoft Word文档

算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述   L正在出题,新建了一个word文档,想不好...
  • SJshenjian
  • SJshenjian
  • 2016年12月10日 15:45
  • 410

蓝桥杯_算法提高_新建MicrosoftWord文档

问题描述   L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫《新建Microsoft Word文档》吗?”,L大喜,一拍桌子,说:“好,就叫这个名字了。”   ...
  • huangxiang360729
  • huangxiang360729
  • 2016年03月31日 19:27
  • 197

ASP.NET 在IIS操作WORD文档出错的解决办法

vs调试没有问题,但是放在iis上就出现问题了,提示 System.NullReferenceException,调试发现是Word.Selection 为空。...
  • keyler
  • keyler
  • 2017年04月27日 12:16
  • 652

asp.net读取word文档

1:首先添加下引用,右击网站→添加引用→弹出的框COM下添加  morcosoft word 12.0 object Library、morcosoft office12.0 object Libra...
  • mengfanteng
  • mengfanteng
  • 2014年03月25日 10:22
  • 1081
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP.NET中使用Microsoft Word文档
举报原因:
原因补充:

(最多只允许输入30个字)