2009-08-18 3 views
5

내 웹 서버에 Word 2007 이상의 docx 파일을 업로드하고 목차를 간단한 xml 구조로 변환하고 싶습니다. 전통적인 VBA로 데스크톱에서이 작업을 수행하는 것이 쉬운 것처럼 보입니다. WordprocessingML을 보면 docx 파일을 만드는 데 사용 된 XML 데이터가 혼란 스럽습니다. 객체 지향적 인 방식으로 문서를 탐색하는 방법 (COM이없는)이 있습니까?ASP.NET 응용 프로그램에서 Word docx를 어떻게 쿼리 할 수 ​​있습니까?

답변

4

Open XML SDK 2.0을 살펴볼 것을 적극 권장합니다. 그것은 CTP지만 COM을 전혀 다루지 않고도 xmlx 파일을 조작하는 데 매우 유용하다는 것을 알았습니다. 문서는 약간 개략적이지만, 중요한 것은 DocumentFormat.OpenXml.Packaging.WordprocessingDocument 클래스입니다. 확장명을 .zip으로 바꾸고 거기에서 XML 파일을 파 놓으면 .docx 문서를 골라 낼 수 있습니다. 그렇게함으로써, 목차가 "Structured Document"태그에 포함되어 있고 표제와 같은 것이 하이퍼 링크에있는 것처럼 보입니다. 조금만 둘러 보면, 나는 이것과 같은 것이 작동해야한다는 것을 발견했다. (또는 최소한 시작점을 준다.)

WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false); 
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First(); 
List<string> contentList = new List<string>(); 
foreach (Hyperlink section in contents.Descendants<Hyperlink>()) 
{ 
    contentList.Add(section.Descendants<Text>().First().Text); 
} 
0

시작 지점으로 XML Documents and Data을 참조하십시오. 특히 LINQ to XML을 사용하고자 할 것입니다.

일반적으로 .NET 응용 프로그램에서 COM을 사용하지 않으려합니다.

3

다음은 LINQ to XML을 사용하여 Open XML WordprocessingML 문서를 쿼리하는 블로그 게시물입니다. 다음과 같이 그 코드를 사용하여 쿼리를 작성할 수 있습니다

using (WordprocessingDocument doc = 
    WordprocessingDocument.Open(filename, false)) 
{ 
    foreach (var p in doc.MainDocumentPart.Paragraphs()) 
    { 
     Console.WriteLine("Style: {0} Text: >{1}<", 
      p.StyleName.PadRight(16), p.Text); 
     foreach (var c in p.Comments()) 
      Console.WriteLine(
       " Comment Author:{0} Text:>{1}<", 
       c.Author, c.Text); 
    } 
} 

블로그 게시물 : Open XML SDK and LINQ to XML

-Eric

+1

내가 오픈 XML에 대한 글 읽기 - 위대한 일을! –

관련 문제