Изменить Excel лист с данными из XML, используя XSLT - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно предоставить отчет в формате Excel из шаблона Excel и файл XML, содержащий данные (созданные из запроса SQL: report_data.xml). Но я не могу использовать выражение XPath для навигации по листу Excel и не могу выбрать конкретную строку в шаблоне для дублирования с данными из report_data.xml

Чтобы достичь этого, я сначала «разархивировал» шаблон Excel, чтобы получить доступ к отдельным листам в формате .xml. В то же время я устанавливаю «исходные» файлы, которые будут использоваться в качестве файла по умолчанию (например, source-sheet1.xml, source-sharedstring.xml, ...) для создания новых заполненных файлов.

Я не могу найти способ выбрать конкретную строку в шаблоне для дублирования с данными из XML.

TemplateSource Доклад Я проверил это, используя Xalan 2.7.2 и Saxon 9.7.0.15 // XSLT 1.0

источник-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 и копировать строки в нем, а также изменять значения в каждом столбце (при необходимости; стили и правила зависят от того, являются ли они 1-м, 2-м,. .. строка для тех же данных) с данными из report_data.xml

Если это не способ создания отчета в Excel из данных в формате XML с различным стилем в зависимости от "положения" данных в файле Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...