Google apps script Google Spreedsheet上的单元格引用超出范围
我试图编写一个脚本,在工作表中的一列上迭代,将单元格值与其他单元格进行比较,并在它们相等时更改背景色 我对JS和google脚本都是新手,所以我遇到了for循环的问题,因为我总是会遇到“单元格引用超出范围”的错误。以下是我目前的代码: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 =
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++)