从ASP.NET得到Microsoft Word文档

摘要:
引言本文是针对在ASP中创建Microsoft Word文档的需要而编写的。NET项目。本文介绍如何使用ASP.NET创建和修改Microsoft Word文档。Word自动化允许您执行创建新文档、向文档添加文本、邮件合并和控制文档格式等操作。使用Word和其他Microsoft Office应用程序,几乎所有可以在用户面板上手动执行的操作都可以通过自动编程实现。单击COM选项卡以查找Microsoft Word 10.0对象库。Word.ApplicationClassoWordApp=新单词。ApplicationClass();您可以调用MicrosoftWord提供的有趣的方法和属性来以Word格式操作文档。

引言


        这篇文章是应在一个ASP.NET项目中建立Microsoft Word文档的需要而写的。本文描述了怎样使用ASP.NET来创建和修改Microsoft Word文档。

背景


        自动化(Automation)是一个过程,它允许编程语言譬如Visual Basic.NET或C#写的应用程序可以编程控制其它应用程序。自动化到Word允许你执行像创建新文档,向文档中添加文本,邮件合并,还有控制文档格式这样的操作。使用Word和其它Microsoft Office应用程序,几乎所有你能在用户面板上手动实现的操作都可以通过自动化编程实现。Word通过一个对象模型来实现这个编程功能性(programmatically functionality)。对象模型是一系列类和方法,它们提供和Word的逻辑组成部分相似的服务。例如,一个应用程序对象,一个文档对象,和一个段落对象,这些每个都包含着Word的相应组成部分的功能性。

项目


        在.NET中操作Word的第一步,你需要在你的项目中添加一个COM引用,这通过右击解决方案窗口中的引用->添加引用。单击COM标签寻找Microsoft Word 10.0 Object Library。单击“选择”添加,单击“确定”返回。
从ASP.NET得到Microsoft Word文档第1张
        这会自动在你的应用程序文件夹中放置一个程序集(assembly)将COM接口邦定到Word。
        现在,你可以生成一个Word应用程序的实例了。

从ASP.NET得到Microsoft Word文档第2张Word.ApplicationClass oWordApp = new Word.ApplicationClass();


        你可以调用Microsoft Word提供给你的很有趣的方法和属性来操作Word格式的文档。学习怎样操纵Word,Excel和PowerPoint对象模型最好的方法就是,在这些Office应用程序中使用宏录制器:
        1、在“工具”菜单中的“宏”选项中选择“录制新宏”,然后执行你感兴趣的任务。
        2、在“工具”菜单中的“宏”选项中选择“停止录制”。
        3、一旦你完成了录制,选择“工具”菜单中的“宏”选项下的“宏”,选择你录制的宏,单击“编辑”。
        这将将你带入生成的VBA代码,这些代码完成了你记录的任务。注意记录下的宏在多数情况下不是最好的代码,但它提供了一个快速和可用的例子。
        例如要打开一个存在的文件加入一些文本:

从ASP.NET得到Microsoft Word文档第2张object fileName = "c:\\database\\test.doc";
从ASP.NET得到Microsoft Word文档第2张
object readOnly = false;
从ASP.NET得到Microsoft Word文档第2张
object isVisible = true;
从ASP.NET得到Microsoft Word文档第2张
object missing = System.Reflection.Missing.Value;
从ASP.NET得到Microsoft Word文档第2张Word.ApplicationClass oWordApp 
= new Word.ApplicationClass();
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张Word.Document oWordDoc 
= oWordApp.Documents.Open(ref fileName, 
从ASP.NET得到Microsoft Word文档第2张                            
ref missing,ref readOnly, 
从ASP.NET得到Microsoft Word文档第2张                            
ref missing, ref missing, ref missing, 
从ASP.NET得到Microsoft Word文档第2张                            
ref missing, ref missing, ref missing, 
从ASP.NET得到Microsoft Word文档第2张                            
ref missing, ref missing, ref isVisible, 
从ASP.NET得到Microsoft Word文档第2张                            
ref missing,ref missing,ref missing);
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordDoc.Activate();
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordApp.Selection.TypeText(
"This is the text");
从ASP.NET得到Microsoft Word文档第2张oWordApp.Selection.TypeParagraph();
从ASP.NET得到Microsoft Word文档第2张oWordDoc.Save();
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordApp.Application.Quit(
ref missing, ref missing, ref missing);


        或者要打开一个新的文档然后保存它:

