Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌电子表格中背景行颜色的优化_Javascript_Google Apps Script - Fatal编程技术网

Javascript 谷歌电子表格中背景行颜色的优化

Javascript 谷歌电子表格中背景行颜色的优化,javascript,google-apps-script,Javascript,Google Apps Script,我使用Google Apps Script为电子表格中的偶数行设置了不同的背景色,但速度非常慢……有什么办法可以优化它吗 电子表格示例: 进入工具->脚本编辑器查看GS代码 代码如下: function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var range = ss.getRange("A1:Z1000"); ss.setActiveRange(range); var totalRows

我使用
Google Apps Script
为电子表格中的偶数行设置了不同的背景色,但速度非常慢……有什么办法可以优化它吗

电子表格示例:

进入工具->脚本编辑器查看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++;
  }
}
函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var范围=ss.getRange(“A1:Z1000”);
ss.setActiveRange(范围);
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(行
逐行而不是逐个单元格。 也可以直接在要更改的行上循环

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");
  }
}
函数setBackgroundColorOnEvenLines(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var totalRows=sheet.getMaxRows();
var totalColumns=sheet.getMaxColumns()

对于(var i=2;i当您要求使用Google Apps脚本解决方案时,我更喜欢通过公式设置条件格式,而不是将其作为脚本解决方案进行设置-我觉得这样更简单、更快、更直观

=mod(A1,2)=0

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

您也可以查看此调用:

还有它的姐妹电话

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

使用此方法,您可以获得整个范围的数组,以两个为增量逐步遍历,并将每行的所有元素设置为所需的备用背景颜色(可能使用此处描述的方法之一:)。然后在末尾调用SetBackgroundColor(颜色)来设置颜色

这样,您只需在最后调用一次即可实际更新电子表格,而这一部分将花费最多的时间,并且会最大程度地降低原始代码的速度。

您可以使用新的:

对区域应用默认的行带状主题。默认情况下,带状有页眉颜色,没有页脚颜色

例如:

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();
}
结果:

有关更多选项,请参见


@PavelValeriu现在就试试吧!