【问题标题】:Google Script For "Marking" Non Blank Rows用于“标记”非空白行的 Google 脚本
【发布时间】:2020-11-05 03:57:12
【问题描述】:

我正在尝试创建一个谷歌脚本,它将查看我的工作表,获取数据长度,然后在 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
 }

}
}

提前感谢您的帮助。

【问题讨论】:

  • 1) 您的链接显示拒绝访问。 2)您打算如何调用该函数?从脚本编辑器手动还是通过自定义菜单?还是通过某些事件? “我需要知道什么时候有新行出现”——只要表中确实发生了某些更改,您就可以运行脚本。

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


【解决方案1】:

您的行 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');

小心:

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

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了这项任务。您需要在“P”列的每个单元格中写“已处理”还是仅在其末尾写“已处理”?

    这里是获取“A”列的长度,遍历“P”列并写入“已处理”的更正函数:

    function MarkrowsProcessed() {
      var spr = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spr.getSheetByName("Sheet1");
      
      // get data of column 'A'
      var column_A = spr.getRange('A:A').getValues();
    
      // get a len of column 'A'
      var len = column_A.filter(String).length; // it works if the column has no empty cells inside  
      
      // get data of column 'P'
      var column_P = spr.getRange('P:P').getValues();  
      
      // loop trough data of column 'P' (until last row in column 'A') and write 'Processed'
      for (var i=0; i<len; ++i) 
      {
        if (column_P[i] != 'Processed') sheet.getRange('P' + (i+1)).setValue('Processed');
      }
    }
    

    如果您需要工作表上的最后一行(不是“A”列中的最后一行),那就更容易了。您需要在函数中更改一行:

      var len = sheet.getLastRow();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多