从ASP.NET得到Microsoft Word文档第2张Word.ApplicationClass oWordApp = new Word.ApplicationClass();
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张Word.Document oWordDoc 
= oWordApp.Documents.Add(ref missing, 
从ASP.NET得到Microsoft Word文档第2张                           
ref missing,ref missing, ref missing);
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordDoc.Activate();
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordApp.Selection.TypeText(
"This is the text");
从ASP.NET得到Microsoft Word文档第2张oWordApp.Selection.TypeParagraph();
从ASP.NET得到Microsoft Word文档第2张oWordDoc.SaveAs(
"c:\\myfile.doc");
从ASP.NET得到Microsoft Word文档第2张
从ASP.NET得到Microsoft Word文档第2张oWordApp.Application.Quit(
ref missing, ref missing, ref missing);


        在C#中,Word文档类的open方法定义为: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#的Open方法接受15个必要参数,每个参数都必须以ref关键字为前缀而且每个参数都必须是Object类型的。因为第一个参数是一个文件名,通常在Visual Basic.NET中的一个String值,我们必须声明一个Object类型的变量来保存C#的string值,代码如下:

从ASP.NET得到Microsoft Word文档第2张object fileName = "c:\\database\\test.doc";


        尽管我们在Open方法中只需要使用第一个参数,但是记住C#不允许可选参数,所以我们以Object类型的变量的形式提供余下的14个参数,它们保存System.Reflection.Missing.Value的值。

使用模板


        如果你使用自动化来创建都是一致格式的文档,使用预定义模板来处理新的文档将会很方便。在你的Word自动化客户程序中使用模板与不用模板相比,有两个显著的优点:
    ·对于你文档的格式和对象位置上你可以拥有更多的控制权
    ·你可以使用更少的代码来建立你的文档
        通过使用模板,你可以调整文档中表格、段落还有其它对象的位置,还有也可以调整这些对象的格式。通过使用自动化,你可以创建一个基于你的模板的文档,而只用如下的代码:

从ASP.NET得到Microsoft Word文档第2张Word.ApplicationClass oWordApp = new Word.ApplicationClass();
从ASP.NET得到Microsoft Word文档第2张
object oTemplate = "c:\\MyTemplate.dot";
从ASP.NET得到Microsoft Word文档第2张oWordDoc 
= oWordApp.Documents.Add(ref oTemplate, 
从ASP.NET得到Microsoft Word文档第2张              
ref Missing,ref Missing, ref Missing);


        在你的模版中,你可以定义书签,这样你的自动化客户程序可以在文档中的特定位置填入可变的文本,如下:

从ASP.NET得到Microsoft Word文档第2张object oBookMark = "MyBookmark";
从ASP.NET得到Microsoft Word文档第2张oWordDoc.Bookmarks.Item(
ref oBookMark).Range.Text = "Some Text Here";


        使用模板的另一个优点是你可以创建你希望在运行时应用的存储格式风格,如下:

从ASP.NET得到Microsoft Word文档第2张object oStyleName = "MyStyle";
从ASP.NET得到Microsoft Word文档第2张oWordDoc.Bookmarks.Item(
ref oBookMark).Range.set_Style(ref oStyleName);

使用CCWordApp类


        这个项目包含一个文件:CCWordAPP.cs。我不想每次都写代码来插入文本,打开一个文件,等等……所以我决定写一个CCWordApp类来包括多数重要的方法。下面是对这个类和它的方法的简要描述。

