2012-03-01 4 views
1

문서를 반복하고 모든 양식 필드를 가져 와서 새 텍스트 파일에 삽입하는 방법을 알아 내려고하고 있습니다. 나는 내가 필요로하는 함수의 예제를 찾고자 노력하고 있으며, 많은 정보를 얻지는 못하고있다. 어쩌면 내가 제대로 검색하지 않을거야. 여기에 제가 지금까지 작성한 내용이 있습니다.C# Word 문서에서 FormField 가져 오기 및 텍스트 파일에 삽입

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using Microsoft.Office.Interop.Word; 
using System.IO; 

namespace purform 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 

      // create instance of Word 
      Microsoft.Office.Interop.Word.ApplicationClass oWordApp = new Microsoft.Office.Interop.Word.ApplicationClass(); 

      // create instance of Word document 
      Microsoft.Office.Interop.Word.Document oWordDoc = new Document(); 

      object missing = System.Reflection.Missing.Value; 
      try 
      { 
       //declare objects 
       object fileName = @"C:\\path\\to\\file.doc"; 
       object readOnly = false; 
       object isVisible = true; 

       //open word doc 
       oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing, ref readOnly, ref readOnly, 
       ref missing, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, ref missing); 

       oWordDoc.Activate(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Unable to locate and activate document file"); 
      } 

      object oFormFields = fieldArray[i, 0]; 
      oWordDoc.FormFields.get_Item(ref oFormFields).Range = 


      System.IO.File.WriteAllText(@"\\path\\to\\file.txt", fieldArray[]); 



     } 
    } 
} 

어떻게 병합 필드를 얻을 수 있습니까?

답변

6

저는 이전에 이와 같은 코드를 사용했습니다.
는 또한 FormFields이 mergefields

foreach(Field wdField in workDoc.Fields) 
    { 
     if (wdField.Type == WdFieldType.wdFieldMergeField) 
     { 
      wdField.Select(); 
      string fieldText = wdField.Result.Text; 
     } 
    } 
+0

팁 주셔서 감사합니다! – user1059110

0

당신은 다음과 같은 몇 가지 일을 사용할 수 없습니다 있습니다. 'Get bookmark name'부분 만 사용했기 때문에 대부분의 코드에 주석을 삽입했음을 알 수 있습니다. 텍스트 양식 필드의 형식을 가져올 수도 있습니다.

foreach (Word.FormField oFormFields in oDoc.FormFields) { 
    //To Get Bookmark Name 
    if (oFormFields.Name.Contains("CompanyEntity")) { 
        //With Values 
        BMClick = BMClick + "," + oFormFields.Name; 
        BMType = oFormFields.Type.ToString(); 
        BMClick = BMClick + "," + BMType + "," + oFormFields.Result + "\n"; 
    } 

    //from here: get all BM names 
    //if (oFormFields.Type == Microsoft.Office.Interop.Word.WdFieldType.wdFieldFormTextInput) 
    //{ 

    // ////To Get Bookmark Name 
    // //if ((oFormFields.Name.ToUpper().Contains("LR_M_IssueDate")) || (oFormFields.Name.ToUpper().Contains("LR_O_ExpiryDate"))) 
    // //{ 
    // // BMClick = BMClick + "," + oFormFields.Name; 
    // //} 

    // //With Values 
    // //BMClick = BMClick + "," + oFormFields.Name; 
    // //BMType = oFormFields.Type.ToString(); 
    // //BMClick = BMClick + "," + BMType + "," + oFormFields.Result + "\n"; 

    ////To check the text field format 
     // switch (((Microsoft.Office.Interop.Word.WdTextFormFieldType)oFormFields.TextInput.Type)) 
    // { 
    //  case Microsoft.Office.Interop.Word.WdTextFormFieldType.wdRegularText: 
    //   { 

    //    ////To Get Bookmark Name 
    //    //if ((oFormFields.Name.ToUpper().Contains("LR_M_IssueDate")) || (oFormFields.Name.ToUpper().Contains("LR_O_ExpiryDate"))) 
    //    //{ 
    //    // BMClick = BMClick + "," + oFormFields.Name; 
    //    //} 
    //    BMClick = BMClick + "," + oFormFields.Name; 
    //    BMType = oFormFields.Type.ToString(); 
    //    BMClick = BMClick + "," + BMType; 
    //    BMTextType = oFormFields.TextInput.Type.ToString(); 
    //    BMClick = BMClick + "," + BMTextType + "\n"; 
    //    break; 
    //   } 

    //  case Microsoft.Office.Interop.Word.WdTextFormFieldType.wdDateText: 
    //   //if ((oFormFields.Name.ToUpper().Contains("LR_M_ISSUEDATE")) || (oFormFields.Name.ToUpper().Contains("LR_O_EXPIRYDATE"))) 
    //   //{ 
    //   // BMClick = BMClick + "," + oFormFields.Name; 
    //   //} 
    //   BMClick = BMClick + "," + oFormFields.Name; 
    //   BMType = oFormFields.Type.ToString(); 
    //   BMClick = BMClick + "," + BMType; 
    //   BMTextType = oFormFields.TextInput.Type.ToString(); 
    //   BMClick = BMClick + "," + BMTextType + "\n"; 
    //   break; 

    //  case Microsoft.Office.Interop.Word.WdTextFormFieldType.wdNumberText: 
    //   BMClick = BMClick + "," + oFormFields.Name; 
    //   BMType = oFormFields.Type.ToString(); 
    //   BMClick = BMClick + "," + BMType; 
    //   BMTextType = oFormFields.TextInput.Type.ToString(); 
    //   BMClick = BMClick + "," + BMTextType + "\n"; 
    //   break; 
    //  default: 
    //   //MessageBox.Show("no"); 
    //   break; 
    // } 
    //} 



    //else if (oFormFields.Type == Microsoft.Office.Interop.Word.WdFieldType.wdFieldFormCheckBox) 
    //{ 
    // BMClick = BMClick + "," + oFormFields.Name; 
    // BMType = oFormFields.Type.ToString(); 
    // BMClick = BMClick + "," + BMType + "," + oFormFields.Result + "\n"; 
    //} 
    ////{ 
    //// if (oFormFields.Name == "") 
    //// { 
    ////  Word.Range curPageRange = new Word.Range; 
    ////  object AtPage = @"\page"; 
    ////  curPageRange = oDoc.Bookmarks.get_Item(ref AtPage).Range; 
    ////  //curPageRange.Select(); 

    ////  BMClick=BMClick + "," + curPageRange; 
    //// } 
    ////} 

    //else if (oFormFields.Type == Microsoft.Office.Interop.Word.WdFieldType.wdFieldFormDropDown) 
    //{ 
    // BMClick = BMClick + "," + oFormFields.Name; 
    // BMType = oFormFields.Type.ToString(); 
    // BMClick = BMClick + "," + BMType + "," + oFormFields.Result + "\n"; 
    //} 
    ////{ 
    //// if (oFormFields.Name == "") 
    //// { 
    ////  Word.Range curPageRange = new Word.Range; 
    ////  object AtPage = @"\page"; 
    ////  curPageRange = oDoc.Bookmarks.get_Item(ref AtPage).Range; 
    ////  //curPageRange.Select(); 

    ////  BMClick=BMClick + "," + curPageRange; 
    //// } 
    ////} 
    //until here: get all BM names 

    ctr++; 
    // } 
} 
관련 문제