openXML表未在MS word中读取

时间:2018-05-04 20:41:46

标签: c# winforms ms-word openxml

我正在尝试将word文件中的所有表读入列表,尽管由于某种原因,无论文件中有多少表,计数都为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);

tables.Count = 0.我做错了什么?

3 个答案:

答案 0 :(得分:0)

如果你要做的只是阅读表格,那么就无需打开文档进行编辑(这就是你目前正在做的事情) )

在WordprocessingDocument.Open()中将第二个参数设置为false以打开以进行读取。这样可以防止在更新模式下多次打开条目的相关错误(我假设您正在进行的操作)。

基于喋喋不休的解决方案

这里真正的罪魁祸首是在检查文档中的表时使用错误的OpenXml命名空间。在查找Table类型的Descendants时,传入的类型必须是OpenXml。 Wordprocessing .Table, NOT OpenXml。 Drawing .Table

我不知道OpenXml.Drawing.Table用于什么类型的对象。我将在另一个问题中提出这个问题。

答案 1 :(得分:0)

您可能引用了错误的Table。这应该有效:

var tables = doc.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Wordprocessing.Table>().ToList();

答案 2 :(得分:0)

Anu开始在评论中得到答案。问题是我使用的是不正确的命名空间。而不是使用DocumentFormat.OpenXml.Wordprocessing.Table我使用DocumentFormat.OpenXml.Drawing.Table