1. 概述
1.1 应用场景
FineReport 支持将 Excel 中的数据拷贝到填报页面中,再进行提交。
注:不支持移动端。
1.2 解决思路
填报预览时,先增加相应数量的空白记录,再将 Excel 中的数据拷贝到这些空白记录中。
2. 操作方法
1)如下图所示设计填报报表。
2)选择填报预览打开报表,点击工具栏上的Excel 中需要复制多少行,浏览器上就要增加多少条空白记录。
按钮,3)选中并复制(Ctrl+C)Excel 中的数据。
4)回到填报预览页面,粘贴数据。
单击数据左上角单元格,出现如下图所示的黑框时粘贴(Ctrl+V)。
5)点击提交即可。
3. 下载模板
点击下载已完成模板:Excel数据复制粘贴到填报单元格.cpt
点击下载 Excel 文件:地区销售额填报.xlsx
4. 注意事项
4.1 空值自动忽略
问题描述:
Excel 中的空值目前无法粘贴到填报页面,也就是空值会自动忽略跳过。
解决方法:
可在设计器菜单栏「模板>模板Web属性>填报页面设置」中添加加载结束事件(引入js文件或粘贴代码都行),此时模板web属性里选择为此模板单独设置。或在「服务器>服务器配置>填报页面设置」中添加加载结束事件(引入js文件或粘贴代码都行),此时模板web属性里要选择采用服务器设置。
JS代码如下:
FR.WritePane.prototype.dealWithPasteContent = function(value) {
//移除尾部的换行符
if (value.endWith('\n')) {
value = value.substring(0, value.length - 1);
}
return this._parsePasteContentToArray(value);
}
FR.WritePane.prototype.cellPasteCheck = function(cell, cev, editorO) {
return cev !== null && !editorO.disabled && editorO.editable !== false && editorO.directEdit !== false;
}
4.2 复制粘贴excel多个空白列,最后一列无法粘贴
问题描述:
复制的数据中存在空白列,复制的空白列无法粘贴进入模板,如下图所示:
解决方案:
如果需要复制粘贴 Excel 中的空白行或空白列,需要在加载结束事件中添加的JS,JAR版本要求在2019-12-05以上
FR.WritePane.prototype.dealWithPasteContent = function(value) {
if (value.endWith('/n')) {
value = value.substring(0, value.length);
}
return this._parsePasteContentToArray(value);
}
FR.WritePane.prototype.cellPasteCheck = function(cell, cev, editorO) {
return cev !== null && !editorO.disabled && editorO.editable !== false && editorO.directEdit !== false;
}
FR.WritePane.prototype._parsePasteContentToArray = function(value) {
var rows = [], start_index = 0, flag = false;
for (var i = 0; i < value.length; i++) {
var cr = value.charAt(i);
if (cr === '"') {
flag = !flag;
} else if (cr === '\n' && !flag) {
rows.push(value.substring(start_index, i)
.replaceAll('""', '\n\r')
.replaceAll('"', '')
.replaceAll('\n\r', '"'));
start_index = i + 1;
}
}
if (start_index < value.length) {
rows.push(value.substring(start_index, value.length)
.replaceAll('""', '\n\r')
.replaceAll('"', '')
.replaceAll('\n\r', '"'));
}
for (var i = 0; i < rows.length; i++) {
rows[i] = rows[i].split('\t');
}
return rows;
}
4.3 不支持直接显示控件
如果勾选了「直接显示控件」,粘贴操作就会失效。