在Google Sheets Apps脚本中,如何检查工作表是否存在以及是否不添加工作表

问题描述 投票:0回答:1

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

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

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

我已经尝试使用try catch语句,尝试查找工作表,如果不起作用,则catch会使用新名称创建工作表。我收到错误“名称为“ ____”的工作表已存在”。尽管我对为什么感到困惑,但由于我收到此错误,所以并没有解决问题。

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

至于我的代码,我将展示它,但是我必须警告它有点笨拙(出于任何原因,除非我重新声明它们,否则它不会认可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个回答
0
投票

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...
© www.soinside.com 2019 - 2024. All rights reserved.