我想创建一个名为new的新工作表,如果它已经存在,应该覆盖它。 但是当工作表已经存在时,我收到错误“我们很抱歉,发生了服务器错误。请稍等一下再试一次。(第34行,文件”代码“)”,表单被删除 - 第34行是最后一行在这里:
var delSheet = ss.getSheetByName("new");
if (delSheet != null) {
ss.deleteSheet(delSheet);
}
var sheet = ss.insertSheet("new");
由于
答案 0 :(得分:2)
JPV回答是一个很好的解决方法,如果你想考虑它,但我可以重现你的错误。
有趣的是,如果活动工作表被称为“新”并且我删除了活动工作表,则不会给我一个错误:
function test(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
ss.getActiveSheet();
ss.deleteActiveSheet();
ss.insertSheet("new");
}
这让我觉得这可能是一个更深层次的问题,特别是'。getSheetByName()'因此我列出了here以供Google小组审核。请明星吧,以便获得牵引力!
答案 1 :(得分:1)
如果你想覆盖'如果纸张存在,请尝试清除而不是删除..
function check() {
var ss = SpreadsheetApp.getActive();
var newSheet = ss.getSheetByName('new');
newSheet ? newSheet.clear() : ss.insertSheet('new');
}
答案 2 :(得分:1)
这是第三种解决方案,似乎为新工作表指定工作表索引可以解决问题。
function test(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var delSheet = ss.getSheetByName("new");
if (delSheet) {
ss.deleteSheet(delSheet);
}
var sheet = ss.insertSheet(ss.getNumSheets());// create the new sheet as last sheet, you can change that if you want
sheet.setName('new');
}
在HDCerberus回答指出错误来源之后我建议这段代码重现你的初始工作流程(他的回答并没有真正这样做......),它也使用deleteActiveSheet
方法(历史上第一个删除工作表的可用方法,另一种方法来得更晚......)
function test2(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var delSheet = ss.getSheetByName("new");
if (delSheet) {
ss.setActiveSheet(delSheet);
ss.deleteActiveSheet();
}
ss.insertSheet("new");
}