Frank Rice
Microsoft Corporation
2004년 3월
적용 대상:
Microsoft Office Excel 2003
Microsoft Visual Basic 6.0
Microsoft Office Access 2003
요약: 형식이 있는 Excel 통합 문서를 만들기 위해 XML 파일과 XML 스타일시트를 사용하는 방법을 배워 보십시오. 사용자는 ASP(Active Server Pages) 또는 Microsoft Visual Basic을 사용하여 만든 XML 템플릿을 사용하면 편리한 대로 자신의 목적에 가장 잘 부합되는 방식으로 템플릿을 만들 수 있습니다.
목차
서론
XML 정의
XML 스타일시트 정의
XML 파일 변환
XML 평면화
XML 스타일시트의 장점
XML 매핑
XML 스프레드시트(XMLSS) 형식
Excel 솔루션에 XML 통합
MIME 콘텐트 스트리밍 동안에 Excel 통합 문서의 서식 지정
Visual Basic 또는 ASP를 사용하여 통합 문서에 대한 XML 템플릿 생성
ASP를 사용하여 XML 속성의 ADO 레코드 집합을 XML 스프레드시트로 변환
결론
서론
사용자는 Microsoft Office Excel 2003을 사용하여 XML(Extensible Markup Language) 형식의 파일을 열고, 변환하고 저장할 수 있습니다. 본 문서에서는 XML과 XML 스타일시트를 검토하고 Excel 2003에서 이를 사용하는 방법을 살펴봅니다. 주요 용어 및 개념 정의는 물론 ASP(Active Server Pages) 및 Microsoft Visual Basic을 사용한 서식이 지정된 Excel 통합 문서를 만드는 방법과 XSL 변환과 함께 사용될 때 Excel에서 직접 열어 볼 수 있는 서식이 지정된 통합 문서를 생성하는 XML 템플릿을 만드는 방법에 대해서도 설명합니다.
참고 본 문서는 Microsoft 기술 자료에서 여러 문서를 통합 및 업데이트하여 작성되었습니다. 자세한 내용을 보려면 Microsoft 기술 자료에서 "XML"과 "Excel"을 검색하십시오.
XML 정의
XML은 텍스트 데이터를 구분하기 위한 간단한 표준 방식입니다. XML은 이해하기 쉬운 방법으로 추상적인 데이터 구조를 만든 다음 누구나 다른 컴퓨팅 플랫폼에서 다른 언어를 사용하여 공유할 수 있도록 설계된 언어입니다. XML은 쉽게 만들고 이해할 수 있기 때문에 다양한 프로그램에서 사용됩니다. 잘 구성된 올바른 XML은 데이터 구조를 지정하는 일련의 지침을 따르지만, XML 개발자는 데이터 및 이러한 데이터에 존재할 수 있는 다양한 관계를 가장 잘 기술하는 일련의 사용자 지정 태그를 무제한으로 만들어서 사용할 수 있습니다.
HTML(Hypertext Markup Language)과 같이 XML은 일련의 태그(< 및 > 꺽쇠 괄호에 포함된 단어) 및 특성(이름 = "값" 형식)과 함께 텍스트가 구성되는 마크업 언어의 일종입니다. 하지만 HTML의 경우 각 태그와 특성의 의미를 지정하고 화면 표시를 위한 렌더링 방식을 규정하는 것과 달리 XML에서는 데이터 요소를 정의하기 위해서만 태그가 사용됩니다. XML에서는 어떤 태그 이름도 사용할 수 있기 때문에 프로그램마다 데이터와 데이터의 의미가 다르게 해석될 수 있습니다. XML 개발자는 자신의 데이터에 맞게 어떤 태그나 계층도 자유롭게 만들 수 있지만 XML을 제대로 형식을 갖춘 문서로 만들기 위해서는 일련의 규정을 따라야 합니다.
그림 1. XML 문서의 일부(그림을 클릭하면 크게 표시됩니다)
XML 문서를 구성하는 구문은 다음과 같습니다.
- 프롤로그. XML 데이터의 시작을 알리고 문자 인코딩 방식을 기술하고 XML 구문 분석기 및 응용 프로그램에 기타 정보를 제공합니다. 프롤로그는 XML 선언(옵션), 0개 이상의 주석, 처리 지침 및 공백 문자로 구성됩니다.
- XML 선언. 모든 XML 문서는 단일 XML 선언으로 시작됩니다. XML 선언에서는 이 문서가 XML 문서임을 알리고 버전 번호를 제공합니다.
- 주석. 문서의 가독성 향상을 위해 사용되는 선택 요소입니다. 문자 사이에 "--"를 제외한 모든 텍스트를 입력할 수 있습니다.
- 처리 지침. 요소 또는 요소 내용 처리 방법과 같은 지침을 응용 프로그램에 전달합니다.
- 특성. 요소에 추가 정보를 포함하기 위한 다른 방법을 제공합니다. 일반적으로 사용자는 표시할 대부분의 정보를 요소의 컨텍스트 부분에 저장합니다. 그런 다음 특성 부분에는 반드시 표시되어야 하는 항목 외의 다른 여러 요소 속성을 저장합니다.
- 문서 요소(루트 요소). XML 문서의 모든 요소에 대한 상위 요소입니다. 다시 말해 문서의 일부 요소는 루트 요소 외의 다른 요소에 포함될 수 없습니다.
위의 내용은 XML 문서의 구성에 대한 설명입니다. 다음은 제대로 형식을 갖춘 문서를 구성하는 특성에 대한 설명입니다.
- 문서 내의 다른 요소와 이름이 겹치지 않는 고유한 이름의 루트 요소가 하나만 있습니다.
- 요소가 올바르게 중첩되어 있어서 요소 간에 중첩된 태그가 없습니다.
- 모든 요소 태그가 닫혀 있습니다.
- 요소의 시작 태그와 종료 태그의 대소문자를 일관적으로 사용합니다(XML은 대소문자가 구분됩니다).
- 모든 요소 특성이 이중 또는 단일 물음표 안에 들어 있습니다.
- 특수 문자 (예: &, <, >)는 기본 제공 엔터티(&, <, >)로 정의됩니다.
목록 1. 제대로 형식을 갖춘 XML 예제(Dictionary.xml)
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="Dictionary.xsl"?> <Dictionary> <Entries> <Entry> <Word Type="1">Energetic</Word> <Definition>Having, exerting, or displaying energy</Definition> </Entry> <Entry> <Word Type="1">Happy</Word> <Definition>Enjoying, displaying, or characterized by pleasure or joy</Definition> </Entry> <Entry> <Word Type="2">Emotion</Word> <Definition>A complex, strong subjective response</Definition> </Entry> </Entries> </Dictionary>목록 1의 XML은 사전에 있는 항목을 정의합니다. 루트 요소는 <Dictionary>이고 루트에는 <Entries>라는 이름의 자식 요소들이 포함됩니다. <Entries>에는 세 개의 자식 요소가 포함되고 각 자식 요소는 사전에 있는 개별 항목에 대한 데이터를 기술합니다. 또한 각 항목에는 <Word>와 <Definition>의 두 자식 항목이 있습니다. 각 <Word> 요소의 값은 <Word>단어 자체입니다. 요소에는 또한 단어가 형용사(1) 또는 명사(2)인지 나타내는 Type 특성이 있습니다. <Definition> 요소에는 텍스트 값이 있고 특성은 없습니다.
XML 스타일시트 정의
XML 태그는 텍스트 파일 내의 데이터를 기술하지만 XML 자체만으로는 데이터를 사용자에게 나타낼 방법을 지정할 수 없습니다. XML 데이터에 대한 서식 지정 규칙은 일반적으로 XML 스타일시트에 포함됩니다. XML 스타일시트는 사용자에게 데이터를 보여주기 위해 XML 데이터를 변환하는 XSL(Extensible Style Language)을 사용하는 올바른 형식의 XML 문서입니다. 동일한 XML 데이터에 대해 여러 개의 스타일시트를 사용할 수 있습니다. 스타일시트를 사용하면 실제 XML 데이터 구조는 동일하게 유지하면서 데이터를 여러 가지 다른 방식으로 표현할 수 있습니다. 다음 예는 XML 태그를 사용하여 사전 항목의 서식을 지정하는 방법을 보여줍니다.
목록 2. XML 스타일시트(Dictionary.xsl)
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body> <ul> <xsl:for-each select="Dictionary/Entries/Entry"> <li> <B><xsl:value-of select="Word"/></B> <xsl:if test="Word[@Type='1']"><I>adj.</I></xsl:if> <xsl:if test="Word[@Type='2']"><I>n.</I></xsl:if> <BR/> <xsl:value-of select="Definition"/> <BR/><BR/> </li> </xsl:for-each> </ul> </body> </html> </xsl:template> </xsl:stylesheet>목록 2에 표시된 Dictionary.xsl은 Dictionary.xml 예제를 변환하는 데 사용되는 스타일시트입니다. XML 데이터를 변환하면 웹 브라우저에서 볼 수 있도록 데이터를 HTML로 표현할 수 있습니다. XSL은 사전 항목을 알파벳 순서로 글머리 기호 목록으로 정렬하고 사전 항목의 각 구성 요소에 대한 서식을 지정합니다. 브라우저에서 렌더링되어 변환된 XML은 다음과 같이 표시됩니다.
- Emotion<n.> A complex, strong subjective response
- Energetic<adj.> Having, exerting, or displaying energy
- Happy<adj.> Enjoying, displaying, or characterized by pleasure or joy
위 코드를 시험해 보려면 목록 1의 내용을 아무 텍스트 편집기로 복사하여 붙여넣고 파일 이름을 Dictionary.xml로 저장합니다. 그런 다음 목록 2의 XML 스타일시트를 복사하여 붙여넣고 Dictionary.xml과 동일한 폴더에 Dictionary.xsl로 저장합니다. Microsoft Internet Explorer를 시작하고 Dictionary.xml을 엽니다.
XML 파일 변환
Excel은 올바르게 형식을 갖추고 있다면 어떤 XML 파일이라도 열 수 있습니다. 사용자는 파일 메뉴의 열기 명령을 사용하여 XML 파일을 직접 열 수 있습니다. 또한 Workbooks 컬렉션의 Open 메서드나 OpenXML 메서드를 사용하여 프로그래밍 방식을 XML 파일을 열 수도 있습니다. 또는 목록 도구 모음에서 XML 데이터 가져오기 단추를 사용하여 XML 파일을 가져올 수도 있습니다. 마지막으로 데이터 메뉴를 클릭하고 XML을 가리킨 다음 가져오기를 클릭하여 XML 파일을 열 수도 있습니다.
XML 평면화
사용자가 Excel에서 XML을 읽기 전용 통합 문서로 가져오면 Excel은 특수한 평면화(flattening) 알고리즘을 사용하여 데이터를 행과 열로 로드합니다. Excel 워크시트는 행과 열로 구성된 2차원적인 엔터티입니다. XML은 2차원 이상의 데이터로 구성될 수 있기 때문에 Excel에서 XML 데이터를 워크시트의 셀로 로드하도록 XML을 해석하려면 데이터를 평면화하는 기술이 필요합니다.
다음과 같이 동일 데이터를 다른 방식으로 표현하는 두 가지 XML을 살펴보십시오.
목록 3. 자식 요소가 포함된 Customer XML
<?xml version="1.0"?> <Customer> <CustomerID>1234</CustomerID> <FirstName>John</FirstName> <LastName>Doe</LastName> </Customer> <?xml version="1.0"?> <Customer CustomerID="1234" FirstName="John" LastName="Doe"/>목록 4. 특성이 포함된 Customer XML
<?xml version="1.0"?> <Customer CustomerID="1234" FirstName="John" LastName="Doe"/>목록 3의 XML을 Excel로 로드하면 데이터가 셀에 다음과 같이 표시됩니다.
표 1. 목록 3의 XML이 평면화된 결과
| 행 /열 |
A | B | C |
|---|---|---|---|
| 1 | /Customer | ||
| 2 | /Customerid | /FirstName | /LastName |
| 3 | 1234 | John | Doe |
목록 3과 목록 4를 비교하면 Excel은 특성과 자식 요소를 정확히 동일하게 취급한다는 것을 알 수 있습니다. 기존 요소와의 이름 충돌을 방지하기 위해 Excel은 XSL 패턴에 대한 이름 지정 표준과 같이 특성 이름 앞에 @ 기호를 붙입니다. 따라서 목록 4의 XML은 위와 동일한 방식으로 셀에 로드되지만(파일 메뉴의 열기 메뉴 항목에서 사용할 수 있는 읽기 전용 통합 문서로 파일 로드) A2, B2 및 C2 셀에는 각각 "/@CustomerID","/@FirstName" 및 "/@LastName"이 표시됩니다.
목록 3과 목록 4의 Customer.xml 파일은 이해하기 쉽도록 2차원적인 구조를 따릅니다. 하지만 다음에 설명되는 Customer.xml(목록 5)에는 <Order> 수준이 추가되기 때문에 2차원적으로는 쉽게 해석하기 어렵습니다.
목록 5. 루트 요소 아래에 두 개의 수준이 포함된 Customer XML
<?xml version="1.0"?> <Customers> <Customer> <CustomerID>1234</CustomerID> <FirstName>John</FirstName> <LastName>Doe</LastName> <Orders> <Order ProdID="AAA" Amt="10"/> <Order ProdID="BBB" Amt="3"/> </Orders> </Customer> <Customer> <CustomerID>5678</CustomerID> <FirstName>Alice</FirstName> <LastName>Smith</LastName> <Orders> <Order ProdID="AAA" Amt="5"/> </Orders> </Customer> </Customers>목록 5의 XML에는 두 개의 주문 요소가 있는 고객 요소 하나와 하나의 주문 요소가 있는 다른 고객 요소가 있습니다. Excel은 <Orders>와 <Customers>간의 관계를 유지할 수 있는 방식으로 XML을 가져와야 합니다. Excel은 다음과 같이 세 개의 행으로 XML을 가져옵니다.
그림 2. 다차원의 데이터가 표현된 스프레드시트(그림을 클릭하면 크게 표시됩니다)
두 개의 열이 추가로 표시됩니다. #id 열은 <Customer>노드의 행과 연결되고, #agg 열은 "FillDown"을 나타냅니다. #agg 열에서는 상위 수준의 첫 번째 노드의 값이 한 번만 표시되고 남은 행은 생략됩니다.
또한 <Amt>에 대한 열은 실제 XML에서 <ProdID> 다음에 표시되더라도 <ProdID>> 열 앞에 온다는 점에 주의하십시오. 플래트너(flattener)는 요소가 원래 XML 문서에서 표시되는 원래 순서가 아닌 왼쪽에서 오른쪽의 알파벳 순서로 요소를 로드합니다.
XML 스타일시트의 장점
스타일시트를 사용하면 Excel에서 XML 파일을 열 때 상당한 장점을 제공합니다. 스타일시트를 사용하면 데이터를 셀에 보다 효과적으로 배치하고 셀에 대한 서식까지 지정할 수 있습니다. Excel에서 XML 파일을 열 때 해당 파일에 하나 이상의 XML 스타일시트 처리 지침이 포함된 경우 Excel은 변환에 사용할 스타일시트를 선택하라는 메시지를 표시합니다.
다시 목록 5의 Customer.xml을 보십시오. Customer.xml에 처리 지침 (<?xml-stylesheet type="text/xsl" href="Customer.xsl"?>) 을 추가하면 데이터가 표시되는 워크시트의 열을 제어하고 사용자 지정 서식을 적용할 수 있습니다. Customer.xml 예제에 대한 변환으로 다음과 같은 스타일시트 예제를 사용할 수 있습니다.
목록 6. Customer XSL 스타일시트
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <HTML> <HEAD> <STYLE> .HDR { background-color:bisque;font-weight:bold } .CustomerRow { border-top:thin solid black } </STYLE> </HEAD> <BODY> <TABLE> <COLGROUP WIDTH="100" ALIGN="CENTER"></COLGROUP> <COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP> <COLGROUP SPAN="2" WIDTH="80" ALIGN="CENTER"></COLGROUP> <TD CLASS="HDR">Customer ID</TD> <TD CLASS="HDR">Name</TD> <TD CLASS="HDR">Product ID</TD> <TD CLASS="HDR">Amount</TD> <xsl:for-each select="Customers/Customer"> <TR> <TD CLASS = "CustomerRow"> <xsl:value-of select="CustomerID"/> </TD> <TD CLASS = "CustomerRow"> <xsl:value-of select="FirstName"/> <xsl:value-of select="LastName"/> </TD> <TD CLASS = "CustomerRow"> <xsl:value-of select="./Orders/Order/@ProdID"/> </TD> <TD CLASS = "CustomerRow"> <xsl:value-of select="./Orders/Order/@Amt"/> </TD> </TR> <xsl:for-each select="./Orders/Order"> <TR> <TD> </TD><TD> </TD> <TD><xsl:value-of select="@ProdID"/></TD> <TD><xsl:value-of select="@Amt"/></TD> </TR> </xsl:for-each> </xsl:for-each> <TR><TD CLASS="CustomerRow" COLSPAN="4"> </TD></TR> </TABLE> </BODY> </HTML> </xsl:template> </xsl:stylesheet>스타일시트는 XML을 유효한 HTML로 변환합니다. Excel은 유효한 HTML을 원래의 서식으로 변환할 수 있습니다. 이 스타일시트가 적용된 Customer XML을 열면 Excel이 머리글이 각각 Customer ID, Name, Product ID 및 Amount로 지정된 네 개의 테이블로 데이터를 표시합니다. 글꼴 특성, 셀 배경 색상 및 테두리와 같은 셀 서식도 테이블에 표시됩니다. 이러한 내용을 시험해 보려면 목록 5의 XML을 텍스트 편집기로 복사하여 붙여넣고 Customer.xml로 저장합니다. 그런 다음 목록 6의 XML 스타일시트를 복사하여 Customer.xml과 같은 폴더에 Customer.xsl로 저장합니다. Internet Explorer를 시작한 다음 Customer.xml 파일을 엽니다. 그림 3에서 파일의 서식을 확인하십시오.

