历史版本5 :Excel导入时根据单元格位置匹配 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

Excel导入行式报表根据位置匹配是指,Excel导入进来的时候需要导入数据的单元格从第几行第几列开始,那么Excel中数据就从第几行第几列开始,无关于标题名称,只跟位置有关系。
如下图,可以看到Excel中的列标题与FineReport模板的列标题完全不一致,但是位置却保持一致,FineReport模板中导入数据的单元格从B3开始,那么导入Excel中,从B3开始的数据就被导进来了:
注:行式报表根据位置匹配的前提是标题完全匹配不上,如果有2个或2个以上标题能匹配得上,那么就会使用根据标题匹配,但是如果通过配置文件设置了不执行根据标题匹配,那么就会直接执行根据位置匹配。
另:若要导入的是Excel2007需要将poi2007_fat.jar拷贝至%FR_HOME%\WebReport\WEB-INF\lib 下。

2. 示例编辑

2.1 模板准备
上图中我们可以看到,Excel中第一行数据(不包括标题)在B3~K3中,在填报模板中,导入数据的单元格也要在B3~K3,单元格从上到下扩展,并添加控件:
注:若导入的报表中不是空白的填报表,而是有取数的功能,则需要将报表的最左父格设置为列表显示。
2.2 报表填报属性设置
在报表填报属性中,只需要将第一行单元格与数据表的数据列进行绑定即可。
该例中,Excel中的原始数据供应商和类别都是具体的名字,若用户希望Excel导入的是名字,但实际入库的是ID怎么办呢?
此时可以在报表填报属性中使用map函数转换,以下具体介绍。
  • 定义map函数需要的数据集
增加数据集ds1,SQL语句为:SELECT * FROM [供应商],查询出供应商ID与供应商名字的对应关系
再增加数据集ds2,SQL语句为:SELECT * FROM [产品类别],查询出产品类别ID与类别名字的对应关系
  • 报表填报属性中使用map函数
Excel导入的是名字,使用map函数转换,如下图:
2.3 填报工具栏设置
默认填报工具栏是没有导入Excel按钮的,点击模板>模板web属性>填报页面设置为该模板单独设置,勾选使用工具栏,为该报表单独设置工具栏,清空工具栏,然后在按钮面板中双击提交按钮和导入excel按钮,将这两个按钮添加到顶部工具栏中,如下图:
已完成模板可参考%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject|\ExcelImport\ExcelImport_1.cpt
在线查看模板效果请点击ExcelImport_1.cpt
注:在线查看模板需要用到示例中的excel,点击excelimport.xls下载。

另:如果模板中导入数据的单元格(设置了扩展属性并添加控件的单元格)从第6行开始,那么根据位置匹配导入的时候,Excel中数据就从第6行开始导入。