인쇄용 버전       전송     
평가 및 의견을 보내려면 클릭하십시오.
MSDN
MSDN Library
기술 문서(Technical Articles)
Office
Microsoft Office Development
 방법: Office Open XML 형식 문서 조작
방법: Office Open XML 형식 문서 조작

Frank Rice, Microsoft Corporation

2006년 12월

적용 대상: Microsoft Office Excel 2007, Microsoft Office PowerPoint 2007, Microsoft Office Word 2007

요약: 기존의 이진 Office 시스템 파일이 Office Open XML 형식 파일로 대체되었습니다. 이 문서에서는 이러한 형식 파일에 포함된 구성 요소와 해당 파일의 다양성을 보여 주는 몇 가지 시나리오를 살펴봅니다.

2007OfficeManipulatingOpenXMLFilesSample.exe (영문)를 다운로드하십시오.

목차

화면 맨 위로 개요
Office Open XML 형식 파일 생성 Office Open XML 형식 파일 생성
Office Open XML 형식 파일 탐색 Office Open XML 형식 파일 탐색
Office Open XML 형식을 사용하여 만든 문서를 수동으로 편집 Office Open XML 형식을 사용하여 만든 문서를 수동으로 편집
프로그래밍 방식으로 Office Open XML 형식 문서 조작 프로그래밍 방식으로 Office Open XML 형식 문서 조작
결론 결론
추가 리소스 추가 리소스

개요

이전 버전의 Microsoft Office에서는 Microsoft Office Excel, Microsoft Office PowerPoint 및 Microsoft Office Word로 만든 파일이 "이진" 파일이라는 독자적인 하나의 파일 형식으로 저장되었습니다. 그러나 Microsoft Office system 2007 릴리스에서는 Microsoft Office Excel 2007, Microsoft Office PowerPoint 2007 및 Microsoft Office Word 2007에 Office Open XML 형식이라는 새로운 파일 형식이 사용됩니다.

Office Open XML 형식은 XML 및 ZIP 압축 기술을 기반으로 합니다. 2007 릴리스의 경우 문서가 단일 파일 또는 컨테이너에 저장되므로 문서 관리 프로세스가 간단하다는 점은 이전 버전의 Microsoft Office와 같지만, 기존 파일과 달리 Office Open XML 형식 파일은 수동으로 열어 구성 요소 파트를 확인하고 파일을 구성하는 구조에 액세스할 수 있습니다.

이 문서에서는 Office Open XML 형식 파일을 수동으로 열어 문서를 구성하는 각 파트를 살펴보고 프로그래밍 방식으로 문서 작업을 수행합니다. 이 문서에 사용된 파일은 문서와 함께 제공되는 2007OfficeManipulatingOpenXMLFilesSample.exe (영문) 다운로드 파일에 포함되어 있습니다. 이 다운로드 파일에 액세스할 수 없는 경우 여러분이 사용 중인 프로그램 파일과 예의 이미지 파일로 대신하면 됩니다.

Office Open XML 형식 파일 생성

  1. Word 2007 을 시작합니다.

  2. 새 문서에 다음 텍스트를 붙여 넣습니다 .

    Soaring with the American Bald Eagle

    Lorem ipsum dolor sit amet , consectetuer adipiscing elit. Nulla rutrum. Phasellus feugiat bibendum urna. Aliquam lacinia diam ac felis. In vulputate semper orci. Quisque blandit. Mauris et nibh. Aenean nulla. Mauris placerat tempor libero.

    Pellentesque bibendum. In consequat , sem molestie iaculis venenatis , orci nunc imperdiet justo , id ultricies ligula elit sit amet ante. Sed quis sem. Ut accumsan nulla vel nisi. Ut nulla enim , ullamcorper vel , semper vitae , vulputate vel , mi. Duis id magna a magna commodo interdum.

  3. Soaring with the American Bald Eagle줄을 선택한 다음 탭의 스타일 그룹에서 스타일을 제목으로 설정합니다.

  4. 그 다음 문서에 이미지를 삽입합니다.

    1. 첫째 단락 끝으로 커서를 이동하고 Enter 키를 눌러 새 줄을 삽입합니다.

    2. 그 다음 삽입 탭에서 그림을 클릭하고 이미지 파일(예: 다운로드에 포함된 Eagle1.gif 파일)을 찾아 선택한 다음 삽입을 클릭합니다.

  5. 이제 몇 가지 문서 속성을 추가합니다.

    1. Microsoft Office 단추를 클릭하고 준비를 가리킨 다음 속성을 클릭합니다.

    2. 문서 속성 창에 다음과 같이 만든 이 이름, 제목, 주제 및 설명을 입력합니다.

      표 1. 문서 속성 설정

    3. 속성

      텍스트

      만든 이

      Nancy Davolio

      제목

      Soaring with the American Bald Eagle

      주제

      흰머리수리

      설명

      흰머리수리 연구

  6. 다음으로 문서 본문에 설명을 추가합니다 .

    1. 검토 탭에서 설명을 클릭합니다.

    2. 설명 풍선에 This is my comment.를 입력합니다.

      그림 1과 유사한 문서가 만들어집니다.

      그림 1. Office Word 2007 샘플 문서

  7. 이제 문서를 저장합니다 .

    1. Microsoft Office 단추를 클릭한 다음 다른 이름으로 저장을 클릭합니다.

    2. 파일 형식 목록에서 Word 문서 (*.docx)를 선택한 다음 파일 이름 입력란에 SampleWordDocument.docx를 입력합니다.

    3. 저장을 클릭합니다.

  8. Word 닫습니다.

Office Open XML 형식 파일 탐색

이 섹션에서는 방금 만든 샘플 문서를 탐색해 봅니다.

