Styling excel от XSL: ошибка таблицы
Поэтому я хотел добавить несколько стилей в мой Excel XSLT. Логика работает нормально, но когда я пытаюсь добавить стиль, выдает ошибку вроде
Ошибка Excel: во время загрузки возникла проблема в следующих областях: Таблица
Ошибки перечислены в: c:\Users\uname\appdat\microsoft\windows\ временныйИнтернет-файлы \content.MSO\xxxxxxxx.log
Мой код:
<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<xsl:stylesheet
xmlns:ns="urn:control.services........"
xmlns:m="urn:messages........."
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<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>
<Style ss:ID="s62">
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="12" ss:Color="#000000" ss:Bold="1"/>
<Interior ss:Color="#79DCFF"/>
</Style>
</Styles>
<xsl:output indent="yes"/>
<xsl:variable name="header" select="distinct-values(/ns:ServiceRequest/m:ItemRequest/ns:ServiceRequest/m:*/m:*/local-name())"/>
<xsl:variable name="fields" select="distinct-values(/ns:ServiceRequest/m:ItemRequest/ns:ServiceRequest/m:*/m:*/name())"/>
<xsl:template match="/">
<ss:Workbook>
<ss:Worksheet ss:Name="SomeData">
<ss:Table>
<xsl:for-each select="($header)">
<ss:Column ss:Width="160"/>
</xsl:for-each>
<ss:Row>
<xsl:for-each select="($header)">
<ss:Cell ss:ID="s62">
<ss:Data ss:Type="String">
<xsl:value-of select="."/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
<xsl:apply-templates select="ns:ServiceRequest/m:ItemRequest/ns:ServiceRequest/m:*"/>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
</xsl:template>
<xsl:template match="m:*">
<xsl:variable name="data" select="."/>
<ss:Row>
<xsl:for-each select="$fields">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="$data/*[name()=current()]/text()"/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:template>
</xsl:stylesheet>
Я на самом деле хотел выделить шрифты заголовка, сохранить границу и задать цвет фона для заголовка.
1 ответ
В вашем XSLT есть 2 ошибки:
Ваш
<Styles>
находятся вне какого-либо шаблона, они вообще не будут отображаться в вашем выходном документе. Они должны быть внутри Workbook.Клетка не имеет
ss:ID
только атрибут Стиль имеет ss:ID, чтобы ссылаться на использование стиляss:StyleID="s62"
вместо.
Загляните в c:\Users\uname\appdat\microsoft\windows\ временныйИнтернет-файлы \ content.MSO \ xxxxxxxx.log(вы не можете просмотреть это местоположение, папка скрыта, поэтому скопируйте этот путь в адресную строку вашего проводника или в Окно "Выполнить") это дало бы вам дополнительную информацию, например:
XML ERROR in Table
REASON: Illegal Tag
FILE: C:\temp\Untitled15.xls
GROUP: Row
TAG: Cell
ATTRIB: ID
VALUE: s62
Office выдаёт заведомо плохие сообщения об ошибках, но, просматривая итоговый документ, вы, как правило, получите некоторую подсказку.