1. 概述编辑
1.1 版本
报表服务器版本 | JAR 包 | 功能变更 |
---|---|---|
10.0 | - | - |
10.0.12 | 2020-12-28 | 填报预览与新填报预览一样,支持多次导入 Excel,且无空白模板(即填报模板中不能有数据)的限制 |
1.2 问题描述
在填报预览或新填报预览方式下,希望将多个表样相同的 Excel 分批次导入填报页面,然后一次性提交。
「自由格式」和「固定行式」的报表导入 Excel 时执行的是按位置匹配逻辑,多次导入的时候基本能满足用户要求。
而「不定行式」的报表,因为行可以扩展,所以在连续多次导入 Excel 时,如果 Excel 数据行数大于等于页面已有数据,则执行「全量导入」,会覆盖掉模板原始数据;而如果 Excel 数据行数少于模板原始数据,会执行「插入导入」。
用户希望在这两种不同情况下,能选择是插入导入或覆盖导入。
1.3 解决思路
针对不定行式填报表,提供统一的多次导入 Excel 计算逻辑,如下所示:
1)覆盖导入(不清空已有数据)
每次导入 Excel 时,无论 Excel 中的行数是多于还是少于填报页面,均执行覆盖导入。如果 Excel 数据少于填报页面已有数据,则填报页面多出来的数据在 Excel 导入后保留。
2)清空导入(清空已有数据)
每次导入时均清空填报页面已有数据,无论页面数据是多于还是少于Excel,最后只保留Excel中的内容。
注:清空导入只清空不定行区域受Excel影响的内容,其他内容不作清空。
如下图所示,Excel 里存的是是 A~E 列的明细内容,清空导入时,F3 格子内容不清空。
3)增量导入:
每次导入 Excel 时,无论 Excel 中的行数是多于还是少于填报页面,均执行增量导入,在结尾行扩充导入的 Excel 内容。
2. 示例一:内置按钮实现编辑
2.1 Excel数据准备
1)点击下载 Excel 文件:Excel模板一.xlsx
2)点击下载 Excel 文件:Excel模板二.xlsx
2.2 模板准备
如下图设计表格,A2~J2 单元格添加文本控件。
注:若文本控件所在单元格中插入了数据列,需要将数据设置改为列表,如下图所示:
2.3 添加多次导入按钮
设计器菜单栏点击「模板>模板 Web 属性」,如下图步骤将「多次导入 Excel」按钮添加到工具栏中,如下图所示:
2.4 效果预览
保存报表,点击「填报预览」或「新填报预览」,Web 端工具栏「多次导入 Excel 」按钮下拉显示 4 种 Excel 导入方式。
4 种导入方式的效果如下图所示:
3. 示例二:JS事件实现编辑
使用 JS 事件也可以实现覆盖导入、清空导入和增量导入,方法如下:
3.1 覆盖导入
1)沿用示例一的模板,选中 A6 单元格,如下图步骤给单元格添加一个按钮控件,按钮名字为覆盖导入。
2)如下图步骤给该按钮添加一个点击事件,JS 代码如下:
contentPane.importExcel_Cover();
3.2 清空导入
1)在上面的基础上,选中 C6 单元格,如下图步骤给单元格添加一个按钮控件,按钮名字为清空导入。
2)如下图步骤给该按钮添加一个点击事件,JS 代码如下:
contentPane.importExcel_Clean();
3.3 增量导入
1)在上面的基础上,选中 E6 单元格,如下图步骤给单元格添加一个按钮控件,按钮名字为增量导入。
2)如下图步骤给该按钮添加一个点击事件,JS 代码如下:
contentPane.importExcel_Append();
3.4 效果预览
保存报表,点击「填报预览」或「新填报预览」,三种按钮的导入效果如下图所示:
4. 模板下载编辑
已完成模板参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\ExcelImport\填报多次导入Excel.cpt
点击下载模板:填报多次导入Excel.cpt
点击下载 Excel 数据文件:Excel模板一.xlsx Excel模板二.xlsx
5. 注意事项编辑
FineReport 填报报表在线多次导入 Excel 支持各种样式的填报报表,不仅仅局限于行式填报报表,但是如果是非行式填报报表,报表的控件位置需要与 Excel 中的数据位置保持一致,行式填报报表则需要保持标题名一致。