0

问候stackoverflow社区,

我目前正在尝试使用 Google 电子表格为我的团队构建一个仪表板,以完成他们每周的日常任务。到本周末,团队成员应该“重置”仪表板表,但我在使用以下脚本时遇到了问题。该脚本应复制“模板”表,删除旧仪表板并将新副本重命名为“仪表板”:

function resetDashboard() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('TEMPLATE');
  sheet.copyTo(ss).setName('New Dashboard');
  ss.setActiveSheet(ss.getSheetByName('Dashboard'));
  ss.deleteActiveSheet();
  ss.setActiveSheet(ss.getSheetByName('New Dashboard'));
  ss.renameActiveSheet('Dashboard');
}

注意:“仪表板”工作表是电子表格中唯一可见的工作表。

到目前为止,这个脚本运行良好。当我重新加载电子表格时,它仍在工作。

我的问题是,当我关闭电子表格并从 GoogleDocs 概述中再次打开它时,脚本只会复制“模板”表,但函数的其余部分不再执行。

这是一个错误吗?有没有我可以使用的“更干净”的版本/脚本?

最好的问候,吕迪格

4

2 回答 2

2

我认为问题在于“暂时”你有两张同名的床单。重命名之前的一个SpreadsheetApp.flush()可能的工作。尝试这个:

function resetDashboard() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.getSheetByName('TEMPLATE').copyTo(ss);
  ss.setActiveSheet(ss.getSheetByName('Master'));
  ss.deleteActiveSheet();
  SpreadsheetApp.flush(); //this guarantees that the old sheet is deleted before we proceed
  newSheet.setName('Master');
  ss.setActiveSheet(newSheet);
}
于 2012-08-02T21:03:34.843 回答
0

谢谢你的建议flush()功能的建议;虽然它没有解决问题,但我发现了我们的两个脚本都不起作用的真正原因(我的脚本实际上也是如此,只是没有注意到)。

这是该deleteActiveSheet()功能已报告的问题:

问题 1298:deleteActiveSheet() 和 copyTo() 需要 .sleep(2000) 才能可靠地工作

目前唯一的解决方法似乎是 Utilities.sleep() 函数;一个例子可以在这里找到找到。

谢谢你的帮助,这让我明白了这一点。:)

干杯,吕迪格

于 2012-08-03T11:55:31.040 回答