duplicateActiveSheet()の後のActiveSheetが不明な挙動を取る理由を知りたいです

69 views
Skip to first unread message

Taku Hosoya

unread,
Jun 29, 2018, 6:47:01 AM6/29/18
to Google Apps API Japan
スプレッドシートをGASで操作しています。
最終的にやりたいこととしては、日付ごとに作成されたシートを日付順に並べ替えたいと思っています。
①テンプレートのシートをコピー
②シート名を日付に変更(日付は任意に指定)
上記を以下のコードで実現しています。

var template = ss.getSheetByName('テンプレ');
SpreadsheetApp.setActiveSheet(template);
SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet().setName(day_str);

duplicateActiveSheet()はコピー先のシートをアクティブにするはずなので、この後

var target = SpreadsheetApp.getActiveSheet();

として、当該シート『target』を操作しています。(想定通り操作できています。)

そこで、以下の様にシートを移動して日付順に並べようとしたものの、移動されるのはコピー前のActiveSheetである『テンプレ』のシートとなってしまいます。

ss.moveActiveSheet(target_id)

つまり、コピー後にgetActiveSheet()を行うとコピー先のシートが取得されるにも関わらず
moveActiveSheet()を行うと、コピー元のシートがアクティブと判断されるのか、コピー元のシートが移動します。

この様は挙動をとる原因がお分かりになれば、ご教示頂きたいです。


ちなみに、関係があるかわかりませんが、以下のコードでシートを取得できないという現象も発生しています。
(仕方なくduplicateActiveSheet()を行った場合と行わなかった場合で条件分岐を行っています。)

var template = ss.getSheetByName('テンプレ');
SpreadsheetApp.setActiveSheet(template);
SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet().setName(day_str);
var target = SpreadsheetApp.getActiveSheet();
var a = target.getSheetName();
//day_strの値(シート名)がきちんと表示されます

var target = ss.getSheetByName(day_str);
//しかし、これだとシートを取得できません

どうぞよろしくお願い致します。

Reply all
Reply to author
Forward
0 new messages