首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:7304   评论: 10    参与评论
标题   在ASP.NET中使用Microsoft Word文档     选择自 tanrui 的 Blog
关键字   ASP.NET Word Office .NET
出处   http://www.codeproject.com/useritems/wordapplication.asp

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

[参考文献]


相关文章
对该文的评论
sorcer03075 ( 2004-12-10)
谁发给我一个工程代码阿 daboo@lysteel.com
kiddylxt ( 2004-05-22)
看了这篇文章收获很大,只是不知文中提到的演示工程如何得到。非常希望能有某位同志发给我,在此先谢过。
本人邮箱是: xitongli00@mails.tsinghua.edu.cn
soochowgreen ( 2004-04-22)
本文中描述到的相關專案不能下載,有朋友有麼?
請mailto:soochowgreen@163.com 感謝!
arryang ( 2004-04-14)
有人弄到工程代码了吗?共享一下了
对了,我自己谢的对word文档的操作,总是报出如下错误,是为什么啊?
未能找到依赖项“Microsoft.Vbe.Interop”。
未能找到依赖项“Microsoft.Vbe.Interop”。
正在执行主编译...
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(31,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(32,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(33,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(35,33): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(36,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(37,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(38,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(39,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(40,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(41,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(42,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(43,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(44,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(45,30): error CS0120: 非静态的字段、方法或属性“WordBrute.Class1.missing”要求对象引用
g:\调试程序\vs.net\wordbrute\wordbrute\class1.cs(30,10): error CS0029: 无法将类型“Word.Document”隐式转换为“bool”

生成完成 -- 15 个错误,0 个警告
正在生成附属程序集...



---------------------- 完成 ---------------------

    生成: 0 已成功, 1 已失败, 0 已跳过
joney111 ( 2004-04-06)
谁有这个文档的工程文件啊?
请发给我!Dingyonghe@21cn.com,非常急着要啊,谢谢!