使用谷歌表格应用程序脚本,是否可以在一系列单元格中获取X单元格,如下所示:
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cells = sheet.getRange("D6:BF100"); // the range
for (var x = 0; x < 100; i++) {
var cell = cells[row][x]; // this is the line that doesn't work
if (someCondition(x)) {
cell.setBackground("red");
}
}
我不想更改每个单元格的颜色,只想更改具有正确条件的单元格。
我知道可以做这样的事情:
var cell = sheet.getRange(row+i);
但是这种方法需要很长时间才能完成for循环,因为有数百个细胞需要扫描。我宁愿只在整个范围内使用 getRange 一次(而不是一次只有一个单元格(,然后从该范围(它应该制作一个 2d 数组吗?我认为这会快得多。
有没有不同的方法可以更快地做到这一点,或者我只需要这样做:var cell = cells[row][x];
不同的方法。
谢谢!
看起来你的 for 循环构造不正确。您递增未在任何地方定义或使用的变量 i。此外,您可以使用变量行而不定义它。
这需要很长时间,因为每次调用cells.getRange()
时都必须查询工作表 相反,您可以使用cells.getValues()
查询一次以获取整个范围,然后一次更改一个满足条件的单元格颜色。
尝试以下操作;
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cells_range = sheet.getRange("D6:BF100");
var cells_values = cells_range.getValues();
for (var col = 1; col <= cells_values[0].length; col++) {
for (var row = 1; row <= cells_values.length; row++) {
if (someCondition(cells_values[row][col])) {
cells_range.getCell(row, col).setBackground("red");
}
}
}
这只是我自己的答案,以帮助可能遇到这个问题的用户。
一旦你有一系列单元格,像这样:
var range = sheet.getRange("your range");
您可以执行此操作以获取特定单元格:
var cell = range.getCell(row, col);