【问题标题】:Optimization for alternate background rows color in Google SpreadsheetGoogle 电子表格中交替背景行颜色的优化
【发布时间】:2016-06-16 18:51:01
【问题描述】:

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

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    你可以使用新的applyRowBanding():

    将默认的行带主题应用于范围。默认情况下,条带有页眉,没有页脚颜色。

    例子:

    function setColors() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var range = ss.getRange("A1:Z1000");
      
      // first remove any existing alternating colors in range to prevent error "Exception: You cannot add alternating background colors to a range that already has alternating background colors."
      range.getBandings().forEach(banding => banding.remove());
      // apply alternate background colors
      range.applyRowBanding();
    }
    

    结果:

    更多选项另见

    【讨论】:

      【解决方案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 展示了如何像上面那样引用整行。

      【讨论】:

      • @PavelValeriu 现在试试吧!
      【解决方案3】:

      您可能还想查看此电话:

      https://developers.google.com/apps-script/reference/spreadsheet/range#getbackgrounds

      和它的姐妹电话

      https://developers.google.com/apps-script/reference/spreadsheet/range#setbackgroundscolor

      这将为所有背景颜色的整个范围返回一个二维数组。

      使用它,您可以获得整个范围的数组,以 2 为增量逐步遍历它,并将每行的所有元素设置为您希望的备用背景颜色(可能使用此处描述的方法之一:@ 987654323@)。然后在最后调用 setBackgroundColors(color) 来设置颜色。

      这样一来,您最后只需调用一次即可实际更新电子表格 - 这是最耗时的部分,也是最会减慢您的原始代码的部分。

      【讨论】:

        【解决方案4】:

        虽然您要求提供 Google Apps 脚本解决方案,但我更喜欢通过公式设置条件格式,而不是作为脚本解决方案 - 我觉得它更简单、更快且更直观。

        =mod(A1,2)=0
        

        将格式化定义范围内的所有偶数行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-28
          • 2014-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多