需求要求:根据数据库中查询出的数据,导出报表, 电子表格形式, 可以使用MS Office 打开。
最开始的想法:
1.使用Apache的POI API将查询到的数据填写到Excel文档中,但思来想去觉得这不是一个Good idea,感觉类似硬编码,太生硬太粗暴;
2.使用开源的一些报表工具:貌似很多工具都很花哨我的项目用不到,而且学习周期长,有些工具虽开源但文档收费(要命,按美金收,没文档很难整);
最后考虑下来,决定尝试XSLT:
1. 相对成熟的技术,使用的人多,可参考的例子也多;
2. 学习周期短;
3. 手边有一个现成的XSLT解析XML生成表格型XML(可以使用MS Office 2003以上版本打开,界面显示同Excel)的例子;
学习及实践的Step:
1. 首先,按照项目的需求,创建一个相应的表格型XML(可以使用MS Office 2003),模拟些假的数据,保存,然后使用文本编辑器打开查看其格式,对要生成的目标文件有个大体的了解;
- <?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其结构还是很清晰的,包括数据是以何种方式列举并显示的。
整个过程: 根据我们的源数据XML的结构,写一个XSL文件(相当于写一个逻辑处理代码,使用的是XSLT的API), 然后来解析(解析使用XSLT的引擎)这个源数据XML, 最后生成(或者说组合出)目标文件(一个表格型的XML)。
此为第一弹,了解下目标文件:表格型XML的结构。未完待续。