优化Google电子表格中的备用背景行颜色

时间:2016-06-16 18:51:01

标签: javascript google-apps-script

我使用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++;
  }
}

4 个答案:

答案 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();
}

结果:

enter image description here

更多选项参见

答案 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)来设置颜色。

通过这种方式,您只需拨打一次电话就可以在最后更新电子表格 - 而这部分将占用最多的时间,而这会最大程度地降低原始代码的速度。