我正在创建电子表格,以根据输入的日期对事件进行排序。我已经成功地获得了该程序,该程序可以添加一个新工作表,其中包含要复制的事件的内容,但是我无法将其添加到脚本中以允许两个选择。我的目标是使它像这样:
选项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();
}
}
[如果有人有任何想法为什么这行不通,我很想知道。谢谢!
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...