从ASP.NET中创建和打开Microsoft Word文档
简介
这篇文章是写在微软的一个需要反映的ASP.NET项目的文档中.
本文演示了如何从ASP.NET中创建和使用微软Word.
背景
自动化是一个过程,它允许的语言编写,如Visual Basic。NET或C#以编程方式控制其他应用程序。自动化到Word可让您执行操作,如创建新文档,添加文本文档,邮件合并和格式的文档。与Word和其他Microsoft Office应用程序,几乎所有可以通过用户界面手动执行的操作都可以用编程方式通过使其自动化执行。通过一个对象模型编程功能。对象模型是作为同行的Word的逻辑组件的类和方法的集合。例如,有一个Application对象,Document对象和Paragraph对象,每个都包含在Word中这些组件中的功能。
项目
第一步在.NET操作WORD的,你需要通过右键单击在解决方案资源管理器中添加COM引用到项目的引用 - >添加引用。单击COM选项卡,然后查找的Microsoft Word10.0对象库。单击选择和确定。
这会自动将您的应用程序目录添加它包装到Word的COM访问的组件。
现在,你可以实例化一个Word应用程序的一个实例:
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
您可以调用特定的方法和属性,微软Word提供给你操作Word文档,最好的方式来学习如何导航的Word,Excel对象模型和PowerPoint是使用宏录制这些Office应用程序:
从工具菜单上的宏选项录制新宏并执行你感兴趣的任务。
从工具菜单上的宏选项中选择停止录制。
一旦你完成录制,从工具菜单上的宏选项中选择宏,选择您所记录的宏,然后单击编辑。
这时需要你对生成的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);
或者打开一个新文档,并将其保存:
Collapse | Copy Code
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方法签名被定义为开放式 Open(ref object, ref object, refobject, ref object, ref object, ref object, ref object, ref object, ref object, refobject, ref object, ref object, ref object, ref object, ref object)
. 。这意味着,在C#中的Open方法需要15所需的参数,每个参数都必须在前面加上ref关键字和每个参数的类型必须为对象。因为第一个参数是一个文件名,一般在Visual Basic字符串值。 NET中,我们必须声明,认为C#的字符串值,因此代码类型的对象变量:
object fileName = "c:\\database\\test.doc";
虽然我们只需要使用的第一个参数的Open方法,请记住,C#不允许可选参数,所以我们提供了最后的14个参数作为持有System.Reflection.Missing.Value值类型的对象变量
使用模板
如果您使用的是自动化构建都是在一个共同的格式的文件,你可以受益于与基于一个预先格式化的模板的新文档开始的过程。使用模板与您的Word自动化客户端拥有超过从头创建文档2显著优势: 您可以更好地控制对象的整个文件的格式和位置。 你可以用更少的代码构建文档。 通过使用模板,您可以微调控制表格,段落,并在文档中的其他对象,也包括对这些对象的格式。通过使用自动化,您可以根据使用如下面的代码模板创建新文档:
Collapse | Copy Code
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:在最后打开一个已有的文档和附加一些文本的一个例子
模板\ 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#