Google Apps脚本删除表 - 服务器错误

时间:2014-11-23 18:03:15

标签: google-apps-script google-sheets

我想创建一个名为new的新工作表,如果它已经存在,应该覆盖它。 但是当工作表已经存在时,我收到错误“我们很抱歉,发生了服务器错误。请稍等一下再试一次。(第34行,文件”代码“)”,表单被删除 - 第34行是最后一行在这里:

  var delSheet = ss.getSheetByName("new");
  if (delSheet != null) {
  ss.deleteSheet(delSheet);
  }
  var sheet = ss.insertSheet("new");

由于

3 个答案:

答案 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");
}