C#實現對Word檔案讀寫

來源:互聯網
上載者:User
本文:手頭上的一個項目報表相對比較簡單,所以報表列印採用VBA引擎,通過定製Word模版,然後根據模版需要填充資料,然後OK,列印即可。
實現方法:首先需要引用VBA組建,我用的是Office2003 Professional,Dll版本號碼為Microsoft Word11.0,
另外當然還需要引用Interop.Word.Dll.
代碼如下:
#region 開啟Word文檔,並且返回對象wDoc,wDoc
  /// <summary>
  /// 開啟Word文檔,並且返回對象wDoc,wDoc
  /// </summary>
  /// <param name="FileName">完整Word檔案路徑+名稱</param>  
  /// <param name="wDoc">返回的Word.Document wDoc對象</param>
  /// <param name="WApp">返回的Word.Application對象</param>
  public static void CreateWordDocument(string FileName,ref Word.Document wDoc,ref  Word.Application WApp)
  {
   if(FileName == "") return;
   Word.Document thisDocument = null;
   Word.FormFields   formFields = null;
   Word.Application thisApplication = new Word.ApplicationClass();
   thisApplication.Visible = true;
   thisApplication.Caption = "";
   thisApplication.Options.CheckSpellingAsYouType = false;
   thisApplication.Options.CheckGrammarAsYouType = false;
   Object filename = FileName;
   Object ConfirmConversions = false;
   Object ReadOnly = true;
   Object AddToRecentFiles = false;
   Object PasswordDocument = System.Type.Missing;
   Object PasswordTemplate = System.Type.Missing;
   Object Revert = System.Type.Missing;
   Object WritePasswordDocument = System.Type.Missing;
   Object WritePasswordTemplate = System.Type.Missing;
   Object Format = System.Type.Missing;
   Object Encoding = System.Type.Missing;
   Object Visible = System.Type.Missing;
   Object OpenAndRepair = System.Type.Missing;
   Object DocumentDirection =  System.Type.Missing;
   Object NoEncodingDialog = System.Type.Missing;
   Object XMLTransform = System.Type.Missing;
   try
   {
    Word.Document wordDoc =
     thisApplication.Documents.Open(ref filename, ref ConfirmConversions,
     ref ReadOnly, ref AddToRecentFiles, ref PasswordDocument, ref PasswordTemplate,
     ref Revert,ref WritePasswordDocument, ref WritePasswordTemplate, ref Format,
     ref Encoding, ref Visible, ref OpenAndRepair, ref DocumentDirection,
     ref NoEncodingDialog, ref XMLTransform );
    
    thisDocument = wordDoc;
    wDoc = wordDoc;
    WApp = thisApplication;
    formFields = wordDoc.FormFields;
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
  
  }
  #endregion
調用上面靜態方法,開啟目標檔案並且把DataGrid中資料填充到對應Word標籤中去
#region Word填充資料(For Example)
  /// <summary>
  /// Word填充資料
  /// </summary>
  private void WordLoadData()
  {
   Word.Document wDoc=null;
   Word.Application wApp=null;
   sysFun.CreateWordDocument("E:\\監測報告(new).dot",ref wDoc,ref wApp);
   //對標籤"C"進行填充
   object bkmC="C";
   if(wApp.ActiveDocument.Bookmarks.Exists("C") == true)
   {
    wApp.ActiveDocument.Bookmarks.get_Item
     (ref bkmC).Select();
   }
   wApp.Selection.TypeText(this.txt1.Text);
   object bkmG = "TWaterTable3";
   object unit;
   object count; //移動數
   object extend;
    
   extend = Word.WdMovementType.wdExtend;
   unit = Word.WdUnits.wdCell;
   //把DataGrid中資料填充到標籤TWaterTable3上
   if(wApp.ActiveDocument.Bookmarks.Exists("TWaterTable3") == true)
   {
    wApp.ActiveDocument.Bookmarks.get_Item
     (ref bkmG).Select();
    for(int i=0;i<this.gridEX1.RecordCount;i++)
    {
     if(i==0)
     {
      count=1;
     }
     else
     {
      count=0;
     }
     //需填充5列資料
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[0].Text);
     count=1;
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[1].Text);
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[2].Text);
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[3].Text);
    
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[4].Text);
     //換行
     wApp.Selection.MoveRight(ref unit,ref count,ref extend);
    }
   }
  }
  #endregion
然後就OK了,在對標籤表控制要注意列迴圈和換行,不知道還有沒有其它好辦法,歡迎探討! 類別: C#.Net 發布日期: 2007-6-1 14:43

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.