Google Apps Script: スプレッドシートを定期的にバックアップ

2 min read読了の目安(約1800字

はじめに

スプレッドシートに入力しておいた内容を、他のシートに定期的に保管しておきたい時によく使われるコードになります。ファイルごとにコピーする方法もありますが、今回の方法はシートや範囲を指定してからバックアップする方法になります。ぜひ使ってみてください。

コード

コード.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やメールにお知らせを飛ばすことも可能になります。