2016-06-03 2 views
0

쿼리 (XML 형식)의 결과를 Excel 파일로 변환해야합니다. 쿼리-결과Excel 로의 XSLT 변환

예 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
<xsl:output method="xml" indent="yes" encoding="UTF-8" /> 
<xsl:template match="/dbqueries"> 
    <xsl:processing-instruction name="mso-application"> 
     <xsl:text>progid="Excel.Sheet"</xsl:text> 
    </xsl:processing-instruction> 

    <Workbook> 
     <Styles> 
      <Style ss:ID="Default" ss:Name="Normal"> 
       <Alignment ss:Vertical="Bottom" /> 
       <Borders /> 
       <Font /> 
       <Interior /> 
       <NumberFormat /> 
       <Protection /> 
      </Style> 
      <Style ss:ID="s21"> 
       <Font ss:Size="22" ss:Bold="1" /> 
      </Style> 
      <Style ss:ID="s22"> 
       <Font ss:Size="14" ss:Bold="1" /> 
      </Style> 
      <Style ss:ID="s23"> 
       <Font ss:Size="12" ss:Bold="1" /> 
      </Style> 
      <Style ss:ID="s24"> 
       <Font ss:Size="10" ss:Bold="1" /> 
      </Style> 
     </Styles> 
     <!-- Write each query --> 
     <xsl:for-each select="dbquery"> 
      <Worksheet ss:Name="{@id}"> 
       <Table> 
        <xsl:apply-templates select="//rows" mode="rows" /> 
       </Table> 
      </Worksheet> 
     </xsl:for-each> 
    </Workbook> 
</xsl:template> 
<xsl:template match="//rows/row" mode="rows"> 
    <xsl:variable name="x" select="position()" /> 
    <Row ss:Index="{$x}"> 
     <Cell ss:Index="1"> 
      <Data ss:Type="String"> 
       <xsl:value-of select="@id" /> 
      </Data> 
     </Cell> 
     <Cell ss:Index="2"> 
      <Data ss:Type="String"> 
       <xsl:value-of select="@user" /> 
      </Data> 
     </Cell> 
    </Row> 
</xsl:template> 

변환은 첫 번째 문자 변환시 손실되는 것을 제외하고 작동합니다

<?xml version="1.0" encoding="UTF-8"?> 
<dbqueries> 
<dbquery id="main"> 
    <rows> 
     <row user="Me" user-id="1"/> 
     <row user="Myself" user-id="2"/> 
     <row user="I" user-id="3"/> 
    </rows> 
</dbquery> 
</dbqueries> 

나는 다음과 같은 XSLT를 사용합니다.

은 아래를 참조하십시오 : 가능성이 뭐가 잘못

Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 

을 것입니다?

+0

* 첫 글자 *는 무엇입니까? 여는 괄호? XSLT 프로세서는 그렇게 할 수 없었습니다. 현재 및 원하는 출력을 표시하는 데 도움이 될 수 있습니다. – Parfait

+0

통합 문서 앞에 붙는 "<"문자가 손실됩니다. – Soldierflup

+1

어떤 XSLT 프로세서를 사용하고 있습니까? VBA의 MSXML? 잘란? 색슨 족? LibXSLT? – Parfait

답변

1

질문이 닫힐 수 있습니다. 문제의 해결책은 사용 된 프레임 워크에서 "application/vnd.ms-excel"이라는 결과 유형을 요청해야하고 "text/xml"을 대신 요청해야한다는 사실이었습니다.

0

당신은 html5로 변환을 사용하고 Datatables (https://datatables.net/)를 사용하여 html5 "excel to output"버튼을 만드는 것이 좋습니다. 아마도 당신이 원하는 결과를 얻는 것이 훨씬 더 쉬울 것입니다.