google-apps-script - 关闭工作表时如何使用基于时间的触发器执行代码
问题描述
我正在尝试执行下面的代码,我希望它在午夜触发,而不是在我更改第 8 列时执行。我希望当我更改第 8 列时,它直到午夜才移动该行。任何帮助将不胜感激。
function TO_List() {
// moves a row from a sheet to another when a magic value is entered in a column
// adjust the following variables to fit your needs
// see https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var columnNumberToWatch = 8;
// column A = 1, B = 2, etc…
var valueToWatch = 'List';
var sheetNameToMoveTheRowTo = 'List';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
解决方案
这看起来像一个容器绑定脚本,因此 Spreadsheet.getActive() 可以正常工作,因为您必须在触发器设置中指定电子表格,但 getActiveSheet() 将始终返回与 Spreadsheet.getSheets()[0] 相同的工作表(最左边sheet) 所以如果你想从触发器运行,你可能必须使用 getSheetByName() 。
我不确定,但这可能接近你想要的:
function active_to_List() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
var tsh=ss.getSheetByName('List');
var d=0;
for(var i=0;i<vA.length;i++) {
if(vA[i][7]=="List") {
tsh.appendRow(vA[i]);
tsh.deleteRow(i+1-d++);
}
}
}
推荐阅读
- java - Hashmap 无法转换为 firebase 用户
- kubernetes - Mosquitto 无法在我的 Kubernetes 集群中分配请求的地址
- sql-server - 复制到新数据库时的 SQL Server 2012 性能问题
- smartcontracts - 如何使用 RIDE 函数解码编码附件?
- corda - corda 的主网还是我们自己的网络?什么时候用哪个?
- python - 添加特定的新行直到获得特定的数字行python
- r - 根据条件从一列中选择某些值并更改该列中的值
- javascript - WebSocket - 如何保持连接?
- javascript - “Typeerror 无法读取未定义的属性 '0'”是什么意思?
- php - 侧边栏的WordPress内容被重复