Office Open XML 형식 문서를 탐색하려면

  1. Microsoft Windows 탐색기를 엽니다.

  2. SampleWordDocument.docx 파일을 찾아 마우스 오른쪽 단추로 클릭한 다음 이름 바꾸기를 선택합니다.

    참고 중요:

    다음 세 단계에 따라 이 문서의 나머지 부분에서 사용할 Office Open XML 형식 파일을 추출합니다. 5단계는 Windows XP와 Windows Vista 중 어떤 운영 체제를 사용하는지에 따라 다릅니다.

  3. 파일 이름의 끝에 .zip 확장명을 추가하여 파일 이름을 SampleWordDocument.docx.zip으로 변경합니다.

  4. 이름 바꾸기 경고 메시지가 나타나면 를 클릭합니다.

  5. 다음과 같이 컨테이너 파일을 추출합니다.

    1. Windows XP 사용하는 경우 : SampleWordDocument.docx.zip을 마우스 오른쪽 단추로 클릭하고 연결프로그램을 가리킨 다음 압축(ZIP) 폴더를 클릭합니다. 탐색기 창에 문서를 구성하는 폴더와 파트가 표시됩니다.

    2. Windows Vista 사용하는 경우 : SampleWordDocument.docx.zip을 마우스 오른쪽 단추로 클릭하고 압축풀기를 클릭합니다. 압축(ZIP) 폴더풀기 대화 상자에서 기본 위치 또는 새 위치를 선택한 다음 압축풀기를 클릭합니다. 탐색기 창에 문서를 구성하는 폴더와 파트가 표시됩니다.

    다음 단계에서는 문서에 포함된 핵심 파트를 살펴보겠습니다.

  6. [Content_Types].xml 파트 살펴보기:

    1. Windows 탐색기를 사용하여 [Content_Types].xml 파일을 찾습니다.

    2. 해당 파일을 마우스 오른쪽 단추로 클릭하고 연결프로그램을 가리킨 다음 Internet Explorer를 클릭합니다.

      모든 Office Open XML 형식 문서의 루트에는 [Content_Types].xml 파트가 있습니다. 이 [Content_Types].xml 파트는 문서에 포함된 고유한 형식의 모든 파트를 식별하는 용도로 사용됩니다. 각 파트는 이 파트에 나열된 형식으로 만들어져야 합니다. 응용 프로그램이 문서를 렌더링할 때 파트를 어떻게 사용해야 할지 알 수 있도록 파트의 형식은 식별 가능해야 합니다. 또한 사용자도 이러한 형식을 통해 파트의 용도와 사용 방법을 파악할 수 있습니다.

    3. 파일을 닫습니다.

  7. .rels 폴더 살펴보기:

    관계는 두 파트 간의 연결을 나타냅니다. 관계 자체도 _rels라는 하위 폴더에 저장되는 파트입니다. 관련 파트가 있는 모든 파트에는 형제 _rels 폴더도 포함되어 있으며 이 폴더에는 관계를 정의하는 .rels 파트가 있습니다. 하위 폴더는 관계가 생성되는 대상 파트와 동일한 폴더에 만들어집니다. 관계의 이름은 원본 파트의 파일 이름에 .rels 확장명을 붙이는 방식으로 파생됩니다. 단, 예외적으로 문서 파일에 대한 관계 파트의 이름은 ".rels"로 지정됩니다.
    1. Windows 탐색기에서 _rels 폴더를 두 번 클릭한 다음 .rels 파일을 마우스 오른쪽 단추로 클릭합니다.

    2. 연결 프로그램을 가리키고 프로그램 선택, Internet Explorer, 열기를 차례로 클릭합니다.

    3. 파트를 살펴본 후 닫습니다.

  8. docProps 폴더 살펴보기:

    2007 릴리스에서 문서 속성은 세 가지 Microsoft Office system 프로그램에 모두 동일하게 구조화되어 있습니다. 즉, 문서 속성이 세 가지 논리 XML 파트로 구분되어 docProps 하위 폴더에 저장되어 있습니다. 따라서 항상 동일한 위치에 있고 다른 문서 콘텐츠와 섞이지 않으므로 쉽게 액세스할 수 있습니다.

    • Windows 탐색기에서 docProps 폴더를 두 번 클릭한 후 core.xml 파일을 마우스 오른쪽 단추로 클릭하고 연결프로그램을 가리킨 다음 Internet Explorer를 클릭합니다.

  9. core.xml 파트 살펴보기 :

    • core.xml 파트를 열고 앞서 입력한 속성이 여기에 표시되는지 확인합니다.

      core.xml 파트에는 제목, 주제, 만든 이 등 사용자가 문서를 식별하기 위해 입력한 일반적인 문서 속성이 저장됩니다.

  10. custom.xml 파트 살펴보기 :

    • Windows 탐색기를 통해 Internet Explorer에서 custom.xml을 엽니다.

      custom.xml 파트에는 사용자나 개발자에 의해, 또는 사용자 지정 논리를 통해 문서에 추가된 모든 사용자 지정 문서 속성이 들어 있습니다.

  11. app.xml 파트 살펴보기 :

    • Windows 탐색기를 통해 Internet Explorer에서 app.xml을 엽니다.

      app.xml 파트는 페이지 수, 텍스트 줄 수, 응용 프로그램 버전 등 응용 프로그램 수준의 문서별 고유 속성으로 구성됩니다.

  12. word 폴더 살펴보기 :

    대부분의 콘텐츠별 파트는 word 하위 폴더에 들어 있습니다. 이 폴더에도 _rels라는 관계 하위 폴더가 있습니다.

    • _rels 폴더를 두 번 클릭합니다.

      _rels 하위 폴더에서 모든 문서 파트를 연결하는 데 사용되는 관계는 document.xml.rels라는 파트에 있습니다.

  13. document.xml.rels 파트 살펴보기 :

    • Internet Explorer에서 document.xml.rels를 엽니다.

      관계에서는 ID와 URI(Uniform Resource Identifier)를 사용하여 파트를 찾습니다. 따라서 모든 비관계 파트를 하드 코드된 참조 없이 무효화할 수 있습니다. 이에 대해서는 이 문서의 뒷부분에서 자세히 설명합니다.

      word 폴더에는 styles.xml 파트도 있습니다.

  14. styles.xml 파트 살펴보기:

    • Internet Explorer에서 styles.xml을 엽니다.

      이 파일에는 문서에 사용할 수 있는 강조색 및 음영 목록이 들어 있습니다.

    필수 파트 및 선택 파트
    Office Open XML 형식 파일에 파트를 사용함으로써 모듈화된 방식으로 문서를 저장할 수 있게 되었습니다. 이러한 파트 중에는 document.xml 파트나 fontTable.xml 파트와 같이 유효한 문서를 만드는 데 필수적인 파트도 있습니다.

  15. document.xml 파트 살펴보기 :

    1. Internet Explorer에서 document.xml을 엽니다.

      document.xml 파트에는 문서의 본문을 구성하는 텍스트가 들어 있습니다.

    2. 파일을 살펴본 후 Internet Explorer를 닫습니다.

  16. fontTable.xml 파트 살펴보기 :
    1. Internet Explorer에서 fontTable.xml 파트를 엽니다.

      fontTable.xml 파트에는 문서의 글꼴 설정이 들어 있습니다 .

    2. 파일을 살펴본 후 Internet Explorer를 닫습니다.


    문서에 포함되지 않는 기능을 나타내는 다른 파트는 생략할 수 있습니다. 이러한 파트에는 설명, 머리글 파트, 바닥글 파트 등 Word 문서에 선택적으로 사용되는 모든 파트가 포함됩니다. 따라서 사용되지 않는 파트를 건너뛸 수 있으므로 문서 구조를 쉽게 탐색할 수 있습니다.


    XML은 구조화된 콘텐츠에 맞게 설계되었으며 이미지나 OLE 개체와 같은 이진 콘텐츠를 기본적으로 지원하지는 않습니다. 이진 데이터를 문자로 인코딩하여 XML에 저장할 수 있지만, 이 경우 인코딩/디코딩 프로세스가 필요하기 때문에 응용 프로그램과 개발자 모두에게 비효율적입니다. 2007 릴리스에서는 이진 개체를 기본 형식을 사용하여 이진 파트로 저장할 수 있으므로 인코딩할 필요가 없습니다. 따라서 Office 문서에서 이진 개체에 간단히 액세스할 수 있습니다.


    미디어 파일은 media 폴더에 저장됩니다.

  17. word\media 및 word\embeddings 폴더 살펴보기 :

    • Windows 탐색기에서 media 하위 폴더를 두 번 클릭합니다.

      앞서 삽입한 이미지를 나타내는 .gif 미디어 파일이 들어 있습니다.


      참고 참고:

      이미지 파일의 이름이 Eagle1.gif에서 image1.gif로 변경된 것을 알 수 있습니다. 이는 악의적인 사용자가 이미지 파일과 같은 문서 파트의 이름을 통해 부당하게 정보를 취득, 경쟁 우위를 점하는 개인 정보 침해 문제를 방지하기 위한 조치입니다. 예를 들어 만든 이는 문서 파일의 텍스트 파트를 암호화함으로써 문서의 내용을 보호할 수 있습니다. 그러나 old_widget.gif와 new_reenforced_widget.gif라는 두 개의 이미지가 삽입되어 있다면 텍스트를 보호하더라도 악의적인 사용자는 장치가 업그레이드되었다는 사실을 짐작할 수 있습니다. 따라서 image1과 image2라는 일반적인 이미지 파일 이름을 사용하여 Office Open XML 형식 파일의 보안을 강화하는 것입니다.

  18. 저장하지 않고 SampleWordDocument.docx.zip을 닫습니다.

Office Open XML 형식을 사용하여 만든 문서를 수동으로 편집

Office Open XML 형식의 장점은 매우 다양합니다. 그 중 특히 유용한 장점은 Office 프로그램이 없어도 Office system 2007 릴리스를 사용하여 작성한 문서에 대한 작업을 수행할 수 있다는 점입니다. 이러한 기능 덕분에 확장 가능한 방식으로 문서를 결합, 액세스, 또는 편집하는 서버 기반 솔루션을 만들 수 있습니다.

