2016-07-27 7 views
0

OpenXMLを介して単語文書に何かを追加する必要があります。私はOpen XMLの生産性ツールを使ってコードを生成しましたが、それを調整してすべてのドキュメントで再利用できるようにしようとしています。OpenXML DocProperties Idの生成

明らかにDocPropertiesオブジェクトが必要です。これには一意のIDが必要です。これらのIDを自動的に生成する方法はありますか?または、使用した最大IDとそこからのインクリメントを調べるには、以下のコードのような処理を行う必要がありますか?

良い方法がありますか?これは高価なようです。私はOpen XML SDK(v2.5)のDocumentFormat.OpenXmlをMicrosoftのC#with .Net 4.0で使用しています。

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; 
    } 

答えて

0

これは私にとってはうまくいったが、基本的に同じことをしている。私が探しているDocPropertiesはイメージに属していて、ドキュメント内には複数あるので、それぞれが段落の内側に埋め込まれているので、回避することはできません - >実行 - >描画 - >インラインの子供。

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