使用XSLT

时间:2019-07-02 15:57:33

标签: excel xml xslt

我需要从模板Excel和包含数据的XML文件(根据SQL请求:report_data.xml创建)以Excel格式提供报告。但是我无法使用XPath表达式浏览Excel工作表,也无法选择模板中的特定行来与report_data.xml

中的数据重复

为了实现这一点,我首先“解压缩”了Excel模板,以便可以访问.xml格式的各个工作表。同时,我正在设置将用作默认文件的“源”文件(例如:source-sheet1.xml,source-sharedstring.xml等)来创建新的填充文件。

我找不到在模板中选择特定行以与xml中的数据重复的方法。

TemplateSource Report 我已经使用Xalan 2.7.2和Saxon 9.7.0.15测试了此// XSLT 1.0

source-sheet1.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet  xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
            xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            mc:Ignorable="x14ac" 
            xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
    <dimension ref="A1:G1"/>
    <sheetViews>
        <sheetView tabSelected="1" workbookViewId="0">
            <selection activeCell="B5" sqref="B5"/>
        </sheetView>
    </sheetViews>
    <sheetFormatPr baseColWidth="10" defaultColWidth="9.140625" defaultRowHeight="15" x14ac:dyDescent="0.25"/>
    <sheetData>
        <row r="1" spans="1:7" x14ac:dyDescent="0.25">
            <c r="A1" t="s">
                <v>0</v>
            </c><c r="B1" t="s">
                <v>1</v>
            </c><c r="C1" t="s">
                <v>2</v>
            </c><c r="D1" t="s">
                <v>3</v>
            </c><c r="E1" t="s">
                <v>4</v>
            </c><c r="F1" t="s">
                <v>5</v>
            </c><c r="G1" t="s">
                <v>6</v>
            </c>
        </row>
    </sheetData>
    <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:math="http://exslt.org/math"
    xmlns:set="http://exslt.org/sets"
    xmlns:exslt="http://exslt.org/common"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    xmlns:office="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
    xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
    extension-element-prefixes="redirect"
    exclude-result-prefixes="fo fn math set redirect office r ss">

<xsl:variable name="SrcSheet1"  select="document('XLSX/source-sheet1.xml')"/>

<xsl:template match="Report">
    <xsl:call-template name="Test1"/>
</xsl:template>


    <xsl:template name="Test1">
            <xsl:for-each select="$SrcSheet1/Worksheet/sheetData/row">
                <xsl:message>
                    row = <xsl:value-of select="position()"/>
                    colcount= <xsl:value-of select="count(./c)"/>
                </xsl:message>  
            </xsl:for-each> 
    </xsl:template>

</xsl:stylesheet>

report_data.xml:

<?xml version="1.0" encoding="utf-8"?>
<Report attrib1="foo" ...>
    <Data attrib1="foo" ...>
       <SubData attrib1="foo" ... />
       ...
    </Data>
    ...
</Report>

我希望能够“读取” source-sheet1.xml并复制其中的行,并更改每列中的值(必要时;样式和策略取决于它是1st,2nd还是。)。 ..行以表示相同的数据)和report_data.xml中的数据

如果这不是根据excel文件中数据的“位置”以不同样式从xml数据中生成excel报告的方法。

0 个答案:

没有答案