2012-03-02 15 views
0

私はラベルを生成するためにWordでOpenXML SDKを使用しています。基本ワードのdocには、テーブル、2行、2つのセルを持つ1つのページがあり、各セルは1つのラベルを表します。私の計画は、SQL結果セットのサイズに基づいて必要に応じてページを追加することでした。ページの追加は機能しますが、本文の表の数は変更されません。要素配列をリフレッシュする方法はありますか?私は、結果セットのサイズを取得し、必要なページ数を追加して閉じ、ドキュメントを再度開くことができると思いますが、私は単純なものが欠けていると思います。OpenXMLテーブルコピーOpenXmlUnknownElementを提供

報告された間違った問題申し訳ありませんが、文書はWordでは正しく表示されていますが、生産性ツールでは正しく表示されませんでした。私は最新の試みを示すためにコードを更新しました。 iTestは正しい数のテーブルを報告するようになりましたが、生産性ツールでは追加されたテーブルにはOpenXmlUnknownElementというフラグが立てられます。

for (int i = 0; i < pages; ++i) 
{ 
    Table table = new Table(doc.MainDocumentPart.Document.Body.Elements<Table>().First().CloneNode(true)); 
    doc.MainDocumentPart.Document.Body.Append(table); 
} 
int iTest = doc.MainDocumentPart.Document.Body.Elements<Table>().Count(); 

XMLが生成され、余分な<w:tbl>がありますを示しています。

<w:tbl xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
    <w:tbl> 
    <w:tblPr> 
     <w:tblStyle w:val="TableGrid" /> 

だから、本当の問題は、OpenXMLのSDKを使用してテーブルをコピー&ペーストする方法、ありますか?

答えて

0

newとCloneNodeが冗長であったため、InsertAfterも必要ではなくテーブルをまとめた状態にしました。 First()の後に挿入するまでラベルを更新しないので、私の目的のために動作します。

for (int i = 0; i < pages; ++i) 
{ 
    doc.MainDocumentPart.Document.Body.InsertAfter(doc.MainDocumentPart.Document.Body.Elements<Table>().First().CloneNode(true), MDP.Document.Body.Elements<Table>().First()); 
} 
0

の代わりにDescendants<Table>を試してください。

あなたの体のXMLも投稿してください。私たちはあなたを助けることができます。