这应该是简单的,但我卡在这个脚本... 它有一个功能(createnewsheet),其手动运行在一个时间触发和,所以我不得不选择openById()
到访问电子表格,但当我查看表格并手动运行该功能时,我想将新创建的表格设置为活动状态,这就是我造成的麻烦。电子表格脚本触发运行和手动
当我从脚本编辑器运行函数(createnewsheet)时,一切都很好,但是当我从电子表格菜单中调用它时,出现以下错误消息:Specified sheet must be part of the spreadsheet
,因为最后一行代码。 AFAIK我不是在我的电子表格之外寻找一张表... 任何想法我在这方面做错了什么?
下面是一个简单的代码,显示问题,一个shared copy is available here
var ss = SpreadsheetApp.openById('0AnqSFd3iikE3dGVtYk5hWUZVUFNZMzAteE9DOUZwaVE');
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('master')
var logsheet = ss.getSheetByName('logger')
var FUS1=new Date().toString().substr(25,6)+":00";
function onOpen() {
var menuEntries = [ {name: "Manual test", functionName: "createnewsheet"},
];
sheet.addMenu("Utilities",menuEntries);
SpreadsheetApp.setActiveSheet(logsheet);// this is working fine
}
function createnewsheet(){
var sheetName = "Control on "+ Utilities.formatDate(new Date(), FUS1, "MMM-dd-yy")
try{
var newsheet = ss.insertSheet(sheetName,2);// creates the new sheet in 3rd position
}catch(error){
FUS1=new Date().toString().substr(25,6)+":00";
var newsheet = ss.insertSheet(sheetName+' - '+Utilities.formatDate(new Date(), FUS1, "HH:mm:ss"),2);// creates the new sheet with a different name if already there
}
newsheet.getRange(1,1).setValue(sheetName);
SpreadsheetApp.setActiveSheet(ss.getSheets()[2]);// should make 3 rd sheet active but works only when run from script editor
// SpreadsheetApp.setActiveSheet(newsheet);// should have same result but works only when run from script editor
}
感谢您的关注,但此解决方案无法满足我的要求:电子表格打开时,它对UI没有任何影响。我想要的是当我手动运行该功能时能够获得工作表'激活'。 –
是的,这似乎是在更新Google电子表格UI时引入的错误。早些时候这用于工作。对不起,在发布之前不要测试代码。 –
不用担心;-)与此同时,我找到了一种方法,使其工作...查看编辑 –