Мне нужно прочитать содержимое файла 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();