Google Apps ScriptでGoogleドキュメントを部分的に同期する方法
Googleドキュメントを使って、スプレッドシートを共有している人は多いかと思います。ところがスプレッドシートの一部分だけを共有することは通常できません。
そこで今回は、Google Apps Script(GAS)を使ってスプレッドシートの一部分だけを共有する方法を紹介します。
用意するのは2つのスプレッドシートです。
1つは共有用のファイル(「共有ファイル」と呼びます)このファイルを他の人と共有します。
もう1つは各人固有の「本ファイル」です。
まず本ファイルを開きます。
「ツール」→「スクリプトエディタ」を選択して、Google Apps Scriptのスクリプトエディタを開きます。
そして次のコードを入力して保存してください。
var spreadID = '0ArZiDoplqPi_dElDd3V5WEJiM2JoU3praUk4TEx5UEE';
var sheetName = 'シート1';
function copyValuesFrom() {
try {
var ss_copyFrom = SpreadsheetApp.openById(spreadID);
var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet();
var sheet_copyFrom = ss_copyFrom.getSheetByName(sheetName);
var sheet_copyTo = ss_copyTo.getActiveSheet();
var copyValue = sheet_copyFrom.getRange('A2:B6').getValues();
sheet_copyTo.getRange('C2:D6').setValues(copyValue);
SpreadsheetApp.getActiveSpreadsheet().toast('共有部分を同期しました。');
}catch(e){
Browser.msgBox(e);
}
}
function copyValuesTo() {
try {
var ss_copyFrom = SpreadsheetApp.getActiveSpreadsheet();
var ss_copyTo = SpreadsheetApp.openById(spreadID);
var sheet_copyFrom = ss_copyFrom.getActiveSheet();
var sheet_copyTo = ss_copyTo.getSheetByName(sheetName);
var copyValue = sheet_copyFrom.getRange('C2:D6').getValues();
sheet_copyTo.getRange('A2:B6').setValues(copyValue);
SpreadsheetApp.getActiveSpreadsheet().toast('更新を共有部分に保存しました。');
}catch(e){
Browser.msgBox(e);
}
}
function myOnOpen() {
copyValuesFrom();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{name: 'リフレッシュ', functionName: 'copyValuesFrom'},
{name: '更新を今すぐ保存する', functionName: 'copyValuesTo'},
];
ss.addMenu('同期メニュー', menus);
}
このうち、色がついている部分を編集する必要があります。
spreadIDには、共有ファイルのIDを入れます。
https://docs.google.com/spreadsheet/ccc?key=****************#gid=0 の「****************」の部分です。
sheetNameは、共有ファイルのシート名です。
copyValuesFrom()関数は、共有ファイルの情報を本ファイルに同期します。
var copyValue = sheet_copyFrom.getRange('A2:B6').getValues();
で、共有ファイルの中から同期したいセルの範囲を指定しています。
sheet_copyTo.getRange('C2:D6').setValues(copyValue);
が、本ファイルでの同期先セル範囲です。
同様にして、copyValuesTo()関数では、本ファイルで編集した情報を共有ファイルに保存します。この関数では、
var copyValue = sheet_copyFrom.getRange('C2:D6').getValues();
で、本ファイルでのセル範囲を指定し、
sheet_copyTo.getRange('A2:B6').setValues(copyValue);
で、共有ファイルでのセル範囲を指定しています。
これらの情報を編集した上で、スクリプトエディタの「リソース」→「現在のプロジェクトのトリガー」から
実行 | イベント |
---|---|
myOnOpen | スプレッドシートから 起動時 |
copyValuesTo | 時間主導型 分タイマー 1分ごと |
copyValuesFrom | 時間主導型 分タイマー 1分ごと |
と設定することで(画像参照)本ファイルを開いたときと1分ごとに情報を同期します。
また本ファイルに「同期メニュー」というメニューが追加されています。
「リフレッシュ」を選択すると、共有ファイルからの情報を本ファイルに同期します。
「更新を今すぐ保存する」を選択すると、本ファイルに編集した情報を共有ファイルに保存します。