我想找到范围内的第一个空白单元格。此代码有效,但它似乎与列B链接。
function selectFirstEmptyRow() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sheet.setActiveSelection(sheet.getRange("D"+getFirstEmptyRow()))
}
function getFirstEmptyRow() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var row = 26;
for (var row=26; row<values.length; row++) {
if (!values[row].join("")) break;
}
return (row+1);
}
当我运行它时,它选择D中的单元格,但是根据B找到空白。
假设我们正在按行10-20进行操作。在B栏中,有10-12个东西。我运行它(我应该在D上运行),它将选择D13(因为B10中有东西:B12。即使D中没有任何内容,也应该选择D10。
UPDATE :::
所以我做了一些你建议的修改。
function selectFirstEmptyRow() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sheet.setActiveSelection(sheet.getRange("B"+getFirstEmptyRow()))
}
function getFirstEmptyRow() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
//getRange(row, column, numRows, numColumns)
var range = sheet.getRange(28, 2, lastRow - 28, 1);
var values = range.getValues();
var row = 28;
for (var i=0; i<values.length; i++) {
if (!values[i].join(" ")) break;
}
return (row+1);
}
它总是选择第29行(我假设因为它从28开始而且我有返回(行+ 1)?
答案 0 :(得分:0)
这一行:
var row = 26;
硬编码起始编号为26.循环计数从26开始:
for (var row=26; row<values.length; row++) {
如果您希望循环循环从10的起始行到最后一行的次数,则将该行更改为:
for (var i=0; i<values.length; i++) {
您的代码实际上是两次定义变量row
。一次在for
循环之上,一次在for
循环之内。 row
变量根本不应该在循环中使用。 for
循环需要它自己的计数器。
在这行代码中:
for (var row=26; row<values.length; row++) {
JavaScript Array join()方法从数组中返回一个字符串。
此代码行中的getDataRange()
方法:
var range = sheet.getDataRange();
返回工作表中行和列的 所有 的二维数组。范围从工作表中数据的左上角开始。如果要将列排除到列C并包括C列,请使用不同的列来获得不同的范围。
所以,我会改变这一行:
var range = sheet.getDataRange();
可能将代码更改为:
var lastRow = sheet.getLastRow();
//getRange(row, column, numRows, numColumns)
var range = sheet.getRange(10, 4, lastRow - 10, 1);
上面的代码将获得一个二维数据数组,从第10行第4列开始,比行总数少10行,并且只从D列获得一列数据(第4列)< / p>