我使用Google Apps Script
为电子表格表中的偶数行设置了不同的背景颜色,但它非常非常慢......任何想法如何优化它?
示例电子表格:https://docs.google.com/spreadsheets/d/1yRotjooCRpuuSTjjgFEzw4xxqPLJwMZJPchYQeNvUyw/edit?usp=sharing
转到工具 - >查看GS代码。脚本编辑器......
这是代码:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRange("A1:Z1000");
ss.setActiveRange(range);
var totalRows = SpreadsheetApp.getActiveRange().getNumRows();
var totalColumns = SpreadsheetApp.getActiveRange().getNumColumns();
var startRow = SpreadsheetApp.getActiveRange().getRow();
var startColumn = SpreadsheetApp.getActiveRange().getColumn();
var sheet = SpreadsheetApp.getActiveSheet();
var row = startRow;
while (row < totalRows+startRow)
{
var column = startColumn;
while (column < totalColumns+startColumn){
if(row%2 == 0){
sheet.getRange(row, column).setBackground("#F3F3F3");
}
column++;
}
row++;
}
}
答案 0 :(得分:3)
您可以使用新的applyRowBanding()
:
将默认的行带主题应用于范围。默认情况下,条带具有页眉而没有页脚颜色。
示例:
function setColors() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRange("A1:Z1000");
// range.clearFormat(); // uncomment if you got error "Exception: You cannot add alternating background colors to a range that already has alternating background colors."
// apply alternate background colors
range.applyRowBanding();
}
结果:
更多选项参见
答案 1 :(得分:2)
逐行而不是逐个单元格。 您也可以直接在要更改的行上循环。
function setBackgroundColorOnEvenLines() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var totalRows = sheet.getMaxRows();
var totalColumns = sheet.getMaxColumns()
for (var i=2; i <= totalRows; i+=2){
sheet.getRange(i, 1, 1, totalColumns).setBackground("#F3F3F3");
}
}
This reference显示如何引用如上所示的整行。
答案 2 :(得分:1)
虽然您已经要求提供Google Apps脚本解决方案,但我更倾向于按公式设置条件格式,而不是将其作为脚本化解决方案 - 我觉得它不那么复杂,更快速,更直观。
=mod(A1,2)=0
将格式化定义范围内的所有偶数行。
答案 3 :(得分:1)
您可能也想看一下这个电话:
https://developers.google.com/apps-script/reference/spreadsheet/range#getbackgrounds
和姐姐打电话
https://developers.google.com/apps-script/reference/spreadsheet/range#setbackgroundscolor
这将返回所有背景颜色的整个范围的二维数组。
使用此方法,您可以获得整个范围的数组,以2为增量逐步执行,并将每行的所有元素设置为您希望的备用背景颜色(可能使用此处描述的方法之一:{ {3}})。然后在最后调用setBackgroundColors(color)来设置颜色。
通过这种方式,您只需拨打一次电话就可以在最后更新电子表格 - 而这部分将占用最多的时间,而这会最大程度地降低原始代码的速度。