google spreadsheetは実に至らないアプリでいろいろ腹が立つことがあるのだけど、中でも仕様書として使わざるを得なくなった時、どうしてもシートが増えていくのだけど、シートの並べ替えが苦痛でしょうがなかった。
で、あまりに腹が立ったので仕様書用のGASで目次を作ると同時にシートを目次の順に従って並べ直すスクリプトを書いたのだけど、それを単純化して切り出したのがこのGAS。
前に公開した目次と組み合わせるのはコード屋なら簡単だと思うのでバラしたままにしておく。
機能的には実行すると
が
のように並べ直される。
以下、コード。
sortsheet.gs
function myFunction() {
const ss = SpreadsheetApp.getActiveSpreadsheet(); // ともかくspreadsheetを取得する。
const contSheet = ss.getActiveSheet();
const sheets = ss.getSheets();
let narray=[];
sheets.forEach(item=>{
narray.push(item.getSheetName());
});
console.log(narray);
narray.sort(); // sortはお好みで。
console.log(narray);
let i=1;
narray.forEach(item=>{
ss.getSheetByName(item).activate(); // アクティブにしないと動かせない。
ss.moveActiveSheet(i);
i++;
});
contSheet.activate(); // 最後にactiveだったシートに戻る。
}
なお、ちょっとだけ書いておくとmoveActiveSheetを実行するためにはシートをアクティブにしなければならない制約があるので、ボタンなどでシート側から起動すると、バタバタシートが切り替わって、実にキモい挙動をするので注意。
前の目次生成用と組み合わせると結構幸せになれるかも知れない。