0

在此电子表格中有 3 张工作表。一种称为瞻博网络,一种称为存档瞻博网络,一种称为模板瞻博网络。

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

我的代码如下。它对相当白的人来说效果很好,但几天前它停止了工作。我不是程序员,所以任何帮助都会很棒。我在ss.setActiveSheet(ss.getSheetByName(mainSheet));

var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = 0;
var template = 0;
var mainSheet = 0;
var archive = 0;
var templateSheet = 0;
var sheet = 0;

mainSheet = ('Juniper');
template = ('Template '+mainSheet);
archive = ('Archive '+mainSheet);
ss.setActiveSheet(ss.getSheetByName(archive));
ss.deleteActiveSheet()
ss.setActiveSheet(ss.getSheetByName(mainSheet));
ss.renameActiveSheet(archive)
templateSheet = ss.getSheetByName(template);
ss.insertSheet(mainSheet,ss.getSheets().length,{template:templateSheet });
ss.moveActiveSheet(1);

对不起丑陋的代码,我充其量是可怕的。

-乔恩

4

1 回答 1

0

只有当脚本找不到名为“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 });
于 2013-04-29T19:44:56.453 回答