2012-03-02 3 views
0

Word와 함께 OpenXML SDK를 사용하여 레이블을 만듭니다. 기본 Word 문서에는 표, 두 행 및 두 셀이있는 한 페이지가 있으며 각 셀은 하나의 레이블을 나타냅니다. 내 계획은 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

Elements<Table> 대신 Descendants<Table>을 시도하십시오.

본문의 XML도 게시하여보다 나은 도움을 받으실 수 있습니다.