多次导入Excel
1. 问题描述
如果有多张表样相同的excel需要在线导入到模板,并提交至数据库中,那么该如何实现先将所有excel导入进来,然后再一次性提交呢?
2. 解决思路
FineReport在线导入不支持一次性选择多个excel,一次只能选择一个excel,也不能将多个excel中的数据在不提交入库的前提下导入到模板中,即如果在导入excel之前,web页面里面有数据,导入excel之后会覆盖之前的数据,那么我们这里就可以自定义一个excel导入按钮,在点击该按钮的时候将上一次导入到模板中的数据进行提交,同时刷新页面,让页面恢复到原始的空白状态,并实现excel导入操作,然后再点击导入按钮,导入下一个excel,以此类推。
3. 示例
将下面2张表样相同的excel导入到FineReport模板中:
3.1 模板准备
以Excel导入行式报表中的模板为例,打开%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject|\ExcelImport\ExcelImport_1.cpt,修改其表样,使其与excel中的标题名保持一致,如下图:
3.2 自定义导入按钮
点击模板>模板web属性>填报页面设置,双击工具栏中的
,将该按钮添加到顶部工具栏中,同时删除内置的导入Excel按钮和提交按钮,如下图:3.4 自定义事件编写
在解决思路中描述了自定义按钮需要执行的操作为:在点击按钮的时候将上一次导入到模板中的数据进行提交,同时刷新页面,让页面恢复到原始的空白状态,并实现excel导入操作。
在工具栏编辑界面,选中自定义按钮,点击
,如下图:在JavaScript脚本中写下js语句,如下图:
js完整语句如下:
//获取填报页面第一个控件所在的单元格的值
var value=contentPane.getCellValue(0,0,1);
//如果第一个单元格的值不为空,则表示上一次已经导入过EXCEL,则需要先提交上一次数据,接着刷新页面,最后再弹出导入EXCEL选择框
if (value!="") {
FR.Msg.confirm("提示", "是否提交上一次导入数据", function(result){
if(result){
_g('${sessionID}').writeReport();
contentPane.refreshAllSheets();
contentPane.importExcel();
}
});
}
//如果第一个单元格值为空,则表示这是第一次导入EXCEL,只需要弹出导入EXCEL选择框即可
else{
contentPane.importExcel();
}
FR内置提示框详情请查看FR.MSg.
3.5 效果查看
点击填报预览,点击是否提交上一次导入数据,点击确定,则会将上一次导入数据提交至数据库,然后再弹出文件选择框,这时就可以选择第二个Excel,以此类推,如下图:
这个自定义按钮,选择第一个需要导入的Excel,然后再点击第二个需要导入的Excel,页面会提示已完成模板请查看%FR_HOME%\WebReport\WEB-INF\reportlets\doc\SpecialSubject|\ExcelImport\ExcelImport_4.cpt
在线查看示例效果请点击ExcelImport_4.cpt
4. 总结
FineReport填报报表在线多次导入Excel只支持空白模板的导入,即填报模板中不能有原始数据存在;在线多次导入Excel支持各种样式的填报报表,不仅仅局限于行式填报报表,但是如果是非行式填报报表,报表的控件位置需要与Excel中的数据位置保持一致,行式填报报表则需要保持标题名一致。
附件列表
主题: 专题总结
标签:
已验证