|
应该和我这个类似,用帆软纯内置的父格,好像做不到想要的效果: 当前可以设置为:
A列第一个最父格可以设置 分组 B列设置列表, C列设置列表, 然后用JS去改变B,C列的行结构。相同的进行合并合并处理。
后面的分组其实已经没用了,父格是列表,后面的设置分组也用,MID是用来作为分组的依据。

下面是一个示例代码,可以参考一下,我这个是处理数字的,其他的需要自己调整一下,(PS:不要在意里面的变量名称,当时好多是乱取的,没注释的地方,可以问一下AI)。
setTimeout(function() {
var firstRow = 3;
var totalRow = $("td[id^=B]:last").attr("row");
var tableId = $('.frozen-table').find('table').first().attr('id');
if (typeof(tableId) === "undefined") {
tableId = 0;
}
totalRow = parseInt(totalRow);
var valueN = 0;
var valueQ = 0;
for (var i = firstRow; i < totalRow; i++) {
var v = _g().getCellValue(0, 2, i);
var v1 = v.slice(0, 1);
// 合并单元格
if (v1 == 'S') {
var row = $('td[id=C' + (i + 1) + '-0-' + tableId + ']').attr('style');
if (row == 'display:none;') {
// console.log("i:", i, " 没rowspan")
var rows = cknum('C', (i + 2), tableId)
// console.log("i:", i, " Srowspan:", rows)
for (var j = 1; j < rows; j++) {
$('td[id=N' + (i + j + 1) + '-0-' + tableId + ']').remove();
$('td[id=O' + (i + j + 1) + '-0-' + tableId + ']').remove();
$('td[id=P' + (i + j + 1) + '-0-' + tableId + ']').remove();
$('td[id=T' + (i + j + 1) + '-0-' + tableId + ']').remove();
$('td[id=V' + (i + j + 1) + '-0-' + tableId + ']').remove();
}
$('td[id=N' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=O' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=P' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=T' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=V' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
}
} else if (v1 == 'H') {
var row = $('td[id=C' + (i + 1) + '-0-' + tableId + ']').attr('style');
if (row == 'display:none;') {
// console.log("i:", i, " 没rowspan")
var rows = cknum('C', (i + 2), tableId)
// console.log("i:", i, " Hrowspan:", rows)
for (var K = 1; K < rows; K++) {
$('td[id=Q' + (i + K + 1) + '-0-' + tableId + ']').remove();
$('td[id=R' + (i + K + 1) + '-0-' + tableId + ']').remove();
$('td[id=S' + (i + K + 1) + '-0-' + tableId + ']').remove();
$('td[id=U' + (i + K + 1) + '-0-' + tableId + ']').remove();
$('td[id=W' + (i + K + 1) + '-0-' + tableId + ']').remove();
}
$('td[id=Q' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=R' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=S' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=U' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
$('td[id=W' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);
}
} else {
continue;
}
}
var valueN = 0;
var valueQ = 0;
// var valueP = 0;
var valueS = 0;
var valueQ = 0;
// var valueT = 0;
var valueU = 0;
for (var i = firstRow; i <= totalRow; i++) {
var cv = _g().getCellValue("C" + i);
// console.log("cv:", cv,i)
if (!cv) {
var v = getMergeCellValue("C", i);
var ckv = v.slice(0, 1);
if (ckv == "S") {
var Qvalue = parseInt(_g().getCellValue("Q" + i));
var Svalue = parseInt(_g().getCellValue("S" + i));
// var Svalue = parseInt(_g().getCellValue("T" + i));
if (isNaN(Qvalue)) Qvalue = 0;
valueQ += Qvalue;
if (isNaN(Svalue)) Svalue = 0;
valueS += Svalue;
// if(isNaN(Tvalue)) Tvalue = 0;
// valueT += Tvalue;
}
if (ckv == "H") {
var Nvalue = parseInt(_g().getCellValue("N" + i));
// var Pvalue = parseInt(_g().getCellValue("P" + i));
var Uvalue = parseInt(_g().getCellValue("U" + i));
if (isNaN(Nvalue)) Nvalue = 0;
valueN += Nvalue;
// if(isNaN(Pvalue)) Pvalue = 0;
// valueP += Pvalue;
if (isNaN(Uvalue)) Uvalue = 0;
valueU += Uvalue;
}
} else {
var Nvalue = parseInt(_g().getCellValue("N" + i));
if (isNaN(Nvalue)) Nvalue = 0;
var Qvalue = parseInt(_g().getCellValue("Q" + i));
if (isNaN(Qvalue)) Qvalue = 0;
// var Pvalue = parseInt(_g().getCellValue("P" + i));
// if(isNaN(Pvalue)) Pvalue = 0;
var Svalue = parseInt(_g().getCellValue("S" + i));
if (isNaN(Svalue)) Svalue = 0;
// var Tvalue= parseInt(_g().getCellValue("T" + i));
// if(isNaN(Tvalue)) Tvalue = 0;
var Uvalue = parseInt(_g().getCellValue("U" + i));
if (isNaN(Uvalue)) Uvalue = 0;
valueN += Nvalue;
valueQ += Qvalue;
valueS += Svalue;
// valueP += Pvalue;
// valueT += Tvalue;
valueU += Uvalue;
}
}
// console.log("totalRow:", (totalRow+1), "tableId:", tableId)
// console.log("valueN:", valueN, "valueQ:", valueQ)
_g().setCellValue("N" + (totalRow + 1), valueN);
_g().setCellValue("Q" + (totalRow + 1), valueQ);
// _g().setCellValue("P" + (totalRow+1), valueP);
_g().setCellValue("S" + (totalRow + 1), valueS);
// _g().setCellValue("T" + (totalRow+1), valueT);
_g().setCellValue("U" + (totalRow + 1), valueU);
// originalToast({message:"消息内容",type:"success"});
FR.Msg.toast({
message: "加载完成",
type: "success"
})
}, 200)
function cknum(col, row, tableId, value = 1) {
var style = $('td[id=' + col + row + '-0-' + tableId + ']').attr('style');
// console.log("style:", typeof(style))
if (typeof(style) != 'undefined') {
return value;
} else {
value++;
value = cknum(col, row + 1, tableId, value);
}
return value;
}
function getMergeCellValue(col, row, totalRow) {
if (row > totalRow) {
// value++;
return value;
}
// 尝试获取指定列和行的单元格值
var value = _g().getCellValue(col + (row - 1));
// 如果当前值为空,递归调用cknum,行号减1,向上查找值
if (!value) {
value = getMergeCellValue(col, row - 1);
}
// 返回最终找到的值
return value;
}
|