【问题标题】:In Google Sheets Apps Script, how to check if a sheet exists, and if it doesn't add one在 Google Sheets Apps Script 中,如何检查工作表是否存在以及是否不添加
【发布时间】:2019-09-25 02:51:34
【问题描述】:

我正在创建一个电子表格来根据输入的日期对事件进行排序。我已经成功地让程序添加了一个包含我想要复制的事件内容的新工作表,但是我无法添加到脚本中以允许两个选项。我的目标是让它变成这样:

选项 1:工作表已存在 . A2:D2 单元格将从模板工作表复制到标题与单元格 A2 中相同日期的工作表。 . A2:D2 将从模板表中清除,以留下空白画布。

选项 2:工作表不存在 .使用模板工作表作为新工作表的模板,所有信息都将被复制过来,A2 中的日期作为新工作表的名称。 . A2:D2 将从模板表中清除,以留下空白画布。

我尝试使用 try catch 语句,试图找到工作表,如果这不起作用,则使用新名称创建工作表的 catch。我收到错误“名称为“____”的工作表已存在。”虽然我很困惑为什么,因为我收到了这个错误,但它并没有继续发生。

我也尝试了一个类似想法的 if else 语句,指出如果 getSheetByName 不起作用,它将创建一个工作表,否则它将设置一个新的活动工作表。这个有同样的错误。

至于我的代码,我将展示它,但我必须警告它有点笨重(无论出于何种原因,它不会承认 try catch 语句中的变量,除非我重述它们)。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  ss.setActiveSheet(ss.getSheets()[0])
  var range = sheet.getRange("A2");
  var A2 = range.getValue();
  var templateSheet = ss.getActiveSheet();  
  var value = sheet.getRange("A2").getValue();
  var val = Utilities.formatDate(new Date(A2), "GMT+1", "MM/dd/yyyy");
  range.setValue(new Date(A2)).setNumberFormat("MM/dd/yyyy");
  A2 = SpreadsheetApp.getActiveSheet().getRange('A2').getValue();
   try {
        ss.setActiveSheet(ss.getSheetByName(A2));
        var sheet1 = ss.getSheetByName("GUI");
        var sheet2 = ss.getSheetByName(A2);
        sheet1.getRange("A2:D2").copyTo(sheet2.getRange(sheet2.getLastRow()+1,1,1,4), {contentsOnly:true});
        ss.setActiveSheet(ss.getSheets()[0]);
        sheet.getRange("A2:D2").clearContent();
    } catch (e) {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheets()[0];
        var A2 = range.getValue();
        var templateSheet = ss.getActiveSheet();    
        var val = Utilities.formatDate(new Date(A2), "GMT+1", "MM/dd/yyyy");
        ss.insertSheet(val, ss.getSheets().length, {template: templateSheet});
        ss.setActiveSheet(ss.getSheets()[0]);
        sheet.getRange("A2:D2").clearContent();
    }
}

如果有人知道为什么这不起作用,我很想知道。谢谢!

【问题讨论】:

    标签: javascript google-apps-script google-sheets try-catch


    【解决方案1】:

    函数getSheetByName 在不存在具有该名称的工作表时返回null。如果您以这种方式实现代码,我认为会更容易。

    代码应该是这样的:

    var sheet2 = ss.getSheetByName(A2);
    if( ss.getSheetByName(A2) == null)
    {
      //if returned null means the sheet doesn't exist, so create it
      var val = Utilities.formatDate(new Date(A2), "GMT+1", "MM/dd/yyyy");
      ss.insertSheet(val, ss.getSheets().length, {template: templateSheet});
      sheet2 = ss.insertSheet(A2);
    }
    //Rest of the behavior...
    

    【讨论】:

    • 这似乎应该可以工作,但当我实现它时,同样的错误仍然存​​在。出于某种原因,当它检查 ss.getSheetByName(A2) == null 时,它没有收到我想要的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2018-09-08
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多