🤖
Google Apps Script: スプレッドシートを定期的にバックアップ
はじめに
スプレッドシートに入力しておいた内容を、他のシートに定期的に保管しておきたい時によく使われるコードになります。ファイルごとにコピーする方法もありますが、今回の方法はシートや範囲を指定してからバックアップする方法になります。ぜひ使ってみてください。
コード
コード.gs
function backup() {
var baseSheet = SpreadsheetApp.openById('バックアップ元のスプレッドシートのID');
var baseSheetName = baseSheet.getSheetByName('バックアップ元のシート名');
var backupSheet = SpreadsheetApp.openById('バックアップ先のスプレッドシートのID');
var backupSheetName = backupSheet.getSheetByName('バックアップ先のシート名');
backupSheetName.clear();
var lastRow = baseSheetName.getLastRow();
var lastColumn = baseSheetName.getLastColumn();
var copyValue = baseSheetName.getRange(1,1,lastRow,lastColumn).getValues();
backupSheetName.getRange(1,1,lastRow,lastColumn).setValues(copyValue);
}
トリガー設定
次に、トリガー設定画面から、上のコードが書いてあるbackup()
関数を指定した時間帯に実行させる設定を行います。
こちらの画像は、毎日午前7時から8時の間に回す設定になります。
コードの解説
↓ スプレッドシートの特定と、その中にあるシート名を特定します。
コード.gs
var baseSheet = SpreadsheetApp.openById('バックアップ元のスプレッドシートのID');
var baseSheetName = baseSheet.getSheetByName('バックアップ元のシート名');
↓ バックアップ先の内容を一度削除するコードになります。
こちらのclear()
コードなしに上書きすることも可能ですが、バックアップ元のデータが前より減る可能性がある場合は、事前に削除しておいた方が良いかもしれません。
コード.gs
backupSheetName.clear();
↓ バックアップ元のシートの最後の行と列を取得し、その範囲にあるデータを全て取得getValues()
します。
コード.gs
var lastRow = baseSheetName.getLastRow();
var lastColumn = baseSheetName.getLastColumn();
var copyValue = baseSheetName.getRange(1,1,lastRow,lastColumn).getValues();
↓ 上で取得したデータをバックアップ先のシートにセットsetValues()
します。
コード.gs
backupSheetName.getRange(1,1,lastRow,lastColumn).setValues(copyValue);
終わりに
getRange()
を使うことでデータの範囲を特定することも可能ですし、copyTo()
やmakeCopy()
といった関数を使うことでシートごとにコピーしたり、ファイルごとにコピーしたりすることもできますので、ぜひ使ってみたください。
また、Slackやメールにメッセージを送るコードを追加すれば、バックアップが終わった時点でSlackやメールにお知らせを飛ばすことも可能になります。
Discussion