2009-05-29 4 views
5

데이터의 XML 파일에 적용되는 XSLT 템플릿이 있습니다. 템플릿은 Excel 스프레드 시트 XML 파일을 생성합니다.Excel로 가져 오기 전에 XML에 XSLT 적용

모든 것이 하나의 사소한 문제 .... 제외하고 놀라운 일들

내가 Excel에서 스프레드 시트를 열 때, 그것이 XML 가져 오기로 취급하고 스타일 시트를 적용할지 여부를 나에게 묻는다

. 그 파일과 관련된 모든 XSLT 템플릿을 자동으로 적용하도록하고 싶습니다. 다음은

몇 가지 샘플 코드 .... 미리 감사드립니다 ....

XML 문서 ...

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="spreadstyle.xsl"?> 

<ResponseBody> 
    <ActivityDetails> 
     <ActivityDetail> 
      <TranCodeDesc>LateChargeAssessment</TranCodeDesc> 
     </ActivityDetail> 
    </ActivityDetails> 
</ResponseBody> 

XSLT 템플릿입니다 ...

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 


    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:o="urn:schemas-microsoft-com:office:office" 
    xmlns:x="urn:schemas-microsoft-com:office:excel" 
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:html="http://www.w3.org/TR/REC-html40"> 

    <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> 
     <Author>tbarbedo</Author> 
     <Created>2009-05-29T18:21:48Z</Created> 
     <Version>12.00</Version> 
    </DocumentProperties> 
    <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> 
     <WindowHeight>8895</WindowHeight> 
     <WindowWidth>18015</WindowWidth> 
     <WindowTopX>0</WindowTopX> 
     <WindowTopY>105</WindowTopY> 
     <ProtectStructure>False</ProtectStructure> 
     <ProtectWindows>False</ProtectWindows> 
    </ExcelWorkbook> 
    <Styles> 
     <Style ss:ID="Default" ss:Name="Normal"> 
     <Alignment ss:Vertical="Bottom"/> 
     <Borders/> 
     <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/> 
     <Interior/> 
     <NumberFormat/> 
     <Protection/> 
     </Style> 
    </Styles> 
    <Worksheet ss:Name="Sheet1"> 
     <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="5000" x:FullColumns="1" 
     x:FullRows="1" ss:DefaultRowHeight="15"> 
      <Row><Cell><Data ss:Type="String">Transaction Code Descriptions (MAGIC) </Data></Cell></Row> 
      <xsl:for-each select="ResponseBody/ActivityDetails/ActivityDetail">  
       <Row> 
        <Cell> 
         <Data ss:Type="String"> 
          <xsl:value-of select="TranCodeDesc" /> 
         </Data> 
        </Cell> 

       </Row> 
      </xsl:for-each> 

     </Table> 
     <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> 
     <PageSetup> 
     <Header x:Margin="0.3"/> 
     <Footer x:Margin="0.3"/> 
     <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> 
     </PageSetup> 
     <Selected/> 
     <Panes> 
     <Pane> 
     <Number>3</Number> 
     <ActiveRow>1</ActiveRow> 
     </Pane> 
     </Panes> 
     <ProtectObjects>False</ProtectObjects> 
     <ProtectScenarios>False</ProtectScenarios> 
     </WorksheetOptions> 
    </Worksheet> 
    </Workbook> 

</xsl:template> 
</xsl:stylesheet> 
+0

이것은 실제로 XSLT 질문이 아니지만 Excel 중 하나입니다 ... – 0x6adb015

답변

3

내 이해에서 주위에 방법이 없습니다 XML 가져 오기 ... dialo g가 표시됩니다. 그 이유는이 MSDN 문서 (Transform XML Files with XSLT When Importing into Microsoft Excel 2002)에 설명되어있다 :

XML 그것이 다양한 애플리케이션에 의해 판독 될 수 있도록 (예를 들면, 시트의 것과) 구조화 된 데이터를 기술하는 데 사용되는 마크 업 언어이다. 디자이너는 사용자 정의 된 XML 요소를 작성하여 응용 프로그램 간 및 조직 간 데이터의 정의, 전송, 유효성 검사 및 해석을 수행 할 수 있습니다. 이 다 기능성은 데이터 교환을위한 많은 기회를 제공하지만 적어도 하나의 고유 한 도전 과제를 가지고 있습니다. 디자이너는 XML 문서의 요소를 조작하여 문서 내에 중첩 된 요소 차원을 원하는만큼 만들 수 있습니다. 이러한 부모/자식 요소 관계로 인해 Excel 워크 시트의 2 차원 행 및 열 패러다임에서 모호성이 발생할 수 있습니다. 이 모호함에 대처하기 위해

는, 엑셀 데이터가 다른 형식을 미리 정의 스타일 시트와 함께 제공하지 않는 한이 , 수신하는 XML 데이터 형식을 강제로. 이 강제 형식은 플랫 파일링 알고리즘을 사용하여 에 워크 시트로 구성된 행과 열을 채워서 만들어집니다. 그러나이 형식은 다차원 데이터를 2 차원 형식으로 강제 적용하는 데 효과적이지만, 은 항상 사람 판독기에 가장 적합한 형식 인 으로 데이터를 표시하지 않습니다.

플랫 팅 알고리즘 또는 XSLT 스타일 시트 중 어느 것을 사용해야하는지 Excel에서 어떻게 알 수 있습니까? Excel이 열리거나 이 XML 데이터 파일을 가져올 때 을 XSLT 스타일 시트로 가리키는 파일 내에서 요소를 찾습니다. 해당 요소가있는 경우 스타일 시트없이 파일을 열거 나 스타일 시트를 적용하라는 메시지가 나타나면 Excel에 대화 상자가 나타납니다.

3

당신은 XSL 시트에서이 명령을 추가하는 경우 :

<xsl:template match="/"> 
    <xsl:processing-instruction name="mso-application"> 
    <xsl:text>progid="Excel.Sheet"</xsl:text> 
    </xsl:processing-instruction> 

을 .... excel이 제대로 실행됩니다.

+0

이 작동하지 않습니다. 나는 이미 .xml 행에 를 가지고 있습니다. 그리고 xslt 코드는이 문자열을 만듭니다. 프롬프트 "가져 오기 XML"이 표시됩니다. –

관련 문제