これは単純なはずですが、私はこのスクリプトに行き詰まっています...手動でタイムトリガーで実行される関数(createnewsheet)があるため、スプレッドシートにアクセスすることを選択するopenById()
必要がありましたが、シートを見て実行したとき機能を手動で新しく作成したシートをアクティブに設定したいのですが、それが問題の原因です。
スクリプト エディターから関数 (createnewsheet) を実行するとすべて問題ありませんが、スプレッドシート メニューから関数を呼び出すとSpecified sheet must be part of the spreadsheet
、コードの最後の行が原因で次のエラー メッセージが表示されます。私の知る限り、スプレッドシート以外のシートに対処していません... このコンテキストで何が間違っているのか分かりますか?
問題を示す簡略化されたコードを次に示します。共有コピーはこちらから入手できます
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
}