无论警报提示按钮响应如何,函数都在执行?



所以我有这个存档功能,我只想在用户在出现的警报提示上选择"是"按钮时才发生,但是无论输入如何(在他们输入任何内容之前(,它似乎都在执行。我该如何解决这个问题?

function cloneGooglesheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var cellfirst = ss.getSheetByName('Master').getRange(4, 1).getValue();
var celllast = ss.getSheetByName('Master').getRange(10, 1).getValue();
var startdate = Utilities.formatDate(cellfirst, "GMT", "MM-dd-yyyy");
var enddate = Utilities.formatDate(celllast, "GMT", "MM-dd-yyyy");
var sheetName = "Week of '"+startdate+"' to '"+enddate+"'";
var templateSheet = ss.getSheetByName("Master");
var sheet = ss.insertSheet(sheetName, 2, {template: templateSheet}); 
var ui = SpreadsheetApp.getUi();
var response = ui.alert("The actions of this function will be irrevocable, please continue if you have verified the data being archived", ui.ButtonSet.YES_NO);
if (response == ui.Button.NO){
return ui.alert("Operation Cancelled")
} else if (response == ui.Button.YES){
return sheet.getDataRange().copyTo(sheet.getDataRange(), {contentsOnly:true});
} else {
return ui.alert("Operation has been aborted. If you would like to archive, please try again");
}
}

问题是您通过从模板工作表复制文档来插入新工作表:

var sheet = ss.insertSheet(sheetName, 2, {template: templateSheet}); 

因此,基本上模板工作表对象中的所有数据都复制到新工作表中。

您应该使用较少的选项插入它,例如:

var sheet = ss.insertSheet(sheetName, 2); 

这只会在索引 2 上创建一个新的工作表对象。

在这里,您可以看到有关insertSheet的文档。

你的代码发生了什么?

if else条件之前,床单已经被复制了,所以你觉得它不起作用,但它确实在工作。

这应该可以做到:

function cloneGooglesheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var cellfirst = ss.getSheetByName('Master').getRange(4, 1).getValue();
var celllast = ss.getSheetByName('Master').getRange(10, 1).getValue();
var startdate = Utilities.formatDate(cellfirst, "GMT", "MM-dd-yyyy");
var enddate = Utilities.formatDate(celllast, "GMT", "MM-dd-yyyy");
var ui = SpreadsheetApp.getUi();
var response = ui.alert("The actions of this function will be irrevocable, please continue if you have verified the data being archived", ui.ButtonSet.YES_NO);
if (response == ui.Button.NO){
return ui.alert("Operation Cancelled")
}
else if (response == ui.Button.YES){
var sheetName = "Week of '"+startdate+"' to '"+enddate+"'";
var templateSheet = ss.getSheetByName("Sheet1");
var sheet = ss.insertSheet(sheetName, 2); 
templateSheet.getDataRange().copyTo(sheet.getDataRange(), {contentsOnly:true});
return ui.alert("Succesfully archived");      
} 
else {
return ui.alert("Operation has been aborted. If you would like to archive, please try again");
}
}

如您所见,我已经将所有工作表插入和复制行移动到else if内,然后我对其进行了修改,因此您首先插入一个空白电子表格,然后再从templateSheet中复制所需的单元格

最新更新