我对水平线及其位置感到满意。所有边框均基于 C/D 列 (3/4),该列在 C-J 上方添加线条,然后在该行上添加一条垂直线。
我想将垂直边框扩展到正在使用的单元格的所有行。让它看起来更整洁,并包含与其他标题相同的边框。
目前我有这段代码 - 然而我对任何类型的编码都是新手,并设法通过一些运气和大量测试到达这里。我还想删除第 36 行上的行,我不知道它是如何到达那里或为什么它在那里。
任何帮助将不胜感激。
function onEdit(e) {
if (e.source.getActiveSheet().getSheetName() == "Jobs") {
var sheet = e.source.getActiveSheet();
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
var values = sheet.getRange(3, 4, sheet.getLastRow() - 1, 1).getValues();
var rangeList = values.reduce(function(ar, e, i) {
if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
ar.push("C" + (i + 3) + ":J" + (i + 3));
}
return ar;
}, [])
rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation());
sheet.getRangeList(rangeList).setBorder(true, true, null, true, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THIN);
}
}
虽然我不完全确定我能理解您的预期结果,但编写下面的脚本是为了检查您在问题中指定的条件,例如为标题部分提供相同的边框设置并删除第 36 行上不需要的边框,最后,在具有占用单元格的所有行上设置相同的边框样式。
代码
function onEdit(e) {
if (e.source.getActiveSheet().getSheetName() == "Jobs") {
var sheet = e.source.getActiveSheet();
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
var lastRow = sheet.getLastRow();
for (var row = 3; row <= lastRow; row++) {
var range = sheet.getRange(row, 3, 1, 8);
if (range.getValues()[0].some(cell => cell !== "")) {
range.setBorder(true, true, null, true, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THIN);
}
}
}
}
输出示例