2011-10-11 4 views
0

C#/NET에서 DOCX 파일을 ZipPackage으로 열 수 있습니다. 그런 다음 PackagePart으로 가져오고 에서 읽기/쓰기를 사용하여 XML 부분을 각각 .GetStream()을 사용하여 조작 할 수 있습니다.VBA에서 DOCX 조작?

내가 아는 한, VBA는이 기능을 사용하여 백만 마일 떨어져 있습니다 (특히 웹 검색을 많이 한 후에는 찾지 못했음). : 어떤 VBA 애호가라도 VBA에 DOCX ZipPackage을 조작하는 내장 기능이 있는지 확인하거나 거부 할 수 있습니까? 아니면 처음부터 직접 VBA DOCX 파서를 작성해야합니까?

답변

1

대개 대답은 '아니요'가 아니라 '예'의 희미한 부분이 있습니다.

스트림에서 PackagePart을 (를) 관리하는 구체적인 질문에 관해서. 일종의 "압축 해제"유틸리티로 이것을 수행 한 다음 OPC 구조를 알고 Part에서 원하는 곳으로 이동하여 XSLT 또는 다른 XML 조작 기술로 변경하면됩니다. 그러나이 작업을 수행 할 수는 없습니다 ActiveDocument에 있습니다. 스트림이 이미 열려 있기 때문에 스트림이 이미 사용 중이기 때문입니다. VBA를 사용하여 복사본을 생성하고 조작하기가 번거롭고 조작이 완료되면 VBA를 닫고 현재 ActiveDocument을 삭제하고 조작 된 것을 새 ActiveDocument으로 엽니 다.

반면에 VBA의 현재 ActiveDocument에 대해 WordprocessingML을 조작하는 방법이 있지만 엄청나게 어려울 것입니다. 열려있는 문서를 가지고 뭔가를 선택한 다음 VBE를 선택하십시오. 다음을 실행하십시오 :

Sub InjectXML() 
    Dim wd As Document: Set wd = ActiveDocument 
    Debug.Print wd.Range.WordOpenXML 
End Sub 

즉시 처리 창에 모든 WordprocessingML이 표시됩니다. 이것은 실제로 "Flat OPC WordprocessingML"입니다. XML 문자열로 모두 유지 관리됩니다. ActiveDocument.Range.InsertXML을 사용하면 기술적으로 Flat OPC-type of WordprocessingML을 선택한 위치의 문서에 삽입 할 수 있습니다. interop 및 Linq-to-XML을 통해이를 수행하기 위해 C#을 사용하는 누군가의 Here's an example. VBA에서 이렇게하는 것은 엄청나게 어려울 것입니다.

다시 대답은 대부분 "아니오"이지만 약간 "예"입니다.

0

당신이 궁극적 인 목표를 밝히지는 않았지만 Microsoft.office.interop.word을 사용하여 단어 문서를 조작하는 것이 하나의 방법 일 것입니다.

+0

물론 종속성을 감당할 여유가 없다면 질문에 명확하게 설명해야합니다. – zeFrenchy

+0

VBA에서 해당 네임 스페이스를 사용할 수 있습니까? 아니면 COM을 통해 Word와 상호 작용하는 프로그램 용입니까? 나는 VBA 스크립팅을 여기 Office (실제로 Outlook이 아니라 Word) 내부에서 생각하고있다. – Jez