【发布时间】:2017-08-15 05:54:50
【问题描述】:
我正在使用 XSLT 文件从一些 XML 数据生成 .xls Excel 文件 - 这运行良好并生成有效的 XLS 文件。
我现在需要扩展它以使某些单元格变为粗体。这是我的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="06-06-2017" NAME="FileMaker" VERSION="ProAdvanced 16.0.2"/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ColumnA" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ColumnB" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ColumnC" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ColumnD" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ColumnE" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="6">
<ROW MODID="0" RECORDID="900">
<COL>
<DATA>Created: 15-August-2017</DATA>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
</ROW>
<ROW MODID="0" RECORDID="901">
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
<COL>
<DATA/>
</COL>
</ROW>
<ROW MODID="1" RECORDID="902">
<COL>
<DATA>Name</DATA>
</COL>
<COL>
<DATA>ID</DATA>
</COL>
<COL>
<DATA>Category</DATA>
</COL>
<COL>
<DATA>Number</DATA>
</COL>
<COL>
<DATA>Amount</DATA>
</COL>
</ROW>
<ROW MODID="1" RECORDID="904">
<COL>
<DATA>Acme Corp Pty Ltd</DATA>
</COL>
<COL>
<DATA>123456</DATA>
</COL>
<COL>
<DATA>Category 1</DATA>
</COL>
<COL>
<DATA>1</DATA>
</COL>
<COL>
<DATA>$456.78</DATA>
</COL>
</ROW>
<ROW MODID="1" RECORDID="905">
<COL>
<DATA>Demo Company Pty Ltd</DATA>
</COL>
<COL>
<DATA>987654</DATA>
</COL>
<COL>
<DATA>Category 2</DATA>
</COL>
<COL>
<DATA>1</DATA>
</COL>
<COL>
<DATA>$789.32</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
我希望为该行分配粗体属性:
<ROW MODID="1" RECORDID="902">
<COL>
<DATA>Name</DATA>
</COL>
<COL>
<DATA>ID</DATA>
</COL>
<COL>
<DATA>Category</DATA>
</COL>
<COL>
<DATA>Number</DATA>
</COL>
<COL>
<DATA>Amount</DATA>
</COL>
</ROW>
但不确定如何在我的 XSLT 文件中执行此操作。
XSLT 中处理行的部分如下:
<Style ss:ID="MyTitleStyle">
<Alignment ss:WrapText="0" />
<Font ss:Bold="1"/>
</Style>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<Row>
<xsl:for-each select="fmp:COL">
<xsl:variable name="i" select="position()" />
<xsl:variable name="zFieldName" select="/fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD[$i]/@NAME" />
<xsl:variable name="zFieldType" select="/fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD[$i]/@TYPE" />
<!-- We are looping through rows and columns, and now we can examine the cell -->
<Cell ss:StyleID="MyTextStyle1">
<Data ss:Type="String">
<xsl:value-of select="." />
</Data>
</Cell>
</xsl:for-each><!-- next column -->
</Row>
</xsl:for-each><!-- next row -->
【问题讨论】:
-
“这一行”到底是什么意思?你想通过什么属性来识别行? --附言看起来您的表中有虚拟记录,这是不好的做法。
-
@michael.hor257k 抱歉,这些列在 Excel 中变成了单个“行”。这是我希望加粗的“行”——这 5 个
元素(Excel 中的列标题)。 -
我的问题仍然存在:哪 5 个
元素应该成为 Excel 中的列标题?它会一直是第 3 行(就像在您的示例中一样)还是可以改变? -
名称 ID 类别 数量 数量