问候stackoverflow社区,
我目前正在尝试使用Google Spreadsheets为我的团队构建一个仪表板,以便每周完成日常任务。到本周末,团队成员应该“重置”仪表板,但是我遇到了以下脚本的问题。该脚本应复制“TEMPLATE”表,删除旧仪表板并将新副本重命名为“Dashboard”:
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概述再次打开时,脚本只会复制“模板”表,但该功能的其余部分不再执行。
这是一个错误吗?我可以使用“更干净”的版本/脚本吗?
祝你好运, 吕迪格尔
答案 0 :(得分: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);
}
答案 1 :(得分:0)
感谢您对flush()
函数的建议;虽然它没有解决这个问题,但我发现了我们的两个脚本都没有工作的真正原因(我的确实做得很好,只是没注意到)。
这是deleteActiveSheet()
函数已报告的问题:
Issue 1298: deleteActiveSheet() and copyTo() require .sleep(2000) to work reliably
目前唯一的解决方法似乎是Utilities.sleep()函数;可以找到一个示例here。
感谢您的帮助,这让我想到了这一点。 :)
干杯,Rüdiger