OpenXML 2.8.1.0遍历脚注并添加新脚注的技术求助
解决OpenXML中
FootnoteReference集合调用.ToArray()报错的问题 嘿,这个问题我太熟悉了!你遇到的报错根源其实很简单——.ToArray()是LINQ的扩展方法,不是OpenXML集合类自带的方法,所以编译器找不到它。
具体原因
doc.MainDocumentPart.Document.Body.Descendants<FootnoteReference>()返回的是一个实现了IEnumerable<FootnoteReference>的集合类型,但.ToArray()方法并不属于这个集合本身,而是由System.Linq命名空间下的Enumerable类提供的扩展方法。如果你的代码文件没有引入这个命名空间,编译器就识别不了这个方法。
解决方案
只需要两步就能搞定:
- 添加
System.Linq命名空间引用
在你的代码文件顶部加上这行:
using System.Linq;
- 确认项目引用了
System.Core程序集
不过在现代.NET项目(比如.NET Framework 4.0+、.NET Core/.NET 5+)里,这个程序集一般是默认引用的,老项目如果没引用的话,右键项目→添加引用→找到System.Core勾选即可。
修改后的完整代码示例
using System.Linq; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; // 假设doc是你的WordprocessingDocument实例 FootnotesPart footnotesPart = doc.MainDocumentPart.FootnotesPart; if (footnotesPart != null) { var footnotes = footnotesPart.Footnotes.Elements<Footnote>(); // 现在ToArray()可以正常使用了 var references = doc.MainDocumentPart.Document.Body.Descendants<FootnoteReference>().ToArray(); foreach (var footnote in footnotes) { // 你的脚注遍历逻辑 } }
备选方案(不用LINQ)
如果你不想用LINQ,也可以手动把集合转成数组:
var referenceList = new List<FootnoteReference>(); foreach (var reference in doc.MainDocumentPart.Document.Body.Descendants<FootnoteReference>()) { referenceList.Add(reference); } var references = referenceList.ToArray();
不过显然用LINQ的方式更简洁优雅~
内容的提问来源于stack exchange,提问作者DHel
相关产品推荐
相关产品推荐

