javascript - 用于“标记”非空白行的 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
}
}
}
在此先感谢您的帮助。
解决方案
您的行将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');
小心:
确保您确实想要将数据设置到最后一个非空白行(这意味着覆盖已经存在的数据)。
推荐阅读
- c# - 对象在错误的位置实例化并且每次都在同一个地方
- python - 导入模块时如何解决 Jupyter 中的“IndentationError: expected an indented block”?
- java - 并发方法的工作时间比简单方法长得多。为什么?
- python - 如何正确解析 json?
- vue.js - 使用 plotlyjs 和 vue 将点放在箱线图上
- angular - 如何在 Slickgrid 中设置最后添加的行
- html - Django不打印发布请求
- php - Laravel 政策不会自动应用于模型
- sql - 如何使用 Hive 解析多个嵌套的 JSON 数组
- proxy - FIWARE 上下文提供程序可以用于 QuantumLeap 的历史数据吗?