다음 단계에서는 Word 2007 문서를 수동으로 편집해 보겠습니다. 여기서 소개하는 예는 이 새로운 파일 형식을 사용하여 수행할 수 있는 작업 중 일부에 지나지 않습니다. 또한 대부분의 경우 사용자는 이와 같이 문서를 수동으로 편집할 필요가 없습니다. 그러나 개발자에게는 솔루션을 설계하거나 응용 프로그램의 프로토타입을 만들 때 코드를 작성하지 않고도 Office system 2007 릴리스를 사용하여 작성한 문서를 탐색할 수 있는 기능이 매우 유용합니다. 앞에서 살펴보았듯이 문서의 컨테이너 파일에 액세스한 후에는 손쉽게 개별 파트를 탐색할 수 있으며 파트를 편집, 변경 또는 추가할 수도 있습니다. 다음 단계에서는 Word 2007 문서의 파트 중 하나에서 XML을 수정하여 문서를 편집해 보겠습니다. 구체적으로 말하면 문서의 설명을 변경하고 문서 속성을 업데이트해 봅니다.

XML을 사용하여 Office Open XML 형식 문서를 수정하려면

  1. Word 2007 에서 SampleWordDocument.docx 문서를 엽니다 .

    참고 참고:

    파일 이름에서 .zip 확장명을 아직 제거하지 않았으면 이를 제거해야 합니다.

  2. Microsoft Office 단추클릭하고 준비가리킨다음 속성클릭합니다. 만든 이, 제목, 주제 설명 항목을살펴본다음문서를닫습니다.

  3. Windows 탐색기를열고 SampleWordDocument.docx문서를찾습니다.

  4. 운영 체제에 해당하는 단계 에 따라 문서 파일의 압축을 풉니다.

    Word 2007 문서의 검토자 설명은 comments.xml 이라는 고유 파트에 저장됩니다 . 즉, 문서의 본문과 분리되어 있으므로 손쉽게 파트를 찾아 수정할 수 있습니다.

  5. comments.xml 파트를 압축 파일에서 Windows 바탕 화면으로 끌어 놓습니다.

  6. comments.xml 파트를 마우스 오른쪽 단추로 클릭하고 연결 프로그램 을 가리킨 다음 메모장과 같은 텍스트 또는 XML 편집기를 클릭합니다 .

  7. 다음 텍스트를 찾습니다.

    <w:t>A study of the bald eagle</w:t>
  8. <w:t> 요소의 텍스트를 바꾸거나 편집합니다 . 예를 들어 다음과 같이 변경합니다.

    <w:t>A detailed study of the bald eagle</w:t>
  9. 파일을 저장하고 닫습니다.

  10. Windows 바탕 화면의 comments.xml 파트를 압축 파일의 word 폴더로끌어놓습니다.

  11. 파일 바꾸기 확인 경고 메시지가 나타나면 예클릭합니다.

    다음으로 문서 속성을 변경하고 변경 결과를 확인합니다 . 문서 속성은 간단하게 액세스하고 편집할 수 있도록 압축 루트 폴더의 하위 폴더에 저장됩니다.

  12. docProps 폴더를 두 번 클릭합니다.

  13. 압축 파일의 core.xml 파트를 Windows 바탕 화면으로 끌어 놓습니다.

  14. 텍스트 편집기에서 core.xml을 엽니다.

  15. 다음 텍스트를 찾습니다.

    <dc:creator>Nancy Davolio</dc:creator>
  16. <dc:Creator> 요소의 텍스트를 바꾸거나 편집합니다 . 예를 들어 텍스트를 자신의 이름으로 바꿉니다.

  17. 파일을 저장하고 닫은 다음 파트를 압축 파일의 docProps 폴더로 다시 끌어 놓습니다.

  18. 파일 바꾸기 확인 경고 메시지가 나타나면 클릭합니다.

  19. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 아이콘을 클릭하여 문서 컨테이너로 이동합니다.

  20. 파일 이름에서 .zip 확장명을 제거하고 Word 2007 에서 파일을 엽니다 .

  21. Microsoft Office 단추 를 클릭하고 준비 를 가리킨 다음 속성을 클릭합니다.

  22. 설명 텍스트와 만든 이 속성이 변경된 것을 알 수 있습니다.

이전 단계에서는 문서 내의 기존 XML 파트를 편집하여 문서를 수정했습니다. 새로운 파일 형식을 사용하면 전체 문서 파트를 다른 파트로 바꾸어 문서의 내용, 형식 또는 속성을 변경할 수도 있습니다. 따라서 여러 가지 상황에서 기존 문서 파트를 사용하여 개별 문서 또는 전체 문서 라이브러리를 업데이트할 수 있습니다.

기존 파트를 사용하여 문서를 수정하는 한 가지 예로, 문서에 사용되는 스타일을 변경할 수 있습니다. 이 방법은 여러 가지 모양의 문서를 관리하면서 문서의 실제 버전은 하나만 유지하려는 경우 유용합니다. styles.xml 파트만 바꾸면 문서에 사용되는 모든 스타일을 간단히 변경할 수 있습니다.

이 시나리오에서는 모든 문서에 대한 스타일 파트 모음을 컴파일한 다음 사용자가 여러 가지 스타일을 자동으로 선택하도록 하는 프로그램을 만들 수 있습니다. 내부적으로 프로그램은 구성된 파트 중 하나를 다른 파트로 바꾸는 역할만 합니다. 다음 단계에서는 이러한 프로세스를 수동으로 수행해 보겠습니다.

기존 파트를 교체하여 Office Open XML 형식 문서를 수정하려면

  1. SampleWordDocument.docx 의 복사본을 만들어 이름을 AnotherSampleWordDocument.docx 로 지정합니다.

  2. Word 2007 에서 AnotherSampleWordDocument.docx 를 엽니다.

  3. 홈 탭에서 스타일 변경을 클릭하고 스타일 모음을 가리킨 다음 꾸밈형을클릭합니다.

    그림 2 와 유사한 문서가 만들어집니다.

    그림 2. 꾸밈형 스타일로 서식이 지정된 문서

  4. 문서를 저장하고 닫습니다.

  5. 운영 체제에 해당하는 단계에 따라 AnotherSampleWordDocument.docx 문서 파일의 압축을 풉니다.

  6. word 폴더를 두 번 클릭한 다음 styles.xml 파트를 Windows 바탕 화면으로 끌어 놓습니다. 이 파트는 앞서 만든 첫 번째 문서를 업데이트하는 데 사용됩니다.

  7. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 아이콘을 클릭하여 문서 컨테이너로 이동합니다.

  8. 이제 Word 2007에서 SampleWordDocument.docx 문서를 열고 문서 본문의 스타일을 살펴봅니다.

  9. 문서를 닫습니다.

  10. 운영 체제에 해당하는 단계에 따라 SampleWordDocument.docx 문서 파일의 압축을 풉니다.

  11. word 폴더를 두 번 클릭하여 연 다음 styles.xml 파트를 Windows 바탕 화면에서 word 폴더로 끌어 원본 파일을 이 파일로 바꿉니다.

  12. 파일 바꾸기 확인 경고 메시지가 나타나면 를 클릭합니다.

  13. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 아이콘을 클릭하여 SampleWordDocument.docx 파일의 문서 컨테이너로 이동합니다.

  14. 파일 이름에서 .zip 확장명을 제거하고 Word 2007에서 파일을 엽니다.

    문서의 스타일이 AnotherSampleWordDocument.docx의 스타일로 바뀌었음을 확인할 수 있습니다.

    AnotherSampleWordDocument.docx.zip 파일 이름에서 .zip 확장명을 아직 제거하지 않았으면 이를 제거합니다.

이러한 시나리오의 다른 예로는 특정 Word 2007 문서의 머리글 및 바닥글 문서 파트를 사용하여 하나 이상의 다른 Word 2007 문서에서 동일한 속성을 손쉽게 복제하는 경우를 들 수 있습니다. 머리글 및 바닥글 파트는 수동으로 변경할 수 있습니다. 자세한 방법은 이 문서의 뒷부분에서 설명합니다. 물론 이 프로세스도 코드를 사용하여 자동화할 수 있습니다. 이러한 기능은 특히 문서별로 일일이 머리글 및 바닥글을 관리할 필요 없이 표준화된 문서 머리글 및 바닥글을 사용하는 조직에서 유용하게 사용됩니다. 또한 머리글 및 바닥글 형식이 변경되었을 때 간단하게 머리글 및 바닥글을 바꿀 수 있습니다.

