我对Google Apps脚本非常陌生,而且我在努力实现目标方面遇到了麻烦。
我有一个Google表格工作簿,允许用户:
用户按下按钮后,我正在尝试完成以下操作:
原始工作表设置为让用户在运行脚本之前授权工作簿连接。
这是我的代码:
function cloneGoogleSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
var name = sheet.getRange("B10").getValue();
var url = sheet.getRange("f5").getValue();
var tss = SpreadsheetApp.openByUrl(url);
tss.setActiveSheet(tss.getSheetByName('Template - Do Not Modify'));
tss.duplicateActiveSheet();
var activesheet = tss.getActiveSheet();
activesheet.setName(name);
}
我的问题是:
使用ActiveSheets似乎并不是一种安全的方法来完成所有这些工作并且有更好的方法。
尝试使用URL变量时(脚本运行正常,带有硬编码的URL值),我得到一个无效的参数:URL错误。单元格F5根据从下拉列表中选择的名称更新为新URL,使用引用具有唯一URL的名称的查找:
=查找(B4, {P71,P72,P73,P74,P75,P76,P77}, {Q71,Q72,Q73,Q74,Q75,Q76,Q77} )
我非常感谢有人向我展示了正确的方法。谢谢!
答案 0 :(得分:0)
您是否尝试过使用“getSheetByName”?
答案 1 :(得分:0)
在Duplicate a Sheet in Google Spreadsheets上尝试Armit Agarwal的教程:
function cloneGoogleSheet() {
var name = "labnol";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Template').copyTo(ss);
/* Before cloning the sheet, delete any previous copy */
var old = ss.getSheetByName(name);
if (old) ss.deleteSheet(old); // or old.setName(new Name);
SpreadsheetApp.flush(); // Utilities.sleep(2000);
sheet.setName(company);
/* Make the new sheet active */
ss.setActiveSheet(sheet);
}