2012-04-25 2 views
0

Я использую класс XslCompiledTransform .Net framework как XSLT-процессор (другими словами, Xslt 1.0).Xslt 1.0 XML to excel transform issue

Мое требование состоит в том, что я хочу преобразовать XML-файл в файл Excel (файл xls) с использованием XSLT 1.0 и .Net [4.0].

Для простоты и, поскольку это всего лишь тестовый код, я просто рассматриваю некоторые простые жесткие кодировки в моем Xsl-файле.

В частности, мои два вопроса:

  1. Я попытался кучу вещей, но я не могу видеть рабочий лист моего Excel лист именованного в «WABC», который является то, что я пытаюсь имя Это. Я вижу имя листа как имя моего файла. Дополнительные рабочие листы также не генерируются. Ниже мой XSL-файл
  2. Кроме того, поскольку это тестовый код, я не могу видеть данные, выводимые на разные строки, если я не использую теги HTML. То, что я вижу: AbcNext line вместо

    Abc Nextline

Так что я делаю неправильно? Заранее благодарю за ваше время и помощь.

я установить тип содержимого моего ответа файла как

application/vnd.ms-excel 

Вот мой тестовый файл Xsl:

<?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" 
     xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
     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"> 


     <xsl:template match="/"> 
     <xsl:processing-instruction name="mso-application">progid='Excel.Sheet'</xsl:processing-instruction> 
     <Workbook> 
      <Worksheet ss:Name="wAbc"> 
       <Table ss:ExpandedColumnCount="2" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15"> 
       <Column ss:AutoFitWidth="20" ss:AutoWidth="65"></Column> 
       <Row> 
        <Cell> 
        <Data ss:Type="String">Abc</Data> 
        </Cell> 
       </Row> 
       <Row> 
        <Cell> 
        <Data ss:Type="String">Next line</Data> 
        </Cell> 
       </Row> 
       </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> 
       </WorksheetOptions> 
      </Worksheet> 
     </Workbook> 
     </xsl:template> 
    </xsl:stylesheet> 

ответ

0

Excel XLS файлы используют Microsoft собственный двоичный формат - не способ генерации, что с XSLT.

Формат (относительно) новый XSLX представляет собой набор XML-файлов, которые ZIP-файлы объединены, поэтому в принципе вы можете сгенерировать эти файлы с помощью XSLT, а затем ZIP-файлы для создания окончательного файла - все еще не очень просто. Чтобы просмотреть эти файлы, просто распакуйте файл XSLX.

Предлагаю вам создать более простой формат - либо CSV, либо промежуточный XML-, а затем импортировать его в Excel.

+0

Да, я думаю, это проблема. В итоге мне пришлось сгенерировать его с помощью C# без преобразования XSLT. – m27

1

Вы используете Excel XML в качестве формата здесь (так что строго не файл XLS, который является двоичным).

Но в любом случае я вижу две проблемы с Excel XML, которые вы в настоящее время выводите. Во-первых, я думаю, что атрибут ss: AutoFitWidth на Элемент Столбец должен быть установлен в 1 (или 0). Я не думаю, что 20 является допустимым значением.

См. http://msdn.microsoft.com/en-us/library/aa140066(v=office.10).aspx для получения списка возможных значений.

Addtionally, я думаю, вы можете (хотя я не уверен на 100% в этом) нужно установить сс: ExpandedRowCount на Таблица элемента, а также сс: ExpandedColumnCount.

Посмотрите, не меняется ли один из этих исправлений или исправлены ошибки.