Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Google apps script Google Spreedsheet上的单元格引用超出范围_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script Google Spreedsheet上的单元格引用超出范围

Google apps script Google Spreedsheet上的单元格引用超出范围,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我试图编写一个脚本,在工作表中的一列上迭代,将单元格值与其他单元格进行比较,并在它们相等时更改背景色 我对JS和google脚本都是新手,所以我遇到了for循环的问题,因为我总是会遇到“单元格引用超出范围”的错误。以下是我目前的代码: function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Exibicao"); var range =

我试图编写一个脚本,在工作表中的一列上迭代,将单元格值与其他单元格进行比较,并在它们相等时更改背景色

我对JS和google脚本都是新手,所以我遇到了for循环的问题,因为我总是会遇到“单元格引用超出范围”的错误。以下是我目前的代码:

function onOpen()
{  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Exibicao");

  var range = sheet.getDataRange();
  var rows = range.getNumRows();

  for(var i = 0; i <= rows; i++)
  {
    var cell = range.getCell(i, 13);

    var option1 = cell.offset(0, -3);
    var option2 = cell.offset(0, -2);
    var option3 = cell.offset(0, -1);

    if(option1.getValue() == cell.getValue()){
      option1.setBackground("#b6d7a8");
    }else if(option2.getValue() == cell.getValue()){
      option2.setBackground("#b6d7a8");
    }else if(option3.getValue() == cell.getValue()){
      option3.setBackground("#b6d7a8");
    }
  }
}
函数onOpen() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getSheetByName(“Exibicao”); var range=sheet.getDataRange(); var rows=range.getNumRows();
对于(var i=0;i哪一行抛出了错误?记录每一行之后的单元格位置可以让您更好地了解它的越界位置

var cell = range.getCell(i, 13);
Logger.log( cell.getA1Notation() );

var option1 = cell.offset(0, -3);
Logger.log( option1.getA1Notation() );
再看一眼,我觉得你需要这样的东西

function onOpen()
{  

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Exibicao");

  var range = sheet.getDataRange();
  var rows = range.getNumRows();

  // Get values all at once
  var values = range.getValues();
  var row, len, bgs = [], rowBg = [];

  for(row = 0, len = values.length; row < len; row++) {
    var cell = values[row][12];
    var option1 = values[row][9];
    var option2 = values[row][10];
    var option3 = values[row][11];

    rowBg = ['white', 'white', 'white'];
    if( option1 == cell ){
      rowBg[0] = "#b6d7a8";
    }else if( option2 == cell ){
      rowBg[1] = "#b6d7a8";
    }else if( option3 == cell ){
      rowBg[2] = "#b6d7a8";
    }

    bgs.push(rowBg);
  }
  //Logger.log(bgs)
  // Set background colors all at once, start at the top left
  sheet.getRange(1, 10).offset(0, 0, bgs.length, bgs[0].length).setBackgrounds(bgs);
}
函数onOpen() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getSheetByName(“Exibicao”); var range=sheet.getDataRange(); var rows=range.getNumRows(); //一次获取所有值 var values=range.getValues(); 变量行,len,bgs=[],rowBg=[]; for(行=0,len=values.length;行我可能错了,但我敢打赌问题在于您的循环声明:

for(var i = 0; i <= rows; i++)
如果这不起作用,试试这个:

for(var i = 1; i <= rows; i++)

for(var i=1;很好,在
getCell()
的上下文中,参数是基于一个的,我认为这就是错误产生的地方。因此,也许应该使用
for(var i=1;对不起,错误发生在
var cell=range.getCell(i,13)
但是我按照AdamL告诉我的做了,将for改为
I=1
,它成功了,谢谢。关于进入循环的方法,你有什么建议吗?是的,添加了一个建议。看看它是否有意义。当然,像Adam逃避的那样更有效。你知道表单中新的内置条件格式现在可以做到这一点,对吗?我知道我知道,但那是为了一张旧床单,所以我必须按剧本做
for(var i = 1; i <= rows; i++)