Google apps script 谷歌脚本问题与删除,重命名,复制工作流

Google apps script 谷歌脚本问题与删除,重命名,复制工作流,google-apps-script,Google Apps Script,此电子表格中有3张表格。一个叫做Juniper,一个叫做归档Juniper,还有一个叫做模板Juniper 工作人员每天填写Juniper表格。在基于时间的触发器上,我需要删除旧的“Archive Juniper”,将“Juniper”重命名为“Archive Juniper”,并将“Template Juniper”复制为“Juniper”。实际上,它只是归档昨天的内容,并根据模板创建一个新的空白内容 我的代码如下。对于一个白人来说,它工作得很好,但几天前它停止了工作。我不是一个程序员,所以任

此电子表格中有3张表格。一个叫做Juniper,一个叫做归档Juniper,还有一个叫做模板Juniper

工作人员每天填写Juniper表格。在基于时间的触发器上,我需要删除旧的“Archive Juniper”,将“Juniper”重命名为“Archive Juniper”,并将“Template Juniper”复制为“Juniper”。实际上,它只是归档昨天的内容,并根据模板创建一个新的空白内容

我的代码如下。对于一个白人来说,它工作得很好,但几天前它停止了工作。我不是一个程序员,所以任何帮助都会很棒。我在
ss.setActiveSheet(ss.getSheetByName(mainSheet))上得到一个无效的参数错误

对不起,代码太难看了,我顶多也很糟糕


-Jon

只有当脚本找不到名为“Juniper”的工作表并在使其处于活动状态的方法中返回null时,才会发生该错误。我已经清理了一些代码来删除多余的东西,你能告诉我们这是否有效吗

编辑:我试过了,也有问题。下面的代码适用于我

var ss = SpreadsheetApp.getActiveSpreadsheet();

var mainName = "Juniper";
var mainSheet = ss.getSheetByName(mainName);

var templateName = "Template " + mainName;
var templateSheet = ss.getSheetByName(templateName);

var archiveName = "Archive " + mainName;
var archiveSheet = ss.getSheetByName(archiveName);

ss.setActiveSheet(archiveSheet);
SpreadsheetApp.flush();//Makes sure the sheet is active before deleting
ss.deleteActiveSheet();

mainSheet.setName(archiveName);

//Inserts it as first sheet, so no need to move it
ss.insertSheet(mainName,0,{ template : templateSheet });

我仍然在ss.setActiveSheet(ss.getSheetByName(mainSheet))中得到无效参数;似乎每当我删除一张工作表,然后设置一张新的活动工作表时,我都会遇到这个错误。如果我从代码中删除“deleteactivesheet”,那么重命名就会开始工作。我在上面运行了一个日志,第一组活动的工作正常。删除可以工作,但当您设置第二个活动工作表时,它将返回null。谢谢-Jontry添加
SpreadsheetApp.flush()删除工作表后。这迫使电子表格在进入下一步之前完成您要求的内容。同样的问题。我不知道这个代码是怎么回事。也许还有其他的写作方法吗?我刚刚用一些对我有用的东西更新了我的答案。我和你一样有这个问题,因为某种原因我就是看不出来。太好了,我明天试试。谢谢你,弗雷德里克。
var ss = SpreadsheetApp.getActiveSpreadsheet();

var mainName = "Juniper";
var mainSheet = ss.getSheetByName(mainName);

var templateName = "Template " + mainName;
var templateSheet = ss.getSheetByName(templateName);

var archiveName = "Archive " + mainName;
var archiveSheet = ss.getSheetByName(archiveName);

ss.setActiveSheet(archiveSheet);
SpreadsheetApp.flush();//Makes sure the sheet is active before deleting
ss.deleteActiveSheet();

mainSheet.setName(archiveName);

//Inserts it as first sheet, so no need to move it
ss.insertSheet(mainName,0,{ template : templateSheet });