简体   繁体   English

C#从Word文档检索FormFields并将其插入文本文件

[英]C# Retrieve FormFields from Word Document and Insert into Text file

I'm trying to figure out how to iterate through a document and pull all form fields and insert them into a new text file. 我试图弄清楚如何遍历文档并提取所有表单字段并将其插入新的文本文件。 I'm working through it trying to find examples of the functions I'm going to need and I'm not coming up with a lot of information. 我正在尝试寻找所需功能的示例,但并没有提供很多信息。 Maybe I'm not searching properly though. 也许我搜索不正确。 Here's what I've written so far. 到目前为止,这是我写的内容。

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[]);



        }
    }
}

How can I get the mergefields? 如何获得mergefields?

I have used code like this in the past. 我过去曾经使用过这样的代码。
Also note the FormFields are not mergefields 还要注意FormFields不是mergefields

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

You can use some thing like this. 您可以使用类似这样的东西。 You can see that I've inserted comments on most of the code as I was only using the 'Get bookmark name' part. 您会看到我在大多数代码中都插入了注释,就像我仅使用“获取书签名称”部分一样。 You may also get the format of the text form field. 您还可以获取文本表单字段的格式。

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++;
    // }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM