2016-11-25 1 views
0

부분적으로 병합하려고하는 두 개의 문서가 있습니다.OpenXML - 문서 병합시 불릿 점이 번호가 매겨진 목록으로 변환됩니다.

은 내가 RTF 콘텐츠 컨트롤 내부에와에 appendChild와 CloneNode (TRUE) (깊은 복제)를 사용하여 문서 B의 다른 sdtContent에 콘텐츠 컨트롤의 sdtContent의 모든 자식 요소를 복사 문서 A로부터 일부 부품을 :

foreach (var srcChildElement in sourceDocumentSdtContentBlockNode.ChildElements) 
{ 
    targetSdtContentBlock.AppendChild(srcChildElement.CloneNode(true); 
} 

원본 문서 A의 내용 (목록 항목)이 글 머리 기호로 서식이 지정된 경우 문서 B의 결과에 목록 항목 번호가 매겨집니다.

결과 스타일을 복제 할 때 원본과 같은 이유가 아닌 이유는 무엇입니까? 나는 그것을 조작하지 않을 때 그것의 스타일을 유지할 것이라고 생각했다. 문서 B에는 서식 문제가없는 것으로 보입니다. 글 머리 기호 또는 번호 매기기 목록을 문제없이 수동으로 삽입 할 수 있습니다.

나는 완전히 새로운 단어 문서 두 개를 만들었고 똑같은 일이 발생하기 때문에 기존 파일에 문제가 없다.

업데이트 : 내가 복사 노드의 일부가 아닌 문서 (https://msdn.microsoft.com/en-us/library/office/ee922775(v=office.14).aspx)에 별도의 번호 정의가 있음을 발견 . 노드를 복제 할 때이 정보는 별도의 번호 매기기 정의에 포함되지 않습니다. 노드를 새 문서에 복사하고 번호 매기기 정의에서 번호 매기기 스타일을 유지하도록 지시하는 방법이 있습니까? 다른 옵션은 복제 된 노드에 numPr 요소가 포함되어 있는지 수동으로 확인하고, 그렇다면 정의를 추출하고 (ID를 변경하고 다시 할당하는 것을 포함하여) 요소를 복사하는 덜 복잡한 방법을 선호합니다.)

아이디어가 있으십니까?

답변

1

글쎄, 나는 이것을 해결할 수 있었다. https://msdn.microsoft.com/en-us/library/office/ee922775(v=office.14).aspx

NumberingDefinitions에서 (NumberingPart에서) 단락 내부 numPr을가 내가 필요한 복사 한 소스 (의 :로 이미 번호 매기기 정보는 별도의 일부에 저장 (또는 문서 내부 지퍼 파일)입니다 언급). 검색을 통해 대상 파일에 numIdnumPr.

요소와 해당 abstractNum 요소를 대상에 복제했습니다. 이렇게하면 numId, abstractNumIdnsid (16 진값)과 같은 ID (대상에서 기존 요소 ID를 사용하여 모두 1 씩 증가)를 대체하여 충돌이 없는지 확인합니다.

약간 일했지만 매우 재미있었습니다.

+0

덧붙여서 : 나는 (DocumentBuilder 클래스와 함께) 문서를 병합하기 위해 OpenXML PowerTools를 사용하는 것이 좋습니다. PowerTools를 사용하면 휠을 다시 만들 필요가 없습니다. – Patric

관련 문제