Примените XSLT к XML перед импортом в Excel - PullRequest
5 голосов
/ 30 мая 2009

У меня есть шаблон XSLT, который применяется к XML-файлу данных. Шаблон создает XML-файл электронной таблицы Excel.

Все прекрасно работает, кроме одного мелкого вопроса ....

Когда я открываю электронную таблицу в 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>

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

если добавить эту инструкцию в лист xsl:

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

.... Excel будет работать нормально

3 голосов
/ 30 мая 2009

Насколько я понимаю, диалоговое окно Import XML ... не отображается. Причина объясняется в этой статье MSDN ( Преобразование файлов XML с помощью XSLT при импорте в Microsoft Excel 2002 ):

XML - это язык разметки, используемый для описания структурированных данных (таких как данные на рабочем листе), чтобы их можно было прочитать различными приложениями. Дизайнеры могут создавать настраиваемые элементы XML, позволяя определять, передавать, проверять и интерпретировать данные между приложениями и организациями. Эта универсальность предоставляет много возможностей для обмена данными, но она также имеет по крайней мере одну внутреннюю проблему. Управляя элементами XML-документа, дизайнеры могут создавать любое количество вложенных измерений элементов в документе. Эти отношения родительского / дочернего элемента могут привести к неоднозначности в двумерной парадигме строки и столбца на листе Excel.

Чтобы справиться с этой двусмысленностью, Excel принудительно форматирует любые XML-данные получает, если данные не приходят с таблица стилей, которая предопределяет другой формат. Этот принудительный формат создан используя алгоритм выравнивания заполнить строки и столбцы, которые составляют лист. Пока это формат эффективен при форсировании многомерные данные в двумерный формат, это не всегда представлять данные в наиболее оптимальный формат для читателя-человека.

Так, как Excel знает, когда использовать либо алгоритм выравнивания или Таблица стилей XSLT? Когда Excel открывается или импортирует файл данных XML, он ищет элемент внутри файла, который указывает в таблицу стилей XSLT. Если это элемент присутствует, Excel отображает диалоговое окно, которое предлагает вам применить таблицы стилей или открыть файл без таблицы стилей.

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