2009-09-03 16 views
10

C#(VB.NETも大丈夫です)を使用してエンジンを作成する方法に関するアドバイスや経験がありますか?私はデータベースから取得しているデータで満たす必要があるMS Wordのテキストフィールドのほとんどのケース?要するに、私はこの小さなOfficeオートメーションエクスカーションに着手しようとしています。ここでのフィードバックは、時間のかかるエラーを避けるのに役立ちます。MS WordのOfficeオートメーション - テキストフォームのフィールドとチェックボックスのフォームフィールドと差し込み印刷

事前にアドバイスをいただきありがとうございます。

デイブ

答えて

15

私はあなたの自動化の問題を解決するための2つの例を送られます。最初のものはMailMergeを使用し、もう1つはブックマークを使用しています。

ワードファイルは、次のようになります

差し込み印刷の使用(挿入 - >クイックパーツ - >フィールド - >差し込み印刷を - >フィールドをマージ) まず名前:«のfirstName» 姓:«lastNameの»

=======

ブックマークの使用(挿入 - >ブックマーク) まず名前: - 姓(<ブックマークはそれが見えないのです、ここにある):

、コードは以下の通りです:

  1. 使用ブックマーク

差し込み印刷

Open("D:/Doc1.doc"); 
    foreach (Field myMergeField in oDoc.Fields) 
    { 
     //iTotalFields++; 
     Range rngFieldCode = myMergeField.Code; 
     String fieldText = rngFieldCode.Text; 

     // GET only MAILMERGE fields 
     if (fieldText.StartsWith(" MERGEFIELD")) 
     { 
      Int32 endMerge = fieldText.IndexOf("\\"); 
      Int32 fieldNameLength = fieldText.Length - endMerge; 
      String fieldName = fieldText.Substring(11, endMerge - 11); 

      fieldName = fieldName.Trim(); 
      if (fieldName == "firstName") 
      { 
       myMergeField.Select(); 
       oWordApplic.Selection.TypeText("This Text Replaces the Field in the Template"); 
      } 
     } 
    } 
    SaveAs("D:/Test/Doc2.doc"); Quit(); 
    MessageBox.Show("The file is successfully saved!"); 
使用

Open("D:/Doc1.doc"); 
    if (oDoc.Bookmarks.Exists("bkmFirstName")) 
    { 
     object oBookMark = "bkmFirstName"; 
     oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox1.Text; 
    } 

    if (oDoc.Bookmarks.Exists("bkmLastName")) 
    { 
     object oBookMark = "bkmLastName"; 
     oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox2.Text; 
    } 

    SaveAs("D:/Test/Doc2.doc"); Quit(); 
    MessageBox.Show("The file is successfully saved!"); 
  • 私はまた、いくつかのヘルパーメソッドを使用しました。

    ApplicationClass oWordApplic = new Microsoft.Office.Interop.Word.ApplicationClass(); 
        private Microsoft.Office.Interop.Word.Document oDoc = new Document(); 
    
        public void Open(string strFileName) 
        { 
         object fileName = strFileName; 
         object readOnly = false; 
         object isVisible = true; 
         object missing = System.Reflection.Missing.Value; 
    
         oDoc = oWordApplic.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, ref missing); 
    
         oDoc.Activate(); 
        } 
    
        public void SaveAs(string strFileName) 
        { 
         object missing = System.Reflection.Missing.Value; 
         object fileName = strFileName; 
    
         oDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
         ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
        } 
    
        public void Quit() 
        { 
         object missing = System.Reflection.Missing.Value; 
         oWordApplic.Application.Quit(ref missing, ref missing, ref missing); 
        } 
    

    この実装では、問題を解決するためのアイデアが得られることを願っています。

  • +0

    これは素晴らしいです!あなたは私を大きく救ったし、今私はこれで良いスタートをしている。私はこれを抽象化してフォーマットしようとするので、他のオーバーフローでもそれを使うことができます。 乾杯と感謝; Dave – Daver

    関連する問題