我有一张包含大约20张工作表的Google电子表格,可以使用一些importrange函数创建报告。我试图通过查看编辑中的所有工作表并在任何包含内容的单元格周围放置边框但是它似乎不起作用来使这个脚本工作。
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var numSheets = ss.getNumSheets(); // count of sheets
// for every sheet
for( var s = 0; s < numSheets ; s++ ) {
var sheet = sheets[s]; // passes an individual sheet object to var sheet
//Add borders to non-empty
var range = SpreadsheetApp.getActiveSheet().getDataRange();
//set border
range.setBorder(false, false, false, false, false, false);
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] !== "") {
range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true);
}
}
}
}
}
答案 0 :(得分:1)
我建议尝试使用此功能:
function onEdit(e){
var ss = SpreadsheetApp.getActiveSheet();
var range = ss.getDataRange();
var maxCol = range.getLastColumn();
var maxRow = range.getLastRow();
for (var i=0; i<maxRow; i++)
{
for (var j=0; j<maxCol; j++)
{
if(!ss.getRange(i+1, j+1).isBlank()) //Check whether the cell is blank
{
ss.getRange(i+1, j+1).setBorder(true, true, true, true, true, true);
}
}
}
}
原因是,每当您对任何工作表进行编辑并遍历所有工作表时,您编写的函数都会运行。也就是说,如果您在Sheet1上编辑单元格A14,它将遍历所有20张纸张,检查所有纸张的整个范围的边框。然而,它们之前的运行可能已经存在边界,而其他19张表中没有任何变化。这样,只要在工作表上进行编辑,它就会遍历当前工作表的边框。但是,我想给你注意2点你当前的功能:
根据您所代表的数据类型,这可能是您想要的,也可能不是您想要的。但是,如果我将功能简化了一点并使用了以下功能:
function onEdit(e){
var ss = SpreadsheetApp.getActiveSheet();
var range = ss.getDataRange();
range.setBorder(true, true, true, true, true, true);
}
第一个场景通过为每个拥有数据的单元格添加边框,完全符合您的描述要求。但是,第二个只会在最大行和列的数据表范围内添加边框。希望这有帮助!