在ASP.NET中使用Microsoft Word文件 (轉)

amyz發表於2007-11-16
在ASP.NET中使用Microsoft Word文件 (轉)[@more@]

在中使用 文件

[來源]

[作者]Michela

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

[介紹]

  本文是應在裡建立Microsoft Word文件之需而寫的。這篇文章演示了在ASP.NET裡怎麼建立和修改Microsoft Word文件。

[背景]

  自動化是一種能讓各種語言編寫的(如:.NET或)應用在程式級別上控制其他應用程式。
  對於Word的自動化允許你諸如建立新的文件,向文件裡新增文字,合併和格式化文件這些操作。在Word和其他的Microsoft 程式裡,那些透過介面進行的視覺化操作也可以透過程式級別的自動化來實現。
  Word透過模型把這個程式可操作的功能向外提供了使用介面。
  物件模型是一組類和方法的集合,這些類和方法與Word的邏輯構成對應。例如,他可能是應用程式物件,文件物件,段落物件,每一個物件都包含了Word元件的功能。

[建立工程]

  在.NET裡操作Word的第一步就是新增COM引用到你的工程裡,透過右鍵點選Solution Explorer的Reference,Add Reference。選擇COM選項卡,查詢Microsoft Word 10.0 Library。點選選擇,OK。
  這將把封裝有Word的COM的程式集自動的新增到應用程式目錄裡。
  現在,你可以建立一個Word的例項了:

  Word.ApplicationClass oWordApp = new Word.ApplicationClass();

  你可以Word提供給你的方法和屬性來操縱Word文件。
  學習如何使用Word,,的物件模型最好的途徑就是使用在這些Office應用裡使用Macro Recorder:

  1.在Tools選單的Macro選項裡選擇 Record New Macro ,並且執行你有興趣的任務。
  2.在Tools選單的Macro選項裡選擇 Stop Recording。
  3.如果你進行了紀錄,選擇Tools選單的Macro選項裡的Macros,找到你記錄的宏,你可以編輯它。

  上面的操作產生了VBA程式碼來完成你記錄的任務。需要注意的是,宏在大多數情況下不是最好的程式碼,但是它提供了一種便捷和可用的方法。
  下面例子開啟並新增一寫文字:

  object fileName = "c:databasetest.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.ion.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:databasetest.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 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:databasetest.doc");
  test.InsertText("This is the text");
  test.InsertLineBreak;
  test.Save ();
  test.Quit();

[細節]

  演示工程包含:
  CCWordApp.cs - 上面使用的類
  CreateDocModel. - 建立基於使用書籤的摸版的新文件的例子。
  CreateNewDoc.aspx - 建立新文件,並向其中新增一寫文字。
  ModifyDocument.aspx - 開啟一個存在的文件,並在末尾追加一些文字。
  templatetemplate1.dot - 摸版的例子(在CreateDocModel.aspx中使用到)

  注意你用來儲存文件的目錄,應該是可重寫的。
  可以在 .config 裡修改這個路徑。

[參考文獻]


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982676/,如需轉載,請註明出處,否則將追究法律責任。

相關文章