我正在尝试将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.我做错了什么?
答案 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