GoogleスプレッドシートのデータをGoogleドキュメントに反映させる作業を手動で繰り返していませんか。コピーと貼り付けの繰り返しは時間がかかり、入力ミスの原因にもなります。Apps Scriptを使えば、数行のコードでシートの値をドキュメントに自動反映できます。この記事では、シートの特定範囲をドキュメントのテンプレートに挿入する汎用的なコードテンプレートを紹介します。このテンプレートを応用すれば、請求書や報告書の自動作成がすぐに実現できるようになります。
【要点】Apps ScriptでSheetsとDocsを連携する基本テンプレート
- createDocument(): シートのデータを基に新しいドキュメントを自動作成します。テンプレートを複製してデータを反映する方法が基本です。
- replaceText(): テンプレート内のプレースホルダー(例:{{名前}})をシートの値で置換します。置換後は表示形式を整える処理も可能です。
- getRange().getValues(): シートのセル範囲を一括取得し、二次元配列として処理します。ループで各行をドキュメントに反映する際に欠かせない関数です。
ADVERTISEMENT
目次
Apps Scriptで連携する基本的な仕組みと準備
GoogleスプレッドシートとGoogleドキュメントは、どちらもGoogleのクラウドサービスです。Apps Scriptはそれらを統合するスクリプト言語で、シートのデータを読み取り、ドキュメントの特定の場所に書き込むことができます。この連携の核となるのは、シート上のセル値とドキュメント内のプレースホルダー(目印)の対応付けです。たとえば、シートのA1セルに顧客名、B1セルに金額を入力しておき、ドキュメントでは「{{顧客名}}」「{{金額}}」のようなタグを挿入しておきます。スクリプトがそのタグを検索し、実際の値で置き換えることで、自動的に文書が完成します。
この仕組みを利用するには、以下の準備が必要です。まず、データを格納するGoogleスプレッドシートを用意します。次に、定型文のテンプレートとなるGoogleドキュメントを作成します。テンプレートには、置き換えたい箇所に{{項目名}}の形式でプレースホルダーを記述します。最後に、Apps Scriptのコードを記述するためのスクリプトエディタを開きます。スクリプトエディタは、スプレッドシートまたはドキュメントのメニュー「拡張機能」→「Apps Script」から起動できます。スクリプトはシート側に紐づけるのが一般的ですが、ドキュメント側に書くことも可能です。
データ連携テンプレートを作成する手順
ここからは、具体的なテンプレート作成手順を解説します。サンプルとして、シートの1行分のデータを元に1つのドキュメントを生成するケースを想定します。まずはシートとテンプレートの準備から始めましょう。
- シートにデータとプレースホルダー一覧を用意する
スプレッドシートの1行目に見出し行を設け、2行目以降に実際のデータを入力します。たとえば、A列に「顧客名」、B列に「商品名」、C列に「金額」とします。この見出し行の値が、テンプレートで使うプレースホルダー名({{顧客名}}など)と一致するようにします。 - Googleドキュメントでテンプレート文書を作成する
新規ドキュメントを開き、定型文を記述します。データで置き換えたい箇所には、シートの見出し行と同じ名前で{{顧客名}}のように波括弧で囲んだプレースホルダーを挿入します。たとえば「拝啓 {{顧客名}} 様」のように使います。 - スクリプトエディタを開き、コードを記述する
シートのメニューから「拡張機能」→「Apps Script」をクリックします。エディタが開いたら、以下のコードを記述します。コードは、テンプレートドキュメントのIDを指定し、シートのデータを読み取ってプレースホルダーを置換し、新しいドキュメントとして保存する流れです。具体的な関数名と構文は後述のコードブロックを参照してください。 - スクリプトを実行し、権限を承認する
スクリプトエディタの上部にある実行ボタン(▶)をクリックします。初回実行時には、スクリプトがシートとドキュメントにアクセスする権限の承認を求められます。自分のGoogleアカウントを選び、許可ボタンを押します。承認が完了すると、スクリプトが実行されます。 - 生成されたドキュメントを確認する
スクリプトが正常に終了すると、指定したフォルダ(またはドライブの直下)に新しいドキュメントが作成されます。開いてみると、プレースホルダーがシートのデータに置き換わっているはずです。必要に応じて、出力先のフォルダIDやファイル名をコード内で変更できます。
サンプルコードの詳細説明
上の手順で使用する具体的なコードの例を示します。以下のスクリプトは、アクティブなシートからデータを取得し、指定したテンプレートドキュメントをコピーしてプレースホルダーを置換する流れです。
function generateDocuments() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data = sheet.getDataRange().getValues();
var headers = data[0];
var templateId = 'YOUR_TEMPLATE_DOC_ID';
var folderId = 'YOUR_OUTPUT_FOLDER_ID';
for (var i = 1; i < data.length; i++) {
var row = data[i];
var doc = DocumentApp.openById(templateId).copy('Document ' + row[0]);
var body = doc.getBody();
for (var j = 0; j < headers.length; j++) {
body.replaceText('{{' + headers[j] + '}}', row[j]);
}
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
file.moveTo(DriveApp.getFolderById(folderId));
}
}
このコードでは、まずシートの全データを二次元配列として取得します。1行目が見出し行で、テンプレートのプレースホルダー名に対応します。その後、データ行ごとにループし、テンプレートをコピーして新しいドキュメントを作成し、body.replaceText()で各行の値に置き換えます。最後にドキュメントを保存し、指定フォルダに移動します。templateIdとfolderIdは各自の環境に合わせて変更してください。
連携テンプレート使用時の注意点とトラブル対策
権限承認が必要です
スクリプトを初めて実行するとき、スプレッドシートとドキュメントへのアクセス権限を求めるダイアログが表示されます。これは正常な動作です。承認画面で「許可」をクリックしてください。未承認のままではスクリプトがエラーになります。また、権限の範囲は「スプレッドシートの現在のファイル」「ドキュメントの現在のファイル」「ドライブの特定フォルダ」など、必要最小限に設定するのが安全です。スクリプトエディタの「権限の確認」から変更できます。
スクリプトの実行時間制限に注意する
Apps Scriptの無料アカウントでは、1回の実行につき6分間の制限があります。大量のデータ(数百行以上)を一度に処理する場合は、タイムアウトエラーが発生する可能性があります。その場合は、データを分割して複数回実行するか、処理をスリム化する必要があります。また、スクリプト内でDriveAppやDocumentAppを多用すると処理が遅くなるため、バッチ処理が推奨されます。
プレースホルダー名は正確に一致させる
replaceText()は大文字と小文字を区別します。シートの見出し行が「顧客名」で、テンプレートのプレースホルダーが「{{顧客名}}」となっていても、半角スペースや全角の違いがあると置換されません。特に{{の前後や名前の部分に余計な空白がないか確認してください。また、ドキュメント内でテキストが複数の段落に分かれている場合、replaceText()は一度に一つの箇所しか置換しません。同じプレースホルダーが複数回出現する場合は、ループ内で繰り返し呼び出す必要があります。
テンプレートのコピーが意図通りに動作しない場合
テンプレートドキュメントに画像や表が含まれている場合、コピー後にそれらの要素が正しく保持されないことがあります。特に画像は、元のファイルへのリンクが切れる可能性があります。その場合は、画像をデータとしてシートに保持し、スクリプトで挿入する方法も検討してください。また、テンプレートのスタイル(フォントや色)はコピー時に引き継がれますが、プレースホルダー置換後もスタイルは維持されます。
ADVERTISEMENT
従来の手動連携とApps Script連携の比較
| 項目 | 手動コピペ | Apps Script連携 |
|---|---|---|
| 所要時間(10件の文書) | 約30分(1件3分) | 約1分(スクリプト実行) |
| ミスの発生リスク | 高い(コピー漏れ、誤入力) | 低い(コード通りの処理) |
| スケーラビリティ | 低い(手作業が限界) | 高い(データ量に応じて対応可能) |
| カスタマイズ性 | 低い(毎回手動調整) | 高い(コード修正で自由に変更) |
| 初期設定の手間 | なし(すぐ作業可能) | あり(コード記述と権限承認) |
まとめ
この記事では、GoogleスプレッドシートとGoogleドキュメントをApps Scriptで連携する方法を解説しました。具体的には、シートのデータをテンプレートドキュメントのプレースホルダーに反映させるコードテンプレートとその手順を紹介しました。このテンプレートを応用すれば、請求書や報告書、名簿などの一括生成が数分で完了するようになります。まずはサンプルコードのtemplateIdとfolderIdを実際のIDに変更して、1行のデータでテストしてみてください。動作が確認できたら、データの行数を増やしたり、出力するドキュメントのファイル名に日付を含めるなど、カスタマイズしてみましょう。さらに発展させたい場合は、スクリプトに条件分岐を追加して、特定の列の値に応じて異なるテンプレートを使い分けることも可能です。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleドキュメントの人気記事ランキング
- 【Googleドキュメント】上付き・下付き文字の入力方法!ショートカットと手動切替
- 【Googleドキュメント】ルビ(ふりがな)を振る方法!代替ツールとアドオンの活用
- 【Googleドキュメント】文字間隔(字間)を調整する方法!カーニングの代替手段
- 【Googleドキュメント】図表番号の自動採番!Figure 1, Table 2 の連番
- 【Googleドキュメント】Docs→Wordへエクスポート!docx出力での書式維持
- 【Googleドキュメント】縦書き表示を実現する方法!代替ツールと回避策
- 【Googleドキュメント】インデントを正確に調整する方法!ルーラーとタブストップの使い方
- 【Googleドキュメント】罫線を縦・横に挿入する方法!Wordの罫線機能との比較
- 【Googleドキュメント】共有後に閲覧履歴を確認!誰がいつ開いたかの追跡
- 【Googleドキュメント】共有先の名前が表示されない時の対処!匿名動物アイコンの正体
