GAS公式ドキュメント
https://developers.google.com/apps-script/reference/
使い道
スプレッドシートのシート分けが多くなると、ソートや先頭に配置といったシートの移動処理がとても億劫になる これの回避策としてGASでシートの移動を行う
#考え方
シートの並び順の情報は、シート本体ではなく、スプレッドシート(ファイル)内のindex昇順という管理方法がなされている なので、使うクラスは「Sheet」ではなく「Spreadsheet」になる
#スクリプト実行時の注意点
理由が未だにわからないですが、スクリプト実行後、ソートの結果が見た目上反映されていないことがある ページの更新を行えば解決するのだが...
なぜだろう、同期のタイミング?
#サンプル
###今アクティブなシートを先頭に移動させる
/*
* moveTop
* - 現在アクティブなシートを先頭に移動させる
*/
function moveTop()
{
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.moveActiveSheet(1);
}
###▼五十音昇順にソート
/*
* sort
* - シート名を元に昇順にソートする
*/
function sort()
{
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var all_sheet_list = spreadsheet.getSheets();
var current_sheet = spreadsheet.getActiveSheet();
var sort_info = {
'sheet_list':{},
'sheet_name_list':[]
};
try {
for (var count = 0; count < all_sheet_list.length; count++) {
var sheet_name = all_sheet_list[count].getName();
sort_info['sheet_list'][sheet_name] = all_sheet_list[count];
sort_info['sheet_name_list'].push(sheet_name);
}
// シート名リストを昇順にソートする
sort_info['sheet_name_list'].sort(function(a,b){
a = a.toString().toLowerCase();
b = b.toString().toLowerCase();
if( a < b ) return -1;
if( a > b ) return 1;
return 0;
});
// 実際にソートする
var set_index = 1;
for (var sheet_count = 0; sheet_count < sort_info['sheet_name_list'].length; sheet_count++) {
var sheet_name = sort_info['sheet_name_list'][sheet_count];
var active_sheet = sort_info['sheet_list'][sheet_name];
active_sheet.activate();
spreadsheet.moveActiveSheet(set_index);
set_index++;
}
// 関数実行時のシートに戻る
current_sheet.activate();
Browser.msgBox('正常終了。ページを更新してください。');
} catch(e) {
// エラーが発生した場合はその旨を表示してから処理中断
Browser.msgBox(e.lineNumber + ':' + e);
}
}