這應該是簡單的,但我卡在這個腳本... 它有一個功能(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時引入的錯誤。早些時候這用於工作。對不起,在發佈之前不要測試代碼。 –
不用擔心;-)與此同時,我找到了一種方法,使其工作...查看編輯 –