我已经挣扎了几个星期了。我有posted a question here a couple days a go,但我还没有找到解决方案。可能是因为,事实上,这是一个2-3项任务的问题,但我的错误并没有很好地解释。因此,我决定发布另一个带有一个( 2-3)更简单的任务。
因此,下面有一个脚本,在示例表中删除今天日期之前的列。该脚本运行良好,但我有两个问题。
首先..。如果旧的日期/列的数量是一个,它就能正常工作。它只删除前一天,而不是前3列(A,B&C在样本表),我想保留。如果它们更多地是一个旧日期,那么脚本将删除今天日期前后的几个列/日期。我想要的是只删除今天日期之前的所有列/日期,而不是我想保留的前3列(样本表中的A、B&C)。
第二个问题有点奇怪。目前,我正在从自定义菜单(示例表中的“我的工具”)运行脚本。现在,当从自定义菜单或使用脚本编辑器中的" run“按钮运行脚本时,它就工作了。当我试图添加时间驱动触发器时(不是以编程方式)。我不知道如何运行它,所以每24小时运行一次,然后我收到一个脚本错误,其中包含以下消息: Exception: Range不在deleteColumnsDate中(代码:14:49)。
这是我工作表的一个示例:https://docs.google.com/spreadsheets/d/1NJvcLxwc96411-Sl_aTu1d-J5gQvqlZjPUQbWZoRqBM/edit?usp=sharing
这是我目前正在使用的脚本:
function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Tools')
.addItem('Delete Older Dates','deleteColumnsDate')
.addToUi();
}
function deleteColumnsDate(row)
{
var row = (typeof(row) !== 'undefined') ? row : '3';
var day = 86400000;
var today = new Date().getTime();
var rng = SpreadsheetApp.getActiveSheet().getRange(row + ':' + row);
var rngA = rng.getValues();
for(var i = 1; i < rngA[0].length ;i++)
{
if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 1 ))
{
SpreadsheetApp.getActiveSheet().deleteColumns(i + 1);
}
}
}
function isDate (x)
{
return (null != x) && !isNaN(x) && ("undefined" !== typeof x.getDate);
}那么,我在这里做错了什么?是否有可能使此过程每24小时完全自动运行?
提前谢谢你
内苏斯
发布于 2022-04-14 16:55:53
当您放置时间触发器时,不能使用getActiveSheet()。相反,应该使用SpreadsheetApp.openById( ID )
您将在文档的URL中找到您的ID,如: docs.google.com/spreadsheets/d/abc1234567/edit#gid=0
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid
编辑:
库珀提起这件事时,我忘了一些东西。试着这样做:
var ss = SpreadsheetApp.openById( [SHEET ID] );
var sh = ss.getSheetByName( [SHEET NAME] ); //delete column here
var rng = sh.getRange(row + ':' + row);功能齐全:
function deleteColumnsDate() {
var day = 86400000;
var today = new Date().getTime();
var ss = SpreadsheetApp.openById(" [SHEET ID]");
var sh = ss.getSheetByName(" [SHEET NAME] ");
var rng = sh.getRange('A1:Z1'); // change if you need larger
var rngA = rng.getValues();
var nb_to_delete = 0;
for(var i = 1; i < rngA[0].length ;i++) { // start colonne B
if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 1 )){
nb_to_delete++;
}
}
sh.deleteColumns(2, nb_to_delete);
}https://stackoverflow.com/questions/71874468
复制相似问题