一、
除了要知道xml,xslt的知识,还需要了解ExcelXml(可用Excel打开的报表xml)各标签的含义。
数据放在<Worksheet>标签的<Table>标签内。
每一行数据放在<Row>标签内,每个单元格的内容放在<Cell>标签内
每个标签都有自己的属性(废话-_-||),主要都是样式相关的。
有些比较重要,比如:
下面部分转自:http://woniu1983.iteye.com/blog/700749
1.
ss:ExpandedColumnCount是定义表格的列数
测试中我发现这个数值必须大于实际的列数,例如,我的实际列数是5列,那么赋值的时候使用的是6, 如果使用的是5的话,解析的结果文件使用Office无法打开,提示格式错误信息,不信的同学可以尝试下。
2.
ss:ExpandedRowCount是定义表格的行数,当然肯定要大于实际的行数,这里我做了个算式:统计出源数据xml中Section个数+10
3.
Column... 标签是定义每一列的长宽等属性,实际列数是5列,那么就定义5个Column标签
4.
Row... 标签是定义每一行的长宽等属性,实际行数是多少,那么就定义多少个Row标签
5.
Cell... 标签是Row的子标签,用于定义每一行中各单元格的数据及样式等等
6.
ss:MergeDown是Cell的属性, 用于单元格的纵向合并
ss:MergeDown = "4" 表示:合并当前单元格下边的4个单元格(即纵向区域总共5个单元格被合并)
.
ss:MergeAcross是Cell的属性, 用于单元格的横向合并
ss:MergeAcross="4" 表示:合并当前单元格右边的4个单元格(即横向区域总共5个单元格被合并)
栗子
表格型xml
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook ..........>
<!--文档属性-->
<DocumentProperties ......>
.....
</DocumentProperties>
<!--Excel工作簿属性-->
<ExcelWorkbook ....>
.....
</ExcelWorkbook>
<!--定义共通样式供单元格调用-->
<Styles>
....
</Styles>
<!--Excel的sheet-->
<Worksheet ss:Name="报表-部门费用分配表">
<Table ss:ExpandedColumnCount="8" ss:ExpandedRowCount="73" x:FullColumns="1"
x:FullRows="1" ss:StyleID="s23" ss:DefaultColumnWidth="90"
ss:DefaultRowHeight="18">
<!--某一列的属性-->
<Column ss:Index="8" ss:StyleID="s23" ss:Width="99.75"/>
<!--某一行的属性-->
<Row ss:AutoFitHeight="0" ss:Height="29.25" />
<!--行中各单元格的值和属性-->
<Cell />
<Cell />
...
...
</Row>
...
...
...
</Table>
</Worksheet>
</Workbook>
整个过程: 根据我们的源数据XML的结构,写一个XSL文件(相当于写一个逻辑处理代码,使用的是XSLT的API), 然后来解析(解析使用XSLT的引擎)这个源数据XML, 最后生成(或者说组合出)目标文件(一个表格型的XML)。