生成OpenXML DocProperties Id

时间:2016-07-27 16:38:08

标签: c# openxml openxml-sdk

我需要通过OpenXML向word文档添加内容。我已经使用Open Xml生产力工具来生成代码,并且我试图对其进行调整,以便它可以重复使用所有文档。

显然需要一个DocProperties对象,这需要一个唯一的Id。有没有办法自动生成这些ID?或者我是否需要执行类似下面的代码来查找使用的最大ID并从那里开始增量?

有更好的方法吗?这看起来很贵。我在C#和.Net 4.0中使用Microsoft的Open XML SDK(v2.5)中的DocumentFormat.OpenXml。

    static uint getMaxDocPropertyId(WordprocessingDocument doc)
    {
        return doc
            .MainDocumentPart
            .Parts
            .Select(x => x.OpenXmlPart.RootElement)
            .Where(x => x != null)
            .SelectMany(x => x.Descendants<Wp.DocProperties>())
            .Max(x => x.Id.Value as uint?) ?? 0;
    }

1 个答案:

答案 0 :(得分:0)

这对我有用,但它基本上做同样的事情。对我来说,我不认为这是可以避免的,因为我正在寻找的DocProperties属于图像,而且我的文档中有多个,所以每个都埋在段落的深处 - &gt;运行 - &gt;绘图 - &gt;和一个Inline的孩子。

private uint GetMaxDocPropertyId(WordprocessingDocument doc)
{
    return doc
       .MainDocumentPart
       .RootElement
       .Descendants<DocProperties>()
       .Max(x => (uint?) x.Id ) ?? 0;
}