다음 단계에서는 SampleWordDocument.docx에 간단한 머리글을 추가해 보겠습니다. 그리고 추가한 머리글을 AnotherSampleWordDocument.docx 문서의 다른 머리글로 업데이트해 봅니다.

Office Open XML 형식 문서의 머리글을 업데이트하려면

  1. Word 2007에서 SampleWordDocument.docx를 엽니다.

  2. 삽입 탭에서 머리글 단추의 드롭다운 화살표를 클릭한 다음 알파벳 기본 제공 머리글을 선택합니다. 문서의 제목과 함께 머리글이 추가됩니다.

    그림 3과 유사한 문서가 만들어집니다.

    그림 3. 알파벳 머리글이 추가된 샘플 문서

  3. 파일을 저장하고 닫습니다.

  4. Word 2007에서 AnotherSampleWordDocument.docx를 엽니다.

  5. 삽입 탭에서 머리글 단추의 드롭다운 화살표를 클릭한 다음 연간 기본 제공 머리글을 선택합니다. 문서의 제목 및 연도를 표시할 자리와 함께 머리글이 추가됩니다.

  6. 그림 4와 유사한 문서가 만들어집니다.

    그림 4. 연간 머리글이 추가된 샘플 문서

  7. 파일을 저장하고 닫습니다.

  8. 운영 체제에 해당하는 단계에 따라 AnotherSampleWordDocument.docx 문서 파일의 압축을 풉니다.

  9. word 폴더를 두 번 클릭하여 연 다음 header1.xml 파일을 Windows 바탕 화면으로 끌어 놓습니다.

  10. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 아이콘을 클릭하여 문서 컨테이너로 이동합니다.

  11. AnotherSampleWordDocument.docx.zip 파일 이름에서 .zip 파일 확장명을 제거합니다.

  12. 운영 체제에 해당하는 단계에 따라 SampleWordDocument.docx 문서 파일의 압축을 풉니다.

  13. word 폴더를 두 번 클릭하여 연 다음 header1.xml 파일을 Windows 바탕 화면에서 word 폴더로 끌어 놓습니다.

  14. 파일 바꾸기 확인 경고 메시지가 나타나면 를 클릭합니다.

  15. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 아이콘을 클릭하여 문서 컨테이너로 이동합니다.

  16. SampleWordDocument.docx.zip 파일 이름에서 .zip 확장명을 제거하고 Word 2007에서 파일을 엽니다.

    새 머리글이 추가되어 있습니다.

문서에 이미지 파일이나 Microsoft VBA(Visual Basic for Applications) 프로젝트와 같은 이진 파트가 포함되어 있을 수도 있습니다. 이러한 이진 파트도 XML 파트와 마찬가지로 손쉽게 액세스할 수 있습니다. 이진 파트를 바꾸는 기능은 여러 가지 흥미로운 가능성을 제공합니다. 예를 들어 이진 파트를 바꿈으로써 Microsoft Office Visio 다이어그램과 같은 전체 OLE 개체를 바꿀 수 있습니다. 이러한 작업을 수동으로 수행한다면 별로 유용하지 않겠지만 이미지를 서버에서 자동으로 업데이트해야 하는 경우에는 이야기가 다릅니다. 이러한 자동 업데이트를 수행하는 도구는 비교적 간단히 작성할 수 있습니다. 다음 단계에서는 AnotherSampleWordDocument.docx 문서의 이미지 이진 파일을 다른 이미지로 바꾸어 보겠습니다.

Office Open XML 형식 문서의 이진 파트를 바꾸려면

  1. 운영 체제에 해당하는 단계에 따라 SampleWordDocument.docx 문서 파일의 압축을 풉니다.

  2. word 폴더와 media 폴더를 차례로 두 번 클릭하여 Eagle1.gif 이미지 파일을 찾습니다.

  3. Eagle1.gif를 마우스 오른쪽 단추로 클릭한 다음 미리 보기를 클릭합니다. 이 이미지는 문서에 현재 표시되는 이미지입니다.

  4. 다운로드 파일에서 Eagle2.gif 이미지를 찾아 Windows 바탕 화면에 복사합니다. 다른 이미지 파일을 사용해도 됩니다.

  5. Windows 바탕 화면에서 Eagle2.gif 이미지를 마우스 오른쪽 단추로 클릭한 다음 미리 보기를 클릭합니다. 이 이미지가 현재 이미지를 대체할 이미지입니다.

  6. 미리 보기 창을 닫고 Eagle2.gif를 마우스 오른쪽 단추로 클릭한 후 이름 바꾸기를 클릭한 다음 파일 이름을 Eagle1.gif로 변경합니다.

  7. 이름을 바꾼 Eagle1.gif 파일을 Windows 바탕 화면에서 media 폴더로 끌어 놓습니다.

  8. 파일 바꾸기 확인 경고 메시지가 나타나면 를 클릭합니다.

  9. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 단추를 클릭하여 문서 컨테이너로 이동합니다.

  10. 파일 이름에서 .zip 확장명을 제거하고 Word 2007에서 파일을 엽니다. 이미지가 업데이트되었음을 알 수 있습니다.

Word 2007 문서의 document.xml 파트와 같은 일부 파트는 Microsoft Office system 문서의 필수 파트로, 파일이 정상적으로 작동하기 위해 반드시 필요합니다. 그러나 상당수의 파트를 선택적으로 사용할 수 있으며 이러한 파트는 문서에 해당 기능이 사용되는 경우에만 존재합니다. 즉, 해당 기능이 더 이상 필요하지 않으면 해당 파트 및 연결된 관계를 간단히 제거할 수 있습니다. 프로젝트 코드가 포함된 2007 Office 문서를 "매크로 사용" 문서라고 하며, 이러한 문서는 Word 2007에서는 .docm, Excel 2007에서는 .xlsm, PowerPoint 2007에서는 .pptm 확장명을 가집니다. 이러한 매크로 사용 문서의 경우 "매크로 제외" 문서와는 달리 파트에 코드가 저장됩니다. 여기에 사용되는 파트의 형식은 문서의 코드 형식에 따라 다릅니다. 예를 들어 VBA 코드가 포함된 매크로 사용 문서의 데이터는 vbaProject.bin 이진 파트에 저장됩니다.

다른 프로젝트 형식으로는 Excel 4.0 스타일 매크로(XML 매크로)를 사용하는 Excel 2007 통합 문서, 명령 단추가 포함된 PowerPoint 2007 프레젠테이션 등이 있습니다. 이러한 기능은 각기 격리된 고유 파트에 저장되므로 손쉽게 식별하고 제거할 수 있습니다.

다음 단계에서는 간단한 매크로 사용 문서를 만들고 기능을 살펴봅니다. 그런 다음 문서에서 vbaProject.bin 파트 및 이 파트와 연결된 관계를 제거하고 결과를 확인합니다. 파일 메뉴에서 다른이름으로저장을 클릭하고 파일을 매크로 제외 파일(.docx, .pptx 또는 .xlsx)로 저장하는 방법으로도 매크로 사용 파일의 프로젝트 파트를 제거할 수 있습니다. 그러나 이 경우 2007 Office system 응용 프로그램에서 문서를 열어야 합니다. 다음 절차의 단계를 사용하면 Office 응용 프로그램을 사용하지 않고도 프로젝트를 제거할 수 있습니다.