从ASP.NET得到Microsoft Word文档第2张public class CCWordApp 
从ASP.NET得到Microsoft Word文档第45张从ASP.NET得到Microsoft Word文档第46张
从ASP.NET得到Microsoft Word文档第47张{
从ASP.NET得到Microsoft Word文档第48张    
//it's a reference to the COM object of Microsoft Word Application 
从ASP.NET得到Microsoft Word文档第48张
    private Word.ApplicationClass oWordApplic;    
从ASP.NET得到Microsoft Word文档第48张    
// it's a reference to the document in use 
从ASP.NET得到Microsoft Word文档第48张
    private Word.Document oWordDoc;                    
从ASP.NET得到Microsoft Word文档第48张    
从ASP.NET得到Microsoft Word文档第48张    
// Activate the interface with the COM object of Microsoft Word 
从ASP.NET得到Microsoft Word文档第48张
    public CCWordApp();
从ASP.NET得到Microsoft Word文档第48张    
从ASP.NET得到Microsoft Word文档第48张    
// Open an existing file or open a new file based on a template 
从ASP.NET得到Microsoft Word文档第48张
    public void Open( string strFileName);
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Open a new document
从ASP.NET得到Microsoft Word文档第48张
    public void Open( );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Deactivate the interface with the COM object of Microsoft Word 
从ASP.NET得到Microsoft Word文档第48张
    public void Quit( );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Save the document
从ASP.NET得到Microsoft Word文档第48张
    public void Save( );
从ASP.NET得到Microsoft Word文档第48张    
从ASP.NET得到Microsoft Word文档第48张    
//Save the document with a new name as HTML document 
从ASP.NET得到Microsoft Word文档第48张
    public void SaveAs(string strFileName );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Save the document in HTML format
从ASP.NET得到Microsoft Word文档第48张
    public void SaveAsHtml(string strFileName );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Insert Text
从ASP.NET得到Microsoft Word文档第48张
    public void InsertText( string strText);
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Insert Line Break
从ASP.NET得到Microsoft Word文档第48张
    public void InsertLineBreak( );
从ASP.NET得到Microsoft Word文档第48张    
从ASP.NET得到Microsoft Word文档第48张    
// Insert multiple Line Break
从ASP.NET得到Microsoft Word文档第48张
    public void InsertLineBreak( int nline);
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Set the paragraph alignment
从ASP.NET得到Microsoft Word文档第48张    
// Possible values of strType :"Centre", "Right", "Left", "Justify"
从ASP.NET得到Microsoft Word文档第48张
    public void SetAlignment(string strType );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Set the font style
从ASP.NET得到Microsoft Word文档第48张    
// Possible values of strType :"Bold","Italic,"Underlined"
从ASP.NET得到Microsoft Word文档第48张
    public void SetFont( string strType );
从ASP.NET得到Microsoft Word文档第48张    
从ASP.NET得到Microsoft Word文档第48张    
// Disable all the style 
从ASP.NET得到Microsoft Word文档第48张
    public void SetFont( );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Set the font name
从ASP.NET得到Microsoft Word文档第48张
    public void SetFontName( string strType );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Set the font dimension
从ASP.NET得到Microsoft Word文档第48张
    public void SetFontSize( int nSize );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Insert a page break
从ASP.NET得到Microsoft Word文档第48张
    public void InsertPagebreak();
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Go to a predefined bookmark
从ASP.NET得到Microsoft Word文档第48张
    public void GotoBookMark( string strBookMarkName);
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Go to the end of document
从ASP.NET得到Microsoft Word文档第48张
    public void GoToTheEnd( );
从ASP.NET得到Microsoft Word文档第48张
从ASP.NET得到Microsoft Word文档第48张    
// Go to the beginning of document
从ASP.NET得到Microsoft Word文档第48张
    public void GoToTheBeginning( );


        这样,打开一个已有的文件的操作就是:

从ASP.NET得到Microsoft Word文档第2张CCWordApp test ;
从ASP.NET得到Microsoft Word文档第2张test 
= new CCWordApp();
从ASP.NET得到Microsoft Word文档第2张test.Open (
"c:\\database\\test.doc");
从ASP.NET得到Microsoft Word文档第2张test.InsertText(
"This is the text");
从ASP.NET得到Microsoft Word文档第2张test.InsertLineBreak;
从ASP.NET得到Microsoft Word文档第2张test.Save ();
从ASP.NET得到Microsoft Word文档第2张test.Quit();

细节


示例项目包括:
CCWordApp.cs - the class
CreateDocModel.aspx: 创建一个基于模板的文档和使用书签的例子。
CreateNewDoc.aspx: 创建一个文档和插入一些文本的例子。
ModifyDocument.aspx: 打开一个已有文档然后在后面添加一些文本的例子。
template\template1.dot: 一个模板的例子(在CreateDocModel.aspx中使用)。
记住一点,你保存文件的目录必须是可写的。请查看Web.config文件来修改路径。

引用


Microsoft Word Objects
Converting Microsoft Office VBA Macros to Visual Basic .NET and C#
HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual Basic .NET
A Primer to the Office XP Primary Interop Assemblies
HOWTO: Find and Use Office Object Model Documentation
Creating and Opening Microsoft Word Documents from .NET using C#

译注:本文译自The Code Project网站上的一篇文章,原文作者Michela,译者寒带鱼。仅供参考,如有翻译或理解上的错误,欢迎批评指正。查看原文请点击这里,点击这里下载源代码。

        另外,读完这篇文章之后,推荐阅读《.NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)》,加深理解。

