Google表格脚本 - 获取第一个空白单元格

时间:2015-03-20 13:12:56

标签: javascript google-apps-script google-sheets

我想找到范围内的第一个空白单元格。此代码有效,但它似乎与列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)?

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>