Таблицы openXML не читаются в MS Word - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь прочитать все таблицы из словесного файла в список, хотя по какой-то причине счетчик равен 0 независимо от того, сколько таблиц находится в файле. Вот мой код.

public void FindAndReplace(string DocPath)
{
  using (WordprocessingDocument doc = WordprocessingDocument.Open(DocPath, true))
  {
    using (StreamReader reader = new StreamReader(doc.MainDocumentPart.GetStream()))
    {
      //Text titlePlaceholder = doc.MainDocumentPart.Document.Body.Descendants<Text>().Where((x) => x.Text == "Compliance Review By:").First();
      List<Table> tables = doc.MainDocumentPart.Document.Descendants<Table>().ToList();
      System.Console.WriteLine(tables.Count);

таблиц. Количество = 0. Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Вы, вероятно, ссылаетесь на неправильный Table. Это должно работать:

var tables = doc.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Wordprocessing.Table>().ToList();
0 голосов
/ 15 мая 2018

У Ану старта был ответ в комментариях. Проблема заключалась в том, что я использовал неправильное пространство имен. Вместо использования DocumentFormat.OpenXml.Wordprocessing.Table я использовал DocumentFormat.OpenXml.Drawing.Table

0 голосов
/ 05 мая 2018

Если все, что вы пытаетесь сделать, это ЧИТАТЬ таблицы, то нет необходимости открывать документ для редактирования (что вы сейчас делаете)

Установите для второго параметра значение false в WordprocessingDocument.Open (), чтобы открыть его для чтения. Это предотвратит ошибку, связанную с открытием записи более одного раза в режиме обновления (я полагаю, это то, с чем вы столкнулись в любом случае).

Решение на основе болтовни

Настоящий виновник здесь связан с использованием неправильного пространства имен OpenXml при проверке таблиц в документе. При поиске потомков типа Table передаваемый тип должен быть OpenXml. Обработка текстов .Table, NOT OpenXml. Рисование .Table

Я не знаю, для какого типа объекта используется OpenXml.Drawing.Table. Я спрошу об этом в отдельном вопросе.

...