免责声明:文章转载自《从ASP.NET得到Microsoft Word文档》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JQuery中的DOM操作MySQL 同时 delete 多张表的数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

express 配置 https 服务 ( 以阿里云服务器为例), 探索一周终于搞定

首先最重要的是 你要明白 https接口的接收或者发送 的形式 是  https://域名:端口号   而不是 https://ip:端口号   一,首先,去阿里云注册免费ssl证书   1,在搜索框中输入关键字证书,点击SSL证书   2,点击购买证书   3,选择免费型,点击购买 4,点击支付  5,点击确认支付 6,支付成功后进入证书控制...

查询功能,测试点总结

黑盒测试的测试点先从以下几点考虑: UI, 易用性,功能,容错性,安全,性能,兼容性 下列是有关查询功能的测试点总结: UI:1. 查询界面显示是否正确,页面布局是否方便,易懂2. 查询界面是否显示查询按钮,是否显示根据图片识别查询的相机按钮,是否显示底部文案3. 查询时,是否显示查询进度或者loading...图标4. 无查询结果时,是否有占位图和合理的...

adb remount 失败:remount failed: Operation not permitted

adb remount 失败:remount failed: Operation not permitted     关于ADB的使用,这里再说明下:经常使用命令 adb shell - 登录设备shell,后面也可直接跟执行命令。如:adb shell rm -r /system/sd/app adb pull - 从手机中下载文件到电脑上。如:ad...

蓝牙BLE控制芯片(6) : 博通BCM20732

北京,2013年6月4日 - 全球有线和无线通信半导体创新解决方案的领导者博通(Broadcom)公司(Nasdaq:BRCM)宣布,推出一款新的蓝牙智能SoC,以推动更广范围的低成本、低功耗外围设备与安卓智能手机和平板电脑配合工作。该公司同时还公布了为安卓开源项目(AOSP)所开发的蓝牙软件栈,其中包括经典蓝牙和蓝牙智能(前身为蓝牙低功耗)技术。博通新推...

在GNU/Linux下制作Windows 10安装U盘

今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来。回家前,小仙女已在微软官网帮我买好了正版软件,我也利用微软提供的Media Creation Tool创建了安装U盘。然而,等拿回家后安装的时候才发现,安装密码无效。联系客服后得...

Mac下chrome的webapp hostadmin 快速切换host

首先是安装 app ,https://chrome.google.com/webstore/detail/hostadmin-app/mfoaclfeiefiehgaojbmncmefhdnikeg Chrome把扩展的NPAPI 禁用了,所以做成APP没以前方便了,但是有总比没有好。 安装之后发现mac下选择host文件没法选,因为finder中根本找不...