分享
 
 
 

在ASP.NET中使用Microsoft Word文档

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有