Считать значение поля формы внутри абзаца или таблицы - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно прочитать содержимое файла Word и, исходя из некоторых конкретных требований, мне нужно вставить содержимое файла Word в базу данных сервера SQL.

Я использую Microsoft.Office.Interop.Word dll.Я обновил его с помощью управления пакетами nuget из моей визуальной студии (IDE).

Он хорошо читается, когда обнаружил всю строку в слове.Проблемы возникают, когда он находит какой-либо элемент управления формы внутри таблицы или абзаца.

Я хочу, чтобы он сначала обнаружил тип элемента управления формы (флажок, текстовое поле, раскрывающийся список, указатель даты) и после этого нашел его значение.

В настоящее время, когда он находит любое поле формы, он показывает «\ u0015» в виде текста.

Как я могу прочитать значение элемента управления формы внутри абзаца или таблицы.

Также мне нужно найти способ, гдеЯ могу прочитать файл слова как.

Paragraph1 Paragraph2 Table1 Table2 Paragraph1

После ввода в абзац или таблицу я могу прочитать конкретное контрольное значение, если оно существует, иначе читать простую строку.

В настоящее время я использую два отдельных цикла для абзаца и таблицы.

Я использую код ниже:

    StringBuilder text = new StringBuilder();
    List<Range> TablesRanges = new List<Range>();
    string celltext = string.Empty;

    Microsoft.Office.Interop.Word.Application wordApp = new Application();
    object file = @"D:\Test.docx";

    object nullobj = System.Reflection.Missing.Value;

    Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(
    ref file, ref nullobj, ref nullobj,
                                          ref nullobj, ref nullobj, ref nullobj,
                                          ref nullobj, ref nullobj, ref nullobj,
                                          ref nullobj, ref nullobj, ref nullobj);

    text.Append("Paragraph Start\n");
    foreach (Microsoft.Office.Interop.Word.Paragraph paragraph in doc.Paragraphs)
    {
        if (!string.IsNullOrEmpty(paragraph.Range.Text) && !paragraph.Range.Text.Contains("\r\a"))
        {
            string toWrite = paragraph.Range.Text;
            text.Append(toWrite.Replace('\r', ' ').Replace('\n', ' ').Replace('\a', ' ') + " \n"); 

            foreach (Field field in doc.Fields)
            {
               var j=  field.Result.ContentControls.GetType();

                //Here I want it check the control type first then get its value
                if (field.Result != null)
                {
                    var m = field.Result.Text;
                }

            }
        }
    }
    text.Append("Paragraph End\n");

    text.Append("Table Start\n");
    foreach (Microsoft.Office.Interop.Word.Table tb in doc.Tables)
    {
        for (int row = 1; row <= tb.Rows.Count; row++)
        {
            for (int index = 1; index <= 20; index++)
            {
                try
                {                     
                    var cell = tb.Cell(row, index);

                    celltext += cell.Range.Text + " ";
                }
                catch (Exception ex)
                {
                    break;
                }
            }

            text.Append(celltext.Replace('\r', ' ').Replace('\n', ' ').Replace('\a', ' ') + " \n");
            celltext = "";               
        }

        text.Append("\n");
    }
    text.Append("Table End");

    ReadContent(text.ToString());
    text.Clear();
...