Office Open XML 형식 문서에서 VBA 프로젝트를 제거하려면

  1. Word 2007에서 SampleWordDocument.docx를 엽니다.

  2. 개발 도구 탭의 코드 그룹에서 Visual Basic을 클릭하거나, ALT+F11을 눌러 Visual Basic Editor를 엽니다.

    참고 참고:

    개발 도구 탭이 표시되지 않는 경우 Microsoft Office 단추를 클릭하고 Word 옵션을 클릭한 다음 자주 사용하는 메뉴 탭에서 리본 메뉴에 개발 도구 탭 표시 옵션을 선택하여 간단하게 해당 탭을 표시할 수 있습니다.

  3. Visual Basic Editor 코드창에다음문을입력하거나붙여넣습니다.

    Sub SampleCode()
       Msgbox("Hello World")
    End Sub
    참고 참고:
    코드 창이 표시되지 않는 경우 보기 메뉴에서 코드를 클릭하면 표시됩니다.
  4. 실행 메뉴에서 Run Sub/UserForm(하위/사용자 폼 실행)을 클릭하거나, F5 키를 눌러 프로시저를 실행합니다.

  5. 확인을 클릭하여 메시지 상자를 닫은 다음 Visual Basic Editor를 닫습니다.

    그 다음 문서를 매크로 사용 문서로 저장합니다.

  6. Microsoft Office 단추를 클릭하고 다른 이름으로 저장을 가리킨 다음 Word 문서를 클릭합니다.

  7. 파일 형식 드롭다운 상자에서 Word 매크로 사용 문서 (.docm)를 선택한 다음 저장을 클릭합니다. 문서를 닫습니다.

  8. 운영 체제에 해당하는 단계에 따라 SampleWordDocument.docm 문서 파일의 압축을 풉니다.

  9. word 폴더와 _rels 폴더를 차례로 두 번 클릭합니다.

  10. document.xml.rels를 마우스 오른쪽 단추로 클릭하고 연결 프로그램을 클릭한 다음 메모장과 같은 텍스트 편집기를 선택합니다.

    참고 참고:

    파일이 읽기 전용으로 설정되어 있을 수도 있습니다. 이 경우 파일을 닫고 파일 이름을 마우스 오른쪽 단추로 클릭하고 속성을 클릭한 다음 읽기 전용 특성 확인란의 선택을 취소한 후 파일을 다시 여십시오.

  11. 다음 XML 태그를 찾아 삭제합니다.

    <Relationship Id="rId1" Type="http://schemas.microsoft.com/office/2006/relationships/vbaProject"
    Target="vbaProject.bin"/>
  12. 파일을 저장하고 닫습니다.

  13. document.xml.rels를 마우스 오른쪽 단추로 클릭한 다음 복사를 클릭합니다.

  14. SampleWordDocument.docm.zip 파일을 다시 찾아 엽니다.

  15. word 폴더를 두 번 클릭합니다.

  16. vbaProject.bin 파일을 마우스 오른쪽 단추로 클릭하고 삭제를 클릭합니다. 삭제 확인 메시지가 나타나면 를 클릭합니다.

  17. _rels 폴더를 두 번 클릭합니다.

  18. 마우스 오른쪽 단추를 클릭한 다음 붙여넣기를 클릭합니다.

  19. 파일 바꾸기 확인 경고 메시지(Windows Vista의 경우 복사하는 파일로 대상 파일 덮어쓰기 경고 메시지)가 나타나면 를 클릭합니다.

  20. .zip 파일을 찾을 때까지 도구 모음의 뒤로 화살표나 위로 단추를 클릭하여 문서 컨테이너로 이동합니다.

  21. SampleWordDocument.docm 폴더를 마우스 오른쪽 단추로 클릭한 다음 삭제를 클릭하여 삭제합니다. 확인 대화 상자가 나타나면 를 클릭합니다.

  22. SampleWordDocument.docm.zip 파일 이름에서 .zip 확장명을 제거합니다. 이름 바꾸기 경고 대화 상자가 나타나면 를 클릭하고 Word 2007에서 파일을 엽니다.

  23. ALT+F11을 눌러 VBA 프로젝트를 표시합니다. 서브루틴이 없어진 것을 알 수 있습니다.

    참고 참고:

    파일 확장명을 .docm에서 docx로 변경하는 방법으로도 비슷한 결과를 얻을 수 있습니다. 매크로 제외 확장명을 사용하는 파일에서는 코드가 실행되지 않습니다.

프로그래밍 방식으로 Office Open XML 형식 문서 조작

