Xml 从XSL:table设置excel样式错误

Xml 从XSL:table设置excel样式错误,xml,xslt,spreadsheetml,Xml,Xslt,Spreadsheetml,所以我想在我的excel XSLT中添加一些样式。逻辑运行良好,但当我尝试添加样式时,它的错误如下 Excel错误: 装载过程中,以下区域出现问题: 桌子 中列出的错误: c:\Users\uname\appdat\microsoft\windows\temporaryInternetFiles\content.MSO\xxxxxxxx.log 我的代码是: <?xml version="1.0" encoding="UTF-8"?> <?mso-application pro

所以我想在我的excel XSLT中添加一些样式。逻辑运行良好,但当我尝试添加样式时,它的错误如下

Excel错误: 装载过程中,以下区域出现问题: 桌子

中列出的错误: c:\Users\uname\appdat\microsoft\windows\temporaryInternetFiles\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>


实际上,我想加粗标题的字体,保留边框并为标题添加背景色。

XSLT中有两个错误:

  • 您的
    在任何模板之外,它们根本不会出现在输出文档中。它们需要在工作簿中

  • 单元格没有
    ss:ID
    属性只有样式有ss:ID,要引用样式,请改用
    ss:StyleID=“s62”

  • 查看c:\Users\uname\appdat\microsoft\windows\temporaryInternetFiles\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会抛出臭名昭著的错误消息,但查看结果文档通常会给您一些线索。

    你好,Tobias,感谢您的上述回复。关于上述XSL,我还有一个问题。因为这个XSL使用多个xml。我无法在同一工作簿中使用不同的XML创建不同的工作表。@user3447978您可以使用
    document()
    函数在其他XML文档上应用模板,然后在源文件上应用模板。如果您有任意数量的文档,那么包含一个将它们合并为一个文档的转换前步骤可能会有所帮助。所以我尝试了这种方法