FR|FineReport|JS|自定义按钮|批量填充|向下填充

楼主
我是社区第2604695位番薯,欢迎点我头像关注我哦~

点击单元格,获取相关属性存入页面,点击按钮时,取出相关属性并向下填充

最终效果是这样的,先任意点击一个有值的单元格,然后再点击按钮“批量填充”,就能实现将刚才点击的单元格值复制到同一列下方所有单元格中了。

1、模板属性增加事件-加载结束,获取所选单元格相关属性并存入页面

这里是将属性存入body的自定义属性中,相当于页面全局变量

// 监听当前选中单元格行列号
_g().on("cellselect", function(td) {
	//设置单元格被选中时的监听事件  
	// 索引从1开始
	var rowtd = _g().curLGP.getTDRow(td);
	var coltd = _g().curLGP.getTDCol(td);
//	console.log(rowtd);
//	console.log(coltd);
	// 给body增加自定义属性  
	document.body.dataset.myrow = rowtd;
	document.body.dataset.mycol = coltd;
	document.body.dataset.mytdid = td.id;
})

 

2、增加一个按钮,增加事件-点击,取出相关属性并向下填充

这里取tbody下的元素搜索,不是全部元素,因为多sheet时页面有多个tbody

(由于帖子里的alert触发了WAF导致不能保存,所以这里注释掉了)

// 这里-1是因为后面columnRow2CellStr函数的参数下标是从0开始
var rowtd = document.body.dataset.myrow-1;
var coltd = document.body.dataset.mycol-1;
var tdid = document.body.dataset.mytdid; 
var cellstr = FR.columnRow2CellStr({col:coltd, row:rowtd});
var culvalue = _g().getCellValue(cellstr);
console.log("当前单元格属性||rowtd:", rowtd, "coltd:", coltd, "cellstr:", cellstr, "culvalue:", culvalue, "tdid:", tdid);

var currentTd = document.getElementById(tdid);
if (!currentTd) {
	logmsg = "未找到当前所选元素!";
	console.log(logmsg);
   	// alert(logmsg);
   	return;
}

// 获取【当前 td 最近的父级 tbody】(多表格也不会乱)
var targetTbody = currentTd.closest('tbody');
if (!targetTbody) {
	logmsg = "未找到当前所选元素的表格!";
	console.log(logmsg);
   	// alert(logmsg);
   	return;
}

// 获取这个 tbody 下【所有 tr 的总数】(只在这个范围内循环)
var totalRows = targetTbody.querySelectorAll('tr').length;
if (totalRows <= rowtd + 1) {
	logmsg = "当前已是最后一行,无需向下填充!!";
	console.log(logmsg);
   	// alert(logmsg);
   	return;
}

// ==============================================
// 开始批量填充(只在当前 tbody 内部、总行数内循环)
// ==============================================
var fillCount = 0;
var startRow = rowtd + 1; // 从下一行开始

// 循环:从下一行 到 tbody 最后一行
for (var i = startRow; i < totalRows; i++) {
   // 生成单元格编号(A2、A3...)
   var cellCode = FR.columnRow2CellStr({
       col: coltd,
       row: i
   });

   // 查找:当前 tbody 下,以 编号- 开头的 td
   var td = targetTbody.querySelector('td[id^="' + cellCode + '-"]');
   if (!td) continue; // 找不到就跳过

   // 填充值(用你指定的函数)
   _g().setCellValue(cellCode, culvalue);
   fillCount++;
}
// alert("批量填充完成!\n当前表格共填充:" + fillCount + " 个单元格");

 

效果不错

合并单元格也ok

 

为什么发个帖子要这样限制,一会儿触发WAF不能提交,一会儿说有不良内容无法保存,真是大大降低帆软社区发帖的积极性……

 

 

分享扩散:

沙发
发表于 2026-4-29 10:31:46
有可直接用的cpt参考一下吗,看不太懂
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表