首页 > 解决方案 > 用于“标记”非空白行的 Google 脚本

问题描述

我正在尝试创建一个谷歌脚本,它将查看我的工作表,获取数据的长度,然后在 P 列中标记“已处理”。我不能使用数组/if 公式执行此操作,因为我需要知道何时新行进来了,还没有处理。我当前的脚本只是将永无止境的数据写入 P 列。我希望它只写入基于 A 列的最后一个非空白行。

这是我不起作用的示例表和脚本。

https://docs.google.com/spreadsheets/d/13Q4I91O4vMDSCHwAMG0DOLLkbzLCxWiQzbugJ-6nPjs/edit?usp=sharing

 function MarkrowsProcessed() {
  var spr = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spr.getSheetByName("Sheet1");
  var column = spr.getRange('A:A').getValues();

  for (var i = 0; i < column.length; ++i) 
  {
    var rowData = column[i];
    var emailSent = rowData[16];
    if (emailSent != 'Processed') 
    {       
   sheet.getRange(i+1, 16, column.length, 1).setValue('Processed');// Make sure the cell is 
updated right away in case the script is interrupted
 }

}
}

在此先感谢您的帮助。

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您的行将sheet.getRange(i+1, 16, column.length, 1).setValue('Processed')值分配给静态行。

  • 要更改它,一种优雅的方法是从您确定它不为空的行开始,然后使用getNextDataCell()从那里找到最后一个非空白行。

样本:

var notBlank = sheet.getRange("A1");
var lastRow = notBlank.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow():
sheet.getRange(lastRow, 16, column.length, 1).setValue('Processed');

这将找到第一个空白行之前的最后一行(可能是非空行之间的分散空白行)。

  • 如果要查找工作表的最后一行,请使用getLastRow()

样本:


var lastRow = sheet.getLastRow();
sheet.getRange(lastRow, 16, column.length, 1).setValue('Processed');

小心:

确保您确实想要将数据设置到最后一个非空白行(这意味着覆盖已经存在的数据)。


推荐阅读