【问题标题】:Trigger a function if the number of rows increases - app script如果行数增加,则触发一个函数 - 应用程序脚本
【发布时间】:2022-12-11 18:53:06
【问题描述】:
- 我想要我的函数 >> sendSlackMessage;仅当工作表中的行数增加时才触发,
- 我正在使用这里的会员友情提供的代码,
但是,每次代码运行时(每分钟的时间间隔),行数属性都会增加一个错误的数字;例如(将旧行存储为 37.0,而它应该仅为 34.0)
这里可能是什么问题?或者我怎样才能改进这段代码来解决这个问题?
function checkNewRows() {
var sp = PropertiesService.getScriptProperties();
var oldRows = sp.getProperty("rows") || 0;
var newRows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main").getLastRow();
if (newRows > oldRows) {
sp.setProperty("rows", newRows);
sendSlackMessage();
}
}
【问题讨论】:
标签:
google-apps-script
google-sheets
【解决方案1】:
您显示的代码看起来不错。 rows 属性不告诉数据中的行数,但最后一行号保存数据。只要您始终以相同的方式使用 rows 属性,那应该不会对您获得的结果产生影响。
如果您的 sendSlackMessage() 函数也读取 rows 属性并将其解释为不同于最后一行行号的其他内容,您可能希望使用函数参数来传达最后一行的行号而不是读写属性,像这样:
sendSlackMessage(newRows);
如果你绝对需要记录数据行数而不是最后一行的行号,你可以使用这样的东西:
function checknumRows() {
const sheet = SpreadsheetApp.getActive().getSheetByName('Main');
const props = PropertiesService.getScriptProperties();
const oldNumRows = props.getProperty('rows') || 0;
const numRows = sheet.getLastRow() - sheet.getFrozenRows();
if (numRows > oldNumRows) {
props.setProperty('rows', numRows);
sendSlackMessage(numRows);
}
}
要设置标题行数,请使用查看 > 冻结.