그림 3. 서식이 지정된 Customer.xml 파일
그런 다음 Customer.xml에서 처리 지침 ( <?xml-stylesheet type="text/xsl" href="Customer.xsl" ? > )을 제거하고 파일을 Internet Explorer에서 다시 여십시오. 그러면 Customer.xml 파일의 서식이 지정된 모습과 서식이 지정되지 않은 모습을 비교하여 볼 수 있습니다(그림 4 참고).

그림 4. 서식이 지정되지 않은 Customer.xml 파일
XML 매핑
참고 다음 기능은 Excel 2003 독립 실행형 프로그램과 Microsoft Office 2003 Professional Edition에서만 사용할 수 있습니다. Microsoft Office 2003 Standard Edition에서는 이 기능을 사용할 수 없습니다.
XML 스프레드시트 스키마에서 XML 파일을 열고 편집하고 저장하는 기능은 Microsoft Excel 2002(Microsoft Office XP에서 사용 가능)에서 소개되었습니다. 이 기능이 더 확장된 Excel 2003에서는 사용자가 Excel 통합 문서에서 XML 데이터의 사용자 정의 맵을 사용하여 임의의 미리 정의된 XML 스키마(*.XSD)에서 모든 XML 데이터를 열고, 편집하고 저장할 수 있습니다.
Excel 2003에서는 XML 스키마를 Excel 통합 문서로 매핑할 수 있습니다. 스키마를 매핑한 다음에는 매핑된 스키마와 호환되는 모든 XML 소스에서 데이터를 가져올 수 있습니다. 또한 파일을 통합 문서에 사용할 수 있습니다. 매핑된 요소와 이후에 가져온 데이터는 Excel 2003의 목록 인터페이스를 사용하여 표시됩니다.
통합 문서에 XML 스키마를 추가하면 Excel은 XML 맵으로 지정되는 개체를 만듭니다. 사용자는 XML 맵을 사용하여 셀이나 범위를 XML 스키마의 요소로 매핑할 수 있습니다. Excel은 또한 사용자가 XML 데이터를 가져오거나 내보낼 때 이러한 맵을 사용하여 매핑된 범위의 내용과 스키마의 요소를 연결합니다. 통합 문서에는 서로 독립적인 여러 XML 맵이 포함될 수 있습니다. 하지만 여러 맵은 동일한 기본 스키마를 참조할 수 있습니다.
Excel은 데이터 구조를 계층적인 형태로 표시합니다. 그런 다음 표시된 데이터에서 여러 요소를 워크시트의 실제 셀로 매핑할 수 있습니다. 스키마에는 데이터가 계층적으로 포함될 수 있으며 사용자가 워크시트에서 추출하거나 워크시트로 가져올 수 있는 데이터의 여러 측면 및 데이터 형식을 포함할 수도 있습니다.
또한 사용자는 매핑된 요소의 모든 데이터가 스키마를 따르고 내보내기가 가능한 경우 매핑된 통합 문서에서 원래 스키마로 다시 XML 데이터를 내보낼 수 있습니다. 매핑되지 않은 스키마의 요소는 내보내지지 않습니다.
XML을 통합 문서로 매핑하는 방법에 대한 자세한 내용은 다음 문서를 참고하십시오.
제대로 형식을 갖추지 않은 XML 파일을 열 경우에는 오류 메시지나 구문 분석 오류가 표시됩니다. 오류 메시지에는 XML이 열리지 않은 이유가 설명되어 있습니다. 오류 메시지 설명에는 또한 변환이 실패하게 된 노드에 대한 세부 정보가 포함될 수도 있습니다. 구문 분석 오류가 발생한 일부 경우에는 오류 메시지 대신 오류가 나열된 대화 상자가 표시될 수도 있습니다. Excel은 스크립트 구문 분석 오류를 로그 파일로 기록합니다. 구문 분석 오류 메시지에는 로그 파일의 위치와 이름이 표시됩니다.
XML 파일을 열면 텍스트 가져오기 마법사가 표시됩니다. XML 파일은 매우 특수한 방식으로 구조화된 일련의 텍스트 파일입니다. Excel에서 사용자가 여는 파일이 일반 텍스트가 아닌 XML로 인식되는 경우 XML 파일의 첫 번째 항목은 최소한 예약어 "xml"과 버전 번호가 포함된 XML 선언이어야 합니다. XML에는 또한 최소한 하나의 요소(루트 요소)가 포함되어야 합니다. 이 경우에는 <MyXML> 요소입니다.
목록 7. XML 문서의 루트 요소
<?xml version="1.0"?> <MyXML> .... </MyXML>XML 스프레드시트(XMLSS) 형식
Excel에서는 통합 문서를 XML로 저장할 수 있습니다. 사용자는 다른 이름으로 저장 대화 상자에서 파일 형식으로 XML 스프레드시트(*.xml)를 선택하여 통합 문서를 XML로 저장할 수 있습니다. Excel은 통합 문서를 XML 스프레드시트(XMLSS) 형식으로 저장합니다.
참고 파일 형식으로 "XML 데이터(*.xml)"를 선택하면 Excel은 스키마로 매핑된 범위에서 XML 데이터만 내보냅니다(이 문서의 XML 매핑 단원 참고). 통합 문서에 매핑된 스키마가 없는 경우에는 오류 메시지가 표시됩니다.
XML 스프레드시트 형식은 셀 데이터 및 수식, 셀 서식, 워크시트 설정 및 통합 문서 설정을 그대로 유지하도록 통합 문서의 내용을 기술합니다. 다음 Excel 기능은 XML에서 사용할 수 없습니다.
- 도표
- OLE 개체
- 도형 그리기 또는 도형
- VBA 프로젝트
- 그룹 및 개요
XMLSS는 Excel 2003 및 Excel 2002에 공통되는 형식입니다. 따라서 사용자는 두 버전 간에 XMLSS 파일을 공유할 수 있습니다. 사용자는 또한 XMLSS 파일에 대한 자신의 스타일시트를 만들어서 데이터를 다른 형식으로 변환할 수 있습니다. 이를 통해 사용자는 변환된 파일을 다양한 종류의 프로그램과 공유할 수 있습니다.
Excel 솔루션에 XML 통합
XML 데이터를 사용하면 Excel 2003 솔루션에서 다양한 기능을 사용할 수 있습니다. 예를 들어 Excel을 자동화하지 않아도 런타임에 XMLSS로 된 다중 시트 통합 문서를 만들 수 있습니다. Excel을 자동화하려면 Excel 실행 파일을 로드해야 합니다. Excel은 독립 프로세스 자동화 서버이기 때문에 Excel 개체 모델을 호출하는 방법은 성능적인 면에서 비용이 많이 듭니다.
사용자는 Microsoft XML Parser(MSXML) 및 XML 스타일시트만 사용하여 프로세스에서 XMLSS를 완벽하게 만들 수 있습니다. 또는 Office XP 스프레드시트 구성 요소(종속 프로세스)를 사용하여 스프레드시트를 작성하고 스프레드시트에 대한 XMLSS를 복원할 수 있습니다. 어느 경우에서든 사용자는 결과 XMLSS를 Excel에서 바로 원래 형식으로 열 수 있습니다. Excel의 MIME(Multipurpose Internet Mail Exchange 또는 Multimedia Internet Mail Exchange) 콘텐트 형식을 사용하여 XMLSS에서 클라이언트 브라우저로 스트리밍하여 ASP를 사용하는 웹 프로그램은 서버에서 Excel을 실행하여 오버헤드를 초래하지 않고도 복잡한 통합 문서를 만들 수 있습니다.
참고 MIME는 비 ASCII 메시지를 인터넷을 통해 전송할 수 있도록 이러한 메시지의 형식을 지정하는 규정입니다. 현재 대부분의 전자 메일 클라이언트는 MIME을 지원하기 때문에 그래픽, 음성, 영상 파일을 인터넷 메일 시스템을 통해 전송할 수 있습니다. 전자 우편 응용 프로그램 외에도 웹 브라이저도 다양한 MIME 형식을 지원합니다. 따라서 브라우저에서도 HTML 형식이 아닌 파일을 표시하거나 출력할 수 있습니다. 통합 문서도 이러한 파일 형식 중 하나에 포함됩니다.
XMLSS 생성을 활용하는 같은 예제 코드를 보려면 다음의 MIcrosoft 기술 자료 문서를 참고하십시오.
- HOWTO: ASP를 사용하여 클라이언트측 표시를 위한 스프레드시트 XML 작성.
- HOWTO: Excel 2002용 XML 스프레드시트를 만들기 위해 Visual Basic 또는 ASP 사용.
Excel 솔루션에서 XML을 사용하여 얻을 수 있는 또 한 가지 이점은 다른 프로그램과 쉽게 공유할 수 있는 형식으로 셀 범위에서 데이터를 추출할 수 있다는 점입니다. 사용자는 Range 개체의 Value 속성을 <xlRangeValueXMLSpreadsheet> 매개 변수로 호출하여 통합 문서의 셀에서 XMLSS를 추출할 수 있습니다. 그런 다음 스타일시트를 사용하여 XMLSS를 다른 프로그램에서 사용할 수 있는 XML로 변환할 수 있습니다. 예를 들어 XMLSS를 사용자 지정 XML로 변환하여 웹 프로그램을 사용해서 게시하고 처리할 수 있습니다.
MIME 콘텐트 스트리밍 동안에 Excel 통합 문서의 서식 지정
이 단원에서는 ASP를 사용하여 사용자가 MIME 콘텐트를 Microsoft Excel로 스트리밍할 수 있는 서식 지정된 통합 문서를 만드는 방법을 설명합니다.
Excel 2003은 저장소 정보를 HTML/XML 하이브리드의 형식으로 보관할 수 있습니다. Excel 2003 통합 문서를 웹 페이지로 저장하면 Excel은 Excel에서 특별한 의미로 사용되는 HTML 태그와 XML 태그 조합이 포함된 파일을 만듭니다. 이 형식으로 저장된 통합 문서는 통합 문서의 내용을 잃지 않고도 Excel에서 브라우저로 또는 다시 Excel로 이동할 수 있습니다(양방향 지원).
웹 페이지로 저장된 통합 문서를 Internet EXplorer에서 열면 앞에서 저장한 HTML 태그로 문서를 렌더링합니다. 이 형식의 통합 문서를 Excel에서 열면 Excel은 통합 문서, 워크시트, 행 및 열과 관련된 설정을 위해 XML 태그를 사용합니다.
ASP를 사용하는 사용자는 Excel에서 HTML/XML 형식으로 자신의 문서를 만들어서 문서를 클라이언트 브라우저로 스트리밍할 때 Excel을 사용하여 표시되도록 할 수 있습니다. HTML/XML 형식을 사용하면 데이터의 셀 배치를 조정하고 Excel에서 지원되는 통합 문서 또는 워크시트 설정을 지정할 수 있습니다.
HTML/XML 형식으로 Excel 통합 문서를 만들고 MIME 콘텐트로 클라이언트의 Excel로 스트리밍하려면 다음 단계를 수행하십시오.
- 다음 코드를 Microsoft 메모장으로 붙여넣습니다.
목록 8. Excel 통합 문서의 서식을 지정하고 MIME으로 스트리밍하기 위한 절차 <%@ Language=VBScript %> <% ' Check for a value passed on the address bar. if (Request.QueryString("i")) = "" then bFirst = true ' If we have a value for "i", we know that we can display the ' data in Excel. if (bFirst = false) then ' Buffer the content and send it to Excel. Response.Buffer = true Response.ContentType = "application/vnd.ms-excel" %> <HTML xmlns:x="urn:schemas-microsoft-com:office:excel"> <HEAD> <style> <!--table @page {mso-header-data:"&CMultiplication Table\000ADate\: &D\000APage &P"; mso-page-orientation:landscape;} br {mso-data-placement:same-cell;} --> </style> <!--[if gte mso 9]><xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Sample Workbook</x:Name> <x:WorksheetOptions> <x:Print> <x:ValidPrinterInfo/> </x:Print> </x:WorksheetOptions> </x:ExcelWorksheet> </x:ExcelWorksheets> </x:ExcelWorkbook> </xml><![endif]--> </HEAD> <BODY> <TABLE> <% ' Build a multiplication table from 1,1 to i,j. for i = 1 to CInt(Request.QueryString("i")) Response.Write " <TR>" + vbCrLf for j = 1 to CInt(Request.QueryString("j")) if (j = 1) or (i = 1) then Response.Write " <TD bgcolor=""#FFF8DC"">" else Response.Write " <TD bgcolor=""#B0C4DE"">" end if Response.Write CStr(i*j) + "</TD>" + vbCrLf next Response.Write " </TR>" + vbCrLf next %> </BODY> </HTML> <% else ' The user hasn't loaded the page yet. Prompt them for ' values for the table. %> <HTML> <BODY> Please enter indices for the multiplication table:<BR> <FORM action="xlmime.asp" method=GET> i = <INPUT type="text" name=i style="WIDTH: 25px"><BR> j = <INPUT type="text" name=j style="WIDTH: 25px"><BR><BR/> <INPUT type="submit" value="Submit"><BR/> </FORM> </BODY> </HTML> <% end if %>
- 파일 이름을 XLMime.asp로 지정하여 웹 서버의 가상 루트 디렉터리에 저장합니다. (기본 가상 루트는 C:\Inetpub\Wwwroot입니다.)
- Internet Explorer를 시작하고 http://Server_Name/xlmime.asp로 이동합니다. 여기에서 Server_Name은 웹 서버의 이름입니다.
그림 5. xlmime.asp 파일의 안내 화면
- 표시된 웹 페이지(그림 5 참고)에서 제공된 각 입력란에 숫자 값을 입력하고 Submit을 클릭합니다. Excel이 브라우저에 새 통합 문서를 활성화합니다. 새 통합 문서(그림 6 참고)에는 사용자가 지정한 행 숫자(i)와 열 숫자(j)에 서식이 지정된 데이터가 표시됩니다. 또한 통합 문서의 페이지 설정 정보를 확인하면 문서 방향이 가로로 설정되어 있고 사용자 지정 헤더가 있음을 알 수 있습니다.
그림 6. 서식이 지정된 결과 화면
Visual Basic 또는 ASP를 사용하여 통합 문서에 대한 XML 템플릿 생성
이 단원에서는 XSL 변환과 함께 사용될 때 사용자가 Excel에서 직접 열어 볼 수 있는 서식이 지정된 통합 문서를 생성하는 XML 템플릿을 만드는 방법을 설명합니다. ASP와 Visual Basic 모두에 대한 XML 변환이 예시되어 있습니다. Visual Basic 코드 예의 경우 Excel은 XML/XSL에 대해서만 스프레드시트 데이터를 생성합니다. 예제에서는 최소한의 자동화 방식만 사용하여 결과 파일을 Excel에서 엽니다.
- C:\ExcelXML 폴더를 만듭니다.
- Excel에서 통합 문서를 만듭니다.
- 통합 문서에서 표시된 A1:F2 셀에 다음 데이터를 추가합니다. F2 셀 데이터를 수식으로 추가합니다.
표 2. 통합 문서 데이터 예제
A1: Order ID B1: Product ID C1: Unit Price D1: Quantity E1: Discount F1: Total A2: aaa B2: 111 C2: 222 D2: 333 E2: 0 F2: =C2*D2*(1-E2) - F3 셀에 다음 수식을 입력합니다. =SUM(F$2:F2)
- A1:F1 셀 범위를 선택합니다.
- 서식 메뉴에서 셀을 클릭합니다.
- 굵게, 아래쪽 괘선, 셀 음영 단일 색상을 적용합니다. 확인을 클릭합니다.
- A:F 셀 범위를 선택합니다.
- 서식 메뉴에서 열을 가리킨 다음 너비를 클릭합니다.
- 새 열 너비로 15를 입력한 다음 확인을 클릭합니다.
- A:F 셀 범위를 계속 선택한 상태로 서식 메뉴에서 셀을 클릭합니다.
- 맞춤 탭의 가로 맞춤 목록에서 가운데를 선택한 다음 확인을 클릭합니다.
- E 열을 선택합니다. 서식 메뉴에서 셀을 클릭합니다.
- 숫자 탭의 백분율을 클릭하고 소수 자릿수로 0을 지정한 다음 확인을 클릭합니다.
- F 열을 선택합니다.
- 서식 메뉴에서 셀을 클릭합니다.
- 숫자(Number) 탭의 회계(Accounting)를 클릭한 다음 확인을 클릭합니다.
- A3:F3 셀 범위를 선택합니다.
- 서식 메뉴에서 행과 높이를 차례로 클릭한 다음 25를 입력한 다음 확인을 클릭합니다.
- A3:F3 셀 범위를 계속 선택한 상태로 서식 메뉴에서 셀을 클릭합니다.
- 셀에 위쪽 테두리를 적용하고 확인을 클릭합니다.
- 도구 메뉴에서 옵션을 클릭합니다.
- 보기 탭에서 눈금선 확인란을 지우고 확인을 클릭합니다.
- 2 행을 선택합니다. 창 메뉴에서 틀 고정을 클릭합니다.
- A1 셀을 선택합니다.
- 파일 메뉴에서 다른 이름으로 저장을 클릭합니다.
- 앞에서 만든 C:\ExcelXML 폴더를 찾아서 이 통합 문서를 Orders.xsl으로 지정하여 XML 스프레드시트 형식으로 저장합니다.
참고 다른 이름으로 저장 대화 상자의 파일 이름 상자에서 파일 이름을 큰따옴표로 묶어서 Excel이 파일 이름에 .xml 확장명을 자동으로 추가하지 못하도록 합니다.
- Excel을 종료합니다.
- 메모장과 같은 아무 텍스트 편집기에서 Orders.xsl을 엽니다.
<?xml version="1.0"?>태그와<Workbook>태그 사이에 다음 내용을 삽입합니다.<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:pi name="xml">version="1.0"</xsl:pi>
- Orders.xsl파일 마지막에 다음 두 행을 추가합니다. </xsl:template> </xsl:stylesheet>
- Orders.xsl에서 다음과 같은 태그 집합을 찾습니다(이 태그 집합은 워크시트의 A2:F2 셀 범위를 나타냅니다).<Row ss:Height="14.25"> <Cell><Data ss:Type="String">aaa</Data></Cell> <Cell><Data ss:Type="Number">111</Data></Cell> <Cell><Data ss:Type="Number">222</Data></Cell> <Cell><Data ss:Type="Number">333</Data></Cell> <Cell><Data ss:Type="Number">0</Data></Cell> <Cell ss:Formula="=RC[-3]*RC[-2]*1*(1-RC[-1])"><Data ss:Type="Number">73926</Data></Cell> </Row>
참고 Height 속성은 8단계에서 설정한 테두리 설정에 따라 다를 수 있습니다.
- 앞의 코드를 다음 XSL 코드로 바꿉니다.<xsl:for-each select="xml/rs:data/z:row"> <Row ss:AutoFitHeight="0" ss:Height="13.5"> <Cell><Data ss:Type="String"><xsl:value-of select="@OrderID"/></Data></Cell> <Cell><Data ss:Type="Number"><xsl:value-of select="@ProductID"/></Data></Cell> <Cell><Data ss:Type="Number"><xsl:value-of select="@UnitPrice"/></Data></Cell> <Cell><Data ss:Type="Number"><xsl:value-of select="@Quantity"/></Data></Cell> <Cell><Data ss:Type="Number"><xsl:value-of select="@Discount"/></Data></Cell> <Cell ss:Formula="=RC[-3]*RC[-2]*(1-RC[-1])"><Data ss:Type="Number">0</Data></Cell> </Row> </xsl:for-each>
- 변경된 Orders.xsl 파일을 저장하고 파일을 닫습니다.
Visual Basic을 사용하여 XML 속성의 ADO 레코드 집합을 XML 스프레드시트로 변환
- Visual Basic에서 표준 EXE 프로젝트를 만듭니다.
- 프로젝트 메뉴에서 참조를 클릭합니다. Microsoft ActiveX Data Object 2.5(또는 이상) 및 Microsoft XML 3.0에 대한 형식 라이브러리를 선택합니다.
- Form1에 CommandButton을 추가하고 단추의 Click 이벤트에 다음 코드를 추가합니다.
목록 9. Visual Basic에서 ADO 레코드 집합을 XML 스프레드시트로 변환하기 위한 프로시저 Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ "C:\program files\microsoft office\office11\samples\Northwind.mdb" Const sOutXML = "C:\ExcelXML\Orders.xml" Const sXSL = "C:\ExcelXML\Orders.xsl" 'Retrieve an ADO recordset of the Orders Detail table in Northwind. Dim nRecords As Long, nFields As Long Dim rs As New ADODB.Recordset rs.Open "SELECT * FROM [Order Details]", sConn, adOpenStatic, adLockOptimistic 'Persist the recordset to a new DOMDocument and store the record count. Dim oXML As New DOMDocument rs.Save oXML, adPersistXML nRecords = rs.RecordCount nFields = rs.Fields.Count rs.Close 'Load the XSL (the workbook template with XSL directives) into a DOMDocument. Dim oXSL As New DOMDocument oXSL.Load sXSL 'Transform the XML using the style sheet. Dim oResults As New DOMDocument oXML.transformNodeToObject oXSL, oResults If oXSL.parseError.errorCode <> 0 Then MsgBox "Parse Error: " & oResults.parseError.reason Else 'Modify the ss:ExpandedRowCount attribute for the <table> node to 'indicate the correct number of rows (count of records + 1 row for 'the header + 1 row for the total). Dim oTable As MSXML2.IXMLDOMElement Set oTable = oResults.selectSingleNode("Workbook/Worksheet/Table") oTable.setAttribute "ss:ExpandedRowCount", nRecords + 2 '*************************************** 'Save the results to a file. Open sOutXML For Output As #1 Print #1, oResults.xml Close #1 'Open the XML in Excel. Dim oExcel As Object Set oExcel = CreateObject("Excel.Application") oExcel.Workbooks.Open sOutXML oExcel.Visible = True oExcel.UserControl = True '*************************************** End If
참고 필요한 경우에는 연결 문자열에 Access Northwind 예제 데이터베이스에 대한 설치 경로가 올바르게 포함되도록 연결 문자열(Const sConn)을 수정하십시오.
- F5를 눌러서 프로그램을 실행합니다.
- Form1에서 단추를 클릭합니다. Northwind 예제 데이터베이스에 있는 Orders Detail 테이블의 데이터가 사용자가 만든 Excel 통합 문서 템플릿에 표시됩니다(그림 7 참조).
그림 7. Order Detail 테이블에서 가져온 서식이 지정된 데이터
예제에서는 XML 스프레드시트를 생성하고 Workbooks 컬렉션의 Open 메서드를 사용하여 XML을 새로운 통합 문서로 열도록 Excel을 자동화합니다. 이러한 방법 외에 사용자는 XML을 기존 통합 문서의 특정 셀에 직접 삽입할 수도 있습니다. 이렇게 하기 위해 별표 사이에 있는 코드를 다음 코드로 바꾸십시오. 'Display the data in a workbook starting at cell B2. Dim oExcel As Object, oBook As Object Set oExcel = CreateObject("Excel.Application") Set oBook = oExcel.Workbooks.Add oBook.Worksheets(1).Range("B2").Resize(nRecords + 2, nFields + 1).Value(11) = _ oResults.xml '참고: xlRangeValueXMLSpreadsheet=11 oExcel.Visible = True oExcel.UserControl = True
코드를 바꾼 다음 프로그램을 다시 실행합니다. 이번에는 Excel이 새 통합 문서에서 첫 번째 워크시트의 B2 셀에서부터 XML 스프레드시트 데이터를 삽입합니다. Excel은 셀 데이터와 서식을 범위에 적용합니다. 하지만 이러한 방식을 사용할 경우 Excel은 행, 열, 워크시트 및 통합 문서에 관련된 특정 설정은 수행하지 않습니다.
ASP를 사용하여 XML 속성의 ADO 레코드 집합을 XML 스프레드시트로 변환
- 다음 코드를 메모장으로 붙여넣습니다. 코드를 ExcelXML.asp로 지정하여 웹 서버의 가상 루트 폴더에 저장합니다.
참고 기본 가상 루트 폴더는 C:\inetpub\wwwroot입니다.
목록 10. ASP에서 ADO 레코드 집합을 XML 스프레드시트로 변환하는 코드 <%@ Language="vbscript"%> <% Const sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\program files\microsoft office\office11\samples\Northwind.mdb" Const sXSL = "C:\ExcelXML\Orders.xsl" Response.Buffer = True 'Retrieve an ADO recordset of the Orders Detail table in Northwind. Dim rs, nRecords Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM [Order Details]", sConn, 3, 3 'Persist the recordset to a new DOMDocument and store the record count. Dim oXML Set oXML = CreateObject("Microsoft.XMLDOM") rs.Save oXML, 1 nRecords = rs.RecordCount rs.Close 'Load the XSL (the workbook template with XSL directives) into a DOMDocument. Dim oXSL Set oXSL = CreateObject("Microsoft.XMLDOM") oXSL.Load sXSL 'Transform the XML using the style sheet. Dim oResults Set oResults = CreateObject("Microsoft.XMLDOM") oXML.transformNodeToObject oXSL, oResults If oXSL.parseError.errorCode <> 0 Then Response.Write "Parse Error: " & oResults.parseError.reason Else 'Modify the ss:ExpandedRowCount attribute for the <table> node in the XSL. Dim oTable Set oTable = oResults.selectSingleNode("Workbook/Worksheet/Table") oTable.setAttribute "ss:ExpandedRowCount", nRecords + 2 'Return the resulting XML Spreadsheet for display in Excel. Response.ContentType = "application/vnd.ms-excel" Response.Charset = "ISO-8859-1" Response.Write oResults.XML Response.Flush End If %>
참고 참고 필요한 경우에는 연결 문자열에 Access Northwind 예제 데이터베이스에 대한 설치 경로가 올바르게 포함되도록 연결 문자열(Const sConn)을 수정하십시오.
- 2. Internet Explorer를 시작하고 http://Server_name/ExcelXML.asp로 이동합니다. 여기에서 Server_name은 웹 서버의 이름입니다. Northwind 예제 데이터베이스에 있는 Orders Detail 테이블의 데이터가 사용자가 만든 Excel 통합 문서 템플릿에 표시됩니다.
결론
이 문서에서는 Excel 통합 문서에서 XML 형식의 파일과 XML 스타일시트를 사용하는 여러 방법에 대해 살펴보았습니다. 또한 XML 파일 및 XML 스타일시트에 대한 개요를 설명했습니다. 그리고 ASP와 Visual Basic을 사용하여 서식이 지정된 Excel 통합 문서를 만드는 방법도 확인했습니다. 마지막으로 이 문서에서는 ASP를 사용하여 사용자가 Excel 통합 문서로 스트리밍하기 위해 사용할 수 있는 MIME 메시지를 만드는 방법을 단계별로 살펴보았습니다. 이처럼 Visual Basic, ASP 및 XML을 함께 사용하면 다양한 방식으로 Excel 솔루션을 만들 수 있습니다.
'XML' 카테고리의 다른 글
| 5분 강좌 XML copy, copy-of, apply-templates, valu (0) | 2007/06/07 |
|---|---|
| XML과 XSL을 이용한 UI 디자인 (0) | 2007/06/07 |
| Excel 2003 통합 문서 생성을 위해 Visual Basic 및 ASP에서 XML 사용 (0) | 2007/06/07 |
| 기상청 날씨정보 (0) | 2007/06/07 |
| 트리뷰 (0) | 2007/06/07 |
| xml데이타를 sorting (0) | 2007/06/07 |




최근에 달린 댓글
링크
최근에 받은 트랙백
태그목록