Office Open XML 형식의 중요한 이점 중 하나는 바로 사용자 지정 솔루션을 자유롭게 만들 수 있다는 점입니다. 즉, XML 및 ZIP 파일을 지원하는 거의 모든 플랫폼에서 도구를 사용하여 문서 내용에 액세스하고 이를 변경할 수 있습니다. 예를 들어 Microsoft Visual Studio에서 관리 코드(Microsoft Visual Basic .NET 또는 C#)를 사용하여 서버측 응용 프로그램을 작성하여 2007 Office system 문서를 프로그래밍 방식으로 생성할 수 있습니다. 이 경우 Microsoft .NET Framework의 강력한 XML 클래스 라이브러리를 사용하여 Office Open XML 형식 파일의 모든 XML 문서 파트에 대해 작업을 수행할 수 있습니다.

문서 파트 및 관계를 조작하는 강력한 방법 중 하나는 Microsoft Windows SDK(소프트웨어 개발 키트)에 포함된 System.IO.Packaging 네임스페이스를 사용하는 것입니다. System.IO.Packaging 네임스페이스에 대해서는 이 문서의 뒷부분에서 자세히 설명합니다.

참고 참고:

Microsoft 다운로드 센터에서 Microsoft Pre-Release Software WinFX Runtime Components—Beta2 (영문)를 다운로드할 수 있습니다.

다음 단계에서는 Word 2007을 사용하지 않고 문서의 서식 스타일을 프로그래밍 방식으로 변경하는 콘솔 응용 프로그램을 개발해 보겠습니다. 이 프로젝트에서는 문서의 스타일 파트를 다른 Word 2007 문서에서 추출된 스타일 파트로 바꾸는 방법을 통해 이러한 작업을 수행합니다. 결과적으로 다른 문서에서 가져온 스타일의 "모양과 느낌"이 대상 문서에 적용됩니다.

참고 참고:

이와는 별개의 사항이지만 Office Open XML 형식 파일 작업에 사용할 수 있는 몇 가지 코드 예제가 다운로드 파일로 제공됩니다. 구성된 코드 예제를 다운로드한 후에는 Microsoft Visual Studio 2005의 도구 메뉴에서 코드 조각 관리자 기능을 사용하여 프로젝트에 해당 코드를 삽입할 수 있습니다. 2007 Office System Sample: Open XML File Format Code Snippets for Visual Studio 2005 (영문)를 다운로드할 수 있습니다.

다음 단계를 수행하여 문서의 서식을 변경합니다.

Office Open XML 형식 문서의 서식 스타일을 변경하려면

  1. 먼저 업데이트할 문서 및 styles.xml 파트를 저장할 폴더와 하위 폴더를 만듭니다. 이 예제에서는 WordOpenXMLFormatSample이라는 이름으로 폴더를 만듭니다. 이 폴더에 NewStylePart라는 하위 폴더를 추가합니다.

  2. SampleWordDocument.docxWordOpenXMLFormatSample 폴더에 복사합니다.

  3. AnotherSampleWordDocument.docx 파일을 찾아 파일 이름 끝에 .zip 파일 확장명을 추가한 다음 파일을 엽니다.

  4. word 폴더에서 styles.xml 파트를 찾아 마우스 오른쪽 단추로 클릭한 다음 복사를 클릭합니다.

  5. WordOpenXMLFormatSample 폴더, NewStylePart 하위 폴더로 차례로 이동합니다. NewStylePart 하위 폴더를 마우스 오른쪽 단추로 클릭한 다음 붙여넣기를 클릭합니다. 이제 폴더에 기본 스타일 파트가 포함된 Word 2007 문서가 추가되었고 하위 폴더에는 "꾸밈형" 스타일이 적용된 문서에서 가져온 styles.xml 파트가 추가되었습니다.

  6. Visual Studio 2005를 시작합니다.

  7. 파일 메뉴에서 새 프로젝트를 클릭합니다.

  8. 새 프로젝트 대화 상자의 왼쪽에 있는 프로젝트 형식 트리 뷰에서 다른 언어를 클릭하고 Visual C#을 선택한 다음 오른쪽의 템플릿 목록 보기에서 콘솔 응용 프로그램을 선택합니다.

  9. 이름 입력란에 이 프로젝트의 이름을 StyleSwapper로 입력하고 확인을 클릭합니다. 프로젝트에 모든 파일이 생성되고 프로젝트와 이름이 동일한 디렉터리(drive\Visual Studio projects\StyleSwapper)에 해당 파일이 저장됩니다.

    정확한 프로젝트 저장 위치를 확인하거나 위치를 변경하려면 다음을 수행합니다.

    1. 도구 메뉴에서 옵션을 클릭합니다.

    2. 옵션 대화 상자에서 프로젝트 및 솔루션 트리 뷰를 클릭한 다음 일반 탭을 클릭합니다.

      이 화면에서 프로젝트 및 템플릿 저장 위치를 지정하고 다른 옵션을 설정할 수 있습니다.

    3. 프로젝트 위치를 확인한 다음 확인을 클릭하여 창을 닫습니다.

    프로젝트를 만들면 Properties, References, Program.cs라는 세 가지 컨테이너가 있는 새 응용 프로그램이 자동으로 만들어집니다. 이러한 컨테이너는 솔루션 탐색기에서 볼 수 있습니다. 또한 대부분의 코드를 추가할 수 있는 빈 클래스도 생성됩니다.

    참고 참고:

    Microsoft .NET Framework 3.0(이전 WinFX)에는 Visual Studio 2005에서 2007 Microsoft Office system 문서를 프로그래밍 방식으로 조작하는 작업을 단순화하는 System.IO.Packaging 네임스페이스가 포함되어 있습니다. System.IO.Packaging 네임스페이스를 사용하면 문서 파트를 추가하고 내용을 검색 및 업데이트하고 새 관계를 만들어 새로운 문서를 작성하거나 기존 문서를 변경할 수 있습니다. 이 네임스페이스의 주요 멤버로는 Package 개체, PackagePart 개체, PackageRelationship 개체 등이 있습니다. System.IO.Packaging 네임스페이스에 대한 자세한 내용은 System.IO.Packaging Namespace (영문)를 참조하십시오.

    다음으로 프로젝트의 참조를 .NET Framework 3.0 에추가합니다.

  10. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

  11. 찾아보기 탭의 찾는 위치 입력란에 WindowsBase.dll을 입력합니다 . 이 문서가 게시되는 현 시점을 기준으로 해당 파일은 drive\Program Files\Reference Assemblies\Microsoft\WinFx\v3.0 에 있습니다.

  12. WindowsBase.dll 파일을 선택한 다음 확인을 클릭합니다 . 솔루션 탐색기에서 참조를 클릭하여 참조가 만들어졌는지 확인합니다.

  13. 솔루션 탐색기에서 Program.cs를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 선택합니다.

  14. 코드 창의 네임스페이스 문 위쪽에 다음 코드를 입력합니다.

    using System.IO; 
    using System.IO.Packaging;

    2007 Office system 문서의 내용을 사용하여 작업하려면 해당 문서를 열어야 합니다 . System.IO.Packaging 네임스페이스에는 문서와 동일한 Package라는 최상위 멤버가 있습니다 . Package 개체를 연 후에는 구조를 살펴보고 파트를 조작할 수있습니다 . 패키지는 읽기 전용, 쓰기 전용 또는 읽기 / 쓰기용으로 열 수 있습니다.

  15. Class Program 문의 여는 괄호 ({) 뒤에 다음 코드 줄을 추가합니다 . 이 코드 줄은 Word 문서와 해당 문서에 삽입할 style.xml 파트의 위치가 포함된 변수를 설정합니다 . 다음 문은 WordOpenXMLFormatSample 폴더가 C 드라이브에 만들어진 것으로 간주하여 작성되었습니다.

    private static String stylePath = @"C:\WordOpenXMLFormatSample\NewStylePart\styles.xml";
    private static String packagePath = @"C:\WordOpenXMLFormatSample\SampleWordDocument.docx.zip";

    참고 참고:

    @ 기호로 시작하는 문자열을 "약어" 문자열 리터럴이라고 합니다. 이 문자열은 파일 검색 시에 이와 정확히 일치하는 문자열을 사용하도록 프로그램(String 생성자)에 지시하는 역할을 합니다.

  16. Main 프로시저는 프로젝트를 실행할 때 자동으로 실행됩니다 . Main의 여는 괄호 ({) 와 닫는 괄호 (}) 사이에 다음 줄을 입력합니다.

    SwapStylePart(packagePath, stylePath);

    이 줄은 다음에 추가할 SwapStylePart 프로시저를 호출하며 Word 2007 문서와 styles.xml 파트에 경로를 전달합니다.

  17. 같은 줄에서 Main의 닫는 괄호 (}) 바로 다음에 다음 프로시저를 추가합니다.

    static void SwapStylePart(String packagePath, String stylePath)
    {
    
    }

    다음 단계에서는 Read/Write 액세스를 사용하여 Word 문서를 Package 개체로 여는 코드를 SwapStylePart 루틴에 추가합니다 . 여기에는 using 문이 사용됩니다 . 이 문은 Package 개체를 자동으로 처리하고 문의 실행이 완료된 후에 사용한 메모리를 해제하는 용도로 사용됩니다.

  18. SwapStylePart 루틴에 다음 코드를 입력합니다.

    using (Package package = Package.Open(packagePath, FileMode.Open,
      FileAccess.ReadWrite))
    {
    
    }

    2007 Office system 문서 패키지의 파트를 사용하려면 먼저 해당 파트를 찾아야 합니다 . 각 파트별로 고유한 URI 을 사용하여 특정 문서 파트를 참조할 수 있습니다 .

  19. using 문의 괄호 사이에 다음 문을 입력합니다.

    // 스타일 문서 파트에 대한 URI를 설정합니다(/word/styles.xml). 
    Uri uriPartTarget = new Uri("/word/styles.xml", UriKind.Relative);

    이 기사를 작성한 시점을 기준으로 System.IO.Packaging 네임스페이스는 기존 파트를 복사하여 덮어쓰거나 바꾸는 것을 허용하지 않습니다 . 따라서 파트를 바꾸려면 먼저 기존 파트를 제거한 다음 동일한 URI 를 사용하여 파트를 새로 만들어야 합니다 . 파트를 삭제하더라도 파트의 관계에는 영향을 미치지 않습니다 . 즉 모든 관계는 그대로 유지되며 새 파트에 적용됩니다.

  20. 이전 단계에서 추가한 줄 바로 뒤에 다음 코드를 입력합니다.

    // 기존 문서 파트를 삭제합니다(/word/styles.xml). 
    package.DeletePart(uriPartTarget);

    패키지에 새 문서 파트를 추가하는 경우에도 URI 를 사용해야 합니다 . 이 예에서는 동일한 URI 를 재사용하여 스타일 문서 파트를 다시 만듭니다 . 패키지를 만드는 경우에는 파트의 콘텐츠 형식 매개 변수가 추가 필요합니다 . 이미 사용되고 있는 현재 콘텐츠 형식은 문서 컨테이너의 [Content_Types].xml 파트에 있습니다.

  21. 이전 단계에서 추가한 줄 뒤에 다음 코드를 입력합니다.

    // 새 스타일 문서 파트를 다시 만듭니다(/word/styles.xml).
    PackagePart packagePartReplacement = package.CreatePart(uriPartTarget, "application/vnd.openxmlformats-
    officedocument.wordprocessingml.styles+xml");

    새 스타일 파트를 만들었으므로 이제 원본 styles.xml 파트에서 새로 만든 파트로 XML 을 복사하기만 하면 됩니다 . System.IO.Packaging 네임스페이스는 기본적으로 XML 문서의 XML 을 처리하지 않으므로 .NET Framework 에서는 스트림을 사용하여 콘텐츠를 복사해야 합니다 .

    다음 단계에서는 외부 스타일 파트를 스트림으로 열어 새 스타일 문서 파트에 쓰는 코드를 추가합니다 . 스트림을 복사하려면 CopyStream 루틴을 호출하고 원본 및 대상 스트림을 전달합니다.

  22. 이전 단계에서 추가한 줄 뒤에 다음 코드를 입력합니다.

    using (FileStream fileStream = new FileStream(stylePath, FileMode.Open,
        FileAccess.Read))
    {
       // 스트림을 사용하여 새 styles.xml을 로드합니다.
       CopyStream(fileStream, packagePartReplacement.GetStream());
    }
  23. 다음으로 SwapStylePart 루틴의 닫는 괄호 뒤에 CopyStream 루틴을 추가합니다.

    private static void CopyStream(Stream source, Stream target)
    {
       const int bufSize = 0x1000;
       // const int bufSize = 1024;
       byte[] buf = new byte[bufSize];
       int bytesRead = 0;
       while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
       {
          target.Write(buf, 0, (int)bytesRead);
       }
       source.Close();
       target.Close();
    }

    이 프로시저는 원본 styles.xml 파트의 데이터 스트림을 읽을 때 해당 스트림을 저장할 메모리 버퍼의 크기 ( 바이트 ) 를 설정합니다 . 그리고 읽을 바이트가 남아 있는 동안 읽은 바이트를 새 styles.xml 파트에 씁니다.

    실행 중인 응용 프로그램을 보려면 다음과 같이 프로젝트를 빌드해야 합니다 .

  24. 빌드 메뉴에서 StyleSwapper 빌드를 클릭합니다

    참고 참고:

    빌드하는 동안 오류가 발생하면 최종 빌드를 실행할지 여부를 묻는 대화 상자가 나타납니다. 이 대화 상자에서 아니요를 클릭하면 오류 목록 창에 오류에 대한 설명이 표시됩니다. 오류 목록이 표시되지 않으면 보기 메뉴에서 오류 목록을 클릭합니다.

    오류가 발생하지 않았다면 이제 코드를 실행할 준비가 된 것입니다 . 그 전에 먼저 현재 문서를 살펴보겠습니다.

  25. Word 2007 에서 SampleWordDocument.docx 를 엽니다.

  26. Word 2007 을 다음 SampleWordDocument.docx 파일 이름 끝에 .zip 확장명을 추가합니다.

  27. F5 키를 누릅니다 . Windows 콘솔이 나타났다가 바로 사라집니다 . 이 코드는 콘솔 응용 프로그램이므로 잠깐 표시되는 Windows 콘솔 외에 다른 사용자 인터페이스는 없습니다.

  28. 파일 이름에서 .zip 확장명을 제거한 다음 Word 2007 에서 파일을 다시 엽니다. Word 2007을 사용하지 않고도 문서의 스타일이 " 꾸밈형 " 스타일로 변경되었음을 알 수 있습니다.

다음 연습에서는 Word 2007을 사용하지 않고 사용자 지정 응용 프로그램을 사용하여 Office Open XML 형식 파일에 대해 대량 작업을 수행하는 방법을 살펴봅니다. 이 연습 과정에서는 폴더와 하위 폴더에서 특정 조건에 해당하는 파일을 검색하는 관리되는 응용 프로그램을 만들어 봅니다. 이 응용 프로그램은 검색된 파일의 문서 파트에서 특정 용어를 조사하여 해당 용어가 포함된 파일을 나열합니다. 이러한 응용 프로그램은 특정 클라이언트의 이름이나 특정 제품 이름이 포함된 문서를 식별하는 데 사용할 수 있습니다. 또한 응용 프로그램에 해당 용어를 다른 용어로 바꾸는 논리를 추가하여 Word 2007을 사용하지 않고도 찾기 및 바꾸기 기능을 구현할 수 있습니다.

Office Open XML 형식 파일 그룹에서 키워드를 검색하려면

  1. Visual Studio 2005 를 시작합니다.

  2. 파일 메뉴에서 새 프로젝트 클릭합니다.

  3. 새 프로젝트 대화 상자의 왼쪽에 있는 프로젝트 형식 트리 뷰에서 Visual C#을 선택합니다 . 그런 다음 Windows 응용 프로그램을 선택하고 프로젝트의 이름을 KeywordSearch로 변경한 다음 확인을 클릭합니다 . 프로젝트에 모든 파일이 자동으로 만들어집니다.

  4. 솔루션 탐색기 에서 Form1.cs 를 마우스 오른쪽 단추로 클릭한 다음 디자이너 보기를 클릭합니다.

  5. Form1.cs [Design] 탭에서 폼에 다음 컨트롤을 추가하고 해당 속성을 설정하여 그림 5 와 유사한 폼을 만듭니다.

    그림 5. KeywordSearch

    KeywordSearch 폼

    2. Office Open XML 형식 파일 키워드 검색 폼의 컨트롤 목록

    형식

    속성

    Label

    텍스트: 검색 디렉터리

    TextBox

    이름: txtPath

    텍스트: C:\WordDocuments
    검색을 시작하는 기본 디렉터리입니다.

    Label

    텍스트: 검색 패턴

    ComboBox

    이름: cboMask

    항목(컬렉션): *.docx
    *.docm

    텍스트: *.docx

    CheckBox

    이름: ckbSubfolders

    텍스트: 하위 폴더 포함

    Label

    텍스트: 검색 용어

    TextBox

    이름: txtTerm

    Button

    이름: btnSearch

    텍스트: 검색

    Button

    이름: btnClose

    텍스트: 닫기

    Label

    텍스트: 결과

    ListBox

    이름: lbxResults

  6. 솔루션 탐색기에서 Form1.cs를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

  7. 코드 창에서 기존 using 문 아래에 다음 문을 추가합니다.

    using System.Xml;
    using System.IO;
    using System.IO.Packaging;

    System.IO.Packaging 네임스페이스를 사용하려면 .NET Framework 3.0 SDK( 이전 WinFX) 에서 사용할 수 있는 WindowsBase.dll 라이브러리에 대한 참조를 추가해야 합니다 .

  8. 프로젝트 메뉴에서 참조 추가 를 클릭합니다.

  9. 찾아보기 탭의 찾는 위치 입력란에 WindowsBase.dll 파일 이름을 입력합니다 . 이 문서가 게시되는 현 시점을 기준으로 해당 파일은 drive\Program Files\Reference Assemblies\Microsoft\WinFx\v3.0 에 있습니다.

  10. 확인을 클릭합니다.

  11. public partial class Form1 : Form 여는 괄호 바로 뒤에 다음 클래스 변수 ( 필드 ) 를 추가합니다.

    FileInfo[] tempfiles;
    List<FileInfo> files = new List<FileInfo>();

    다음으로 검색 단추에 코드를 추가합니다.

  12. Form1.cs [Design] 탭에서 검색 단추를 두 번 클릭하여 이 단추에 대한 Click 이벤트를 추가합니다.

  13. btnSearch_Click 프로시저의 괄호 사이에 다음 코드를 추가합니다.

    Boolean match = false;
    // 사용자가 검색 용어를 추가했는지 확인합니다.
    if (txtTerm.Text == "")
    {
       MessageBox.Show("Don't forget the search term.");
    }
    List<FileInfo> returnedFiles;
    // 시작 디렉터리를 가져옵니다.
    DirectoryInfo dir = new DirectoryInfo(txtPath.Text);
    // 파일 목록을 가져옵니다.
    returnedFiles = GetDirFiles(dir);
    // 파일 목록의 각 파일을 확인합니다.
    foreach (FileInfo file in returnedFiles)
    {
       match = GetDocPart(file);
    }
    if (!match)
    {
       // 일치하는 파일을 찾을 수 없습니다.
       lbxResults.Items.Add("No matches.");
    }

    이 프로시저는 콤보 상자에 표시되는 검색 패턴과 동일한 selectedItem 변수를 설정합니다. 다음으로 현재 디렉터리로 GetFiles 메서드가 호출되어 검색 패턴과 일치하는 파일을 모두 반환합니다. 반환된 파일은 파일 목록에 추가됩니다. 사용자가 하위 폴더 포함 확인란을 선택하면 현재 디렉터리의 각 하위 폴더의 이름을 사용하여 GetDirFiles 프로시저를 재귀적으로 호출함으로써 각 하위 폴더가 검색됩니다. 마지막으로, 호출 프로시저(btnSearch_Click)에 파일 목록이 반환됩니다.

  14. GetDirFiles 프로시저 뒤에 다음 코드를 추가합니다.

    public List<FileInfo> GetDirFiles(DirectoryInfo dir)
    {
       // 현재 디렉터리의 모든 파일을 가져옵니다.
       Object selectedItem = cboMask.SelectedItem;
       tempfiles = dir.GetFiles(selectedItem.ToString());
       // 이 파일을 반환된 파일 목록에 추가합니다.
       foreach (FileInfo file1 in tempfiles)
       {
          files.Add(file1);
       }
       // 요청한 경우 하위 폴더를 검색합니다.
       if (ckbSubfolders.Checked)
       {
          // 현재 디렉터리에 대한 하위 폴더를 가져옵니다.
          DirectoryInfo[] dirs = dir.GetDirectories("*.*");
          foreach (DirectoryInfo directory in dirs)
          {
             GetDirFiles(directory);
          }
        }
        return files;
    }

    이 프로시저는 콤보 상자에 표시되는 검색 패턴과 동일한 selectedItem 변수를 설정합니다. 다음으로 현재 디렉터리로 GetFiles 메서드가 호출되어 검색 패턴과 일치하는 파일을 모두 반환합니다. 반환된 파일은 파일 목록에 추가됩니다. 사용자가 하위 폴더 포함 확인란을 선택하면 현재 디렉터리의 각 하위 폴더의 이름을 사용하여 GetDirFiles 프로시저를 재귀적으로 호출함으로써 각 하위 폴더가 검색됩니다. 마지막으로, 호출 프로시저(btnSearch_Click)에 파일 목록이 반환됩니다.

  15. GetDirFiles 프로시저뒤에다음코드를추가합니다.

    private Boolean GetDocPart(FileInfo file)
    {
       // 입력 파일의 시작 부분을 가져옵니다.
       Boolean fileFound = false;
       const String documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
       const String dcPropertiesSchema = "http://purl.org/dc/elements/1.1/";
       // 읽기 액세스로 패키지를 엽니다.
       using (Package myPackage = Package.Open(file.DirectoryName + "\\" + file.Name, FileMode.Open, FileAccess.Read))
       {
          // 주 문서 파트(document.xml)를 가져옵니다.
          foreach (PackageRelationship relationship in myPackage.GetRelationshipsByType(documentRelationshipType))
          {
             //  패키지에는 문서 파트가 하나만 있습니다. 
             Uri documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
             PackagePart documentPart = myPackage.GetPart(documentUri);
             NameTable nt = new NameTable();
             XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
             nsmgr.AddNamespace("w", dcPropertiesSchema);
             XmlDocument doc = new XmlDocument(nt);
             doc.Load(documentPart.GetStream());
             if (doc.OuterXml.IndexOf(txtTerm.Text) >= 1)
             {
                lbxResults.Items.Add(file.DirectoryName + "\\" + file.Name);
                fileFound = true;
             }
             // 문서 파트가 하나만 있으므로 루프를 종료합니다.
             break;
           }
         }
         if (lbxResults.Items.Count >0)
         {
            return true;
         }
         else
         {
            return false;
         }
    }

    이 프로시저는 초기에 변수를 문서 관계 형식의 네임스페이스 및 문서 속성 스키마와 동일하게 설정합니다. 그런 다음 문서가 Package 개체로 열립니다. System.IO.Packaging 네임스페이스를 사용함으로써 다른 파트와의 관계(관계 파트에 정의에 따름), 그리고 파트에 대한 계층 경로가 포함된 URI를 통해 파일 패키지의 다양한 파트에 액세스할 수 있습니다. 그래픽 파트의 URI 예는 \word\media\picture.jpg와 같습니다. 2007 Microsoft Office system 문서에 있는 특정 문서 파트의 URI를 알고 있으면 해당 파트를 직접 액세스하거나 만들거나 삭제할 수 있습니다. GetDocPart 프로시저에서 Package 개체의 GetPart 메서드를 호출하고 파트의 URI를 전달함으로써 document.xml 파트가 반환됩니다.

    XmlDocument 개체는 다른 네임스페이스에 대한 참조가 하나 이상 포함된 XML 파일을 가리킵니다. 이때 XML 파서는 다른 모든 XML 파일과 마찬가지로 네임스페이스 한정자가 접두사로 붙어 있는 이름을 통해 문서의 다양한 요소 및 특성에 액세스합니다.

    참고 참고:

    한정자가 없는 요소 이름은 기본 네임스페이스의 파트가 됩니다.

    이러한 네임스페이스 한정자는 런타임에 네임스페이스 참조로 확인되어야 합니다. 이 작업을 쉽고 간편하게 수행할 수 있도록 .NET Framework에는 다양한 네임스페이스 관리 도구를 제공하는 XmlNamespaceManager 클래스가 포함되어 있습니다. NameTable 클래스는 이러한 도구 중 하나입니다. NameTable 클래스는 특성 및 요소 이름을 내부적으로 저장합니다. 요소 또는 특성 이름이 XML 문서에서 여러 번 검색되는 경우 NameTable에는 한 번만 저장됩니다. 네임스페이스 한정자가 발견되면 이름 테이블의 문자열을 사용하여 확인할 수 있습니다.

    다음 문에서는 XmlDocument 개체가 만들어지고 문서 파트의 내용으로 채워집니다. 그런 다음 개체의 내용에서 검색 용어가 검색됩니다. C# IndexOf 메서드는 Visual Basic InStr 메서드에 해당합니다. 검색 용어가 발견되면 폼의 목록 상자에 디렉터리 및 파일 이름이 추가되고 프로시저에서 True가 반환됩니다. 일치하는 결과가 발견되지 않으면 False가 반환됩니다.

  16. 마지막으로 Form1 디자이너에서 닫기 단추를 두 번 클릭하고 프로시저에 다음 문을 추가합니다.

    Close();

    프로그램을 테스트하려면

  17. C 드라이브 또는 원하는 위치에 WordDocuments라는 폴더를 만듭니다.

  18. SampleWordDocument.docx 문서 및 AnotherSampleWordDocument.docx 문서의 복사본을 WordDocuments 폴더에 붙여 넣습니다.

  19. Word 2007 을 시작하고 새 문서를 만듭니다 .

  20. Eagle이라는 용어가 없는 텍스트를 추가하고 WordDocuments 폴더에 SearchSampleDocument.docx로 문서를 저장합니다.

  21. F5 키를 눌러 프로젝트를 실행합니다.

  22. 폼의 Search Directory( 검색 디렉터리 ) 입력란에 .docx 문서의 위치를 입력합니다.

  23. 검색 용어 입력란에 Eagle을 입력하고 검색 을 클릭합니다 .

    그림 6같이 "Eagle" 이라는 용어가 포함된 두 개의 문서가 폼의 목록 상자에 표시됩니다 . SearchSampleDocument.docx 문서는 표시되지 않습니다.

    그림 6. 키워드 검색 실행 결과

    키워드 검색 실행 결과

  24. 폼을 닫습니다.

이러한 코드만 있으면 Word 2007 없이도 문서를 검색할 수 있습니다. 이 코드에 문서당 검색 용어 발견 횟수를 계산하는 기능, 바꾸기 기능 또는 다른 파트 검색 기능 등을 추가하여 프로그램을 개선할 수 있습니다.

결론

이 문서를 통해 Office Open XML 형식 파일 구조에 익숙해졌을 것입니다. 지금까지 파일 형식을 살펴보고 표준 기반 XML 및 ZIP 기술을 사용하여 2007 Microsoft Office system 문서에 손쉽게 액세스하고 편집하는 방법을 알아보았습니다. 또한 Office Open XML 형식 파일을 수동으로 또는 프로그래밍 방식으로 조작하는 방법도 배웠습니다. 이러한 지식을 바탕으로 여러분의 조직에서 사용할 수 있는 사용자 지정 솔루션을 만들어 보시기 바랍니다.

추가 리소스

자세한 내용은 다음 리소스를 참조하십시오.

© 2009 Microsoft Corporation. All rights reserved. 사용약관 | 상표 | 개인정보취급방침 및 청소년보호정책
Page view tracker