異なる会社ごとに文面が同じの文書をプリントしたいと思い、作成。
文面は同じだが、宛先と住所は変更したい。
参考記事
https://blog.synnex.co.jp/google/gas-for-google-document/
ドキュメントは下記の通り。
https://docs.google.com/document/d/1u9IOJI9E6e3svnP7y1FIHacx2gQamJCSQF0OAOOSEw4/edit
スプレッドシートで作成したリストは下記の通り。
https://docs.google.com/spreadsheets/d/1g2cDTXmy2KDT7ltxJYLVRzxLn2cqSCKTMEWnmlfjteU/edit#gid=0
コード
ドキュメント内の内容をスプレッドシート内のリストに変更して複数のドキュメントを作成するコード.gas
/**
* オリジナルのメニューを追加
*/
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({ name: "宛名作成", functionName: "makeDocs" });
ss.addMenu("宛名作成メニュー", menuEntries);
}
/**
* Googleドキュメントを作成する
*/
function makeDocs() {
// テンプレートとするドキュメントIDを設定
var docID = '****************変更する****************'
// スプレッドシートのデータの範囲を設定
var dataStartRow = 2;
var dataEndRow = 10; // 実際のデータに併せて十分余裕を持った最大行数を設定
var dataStartCol = 1;
var dataEndCol = 4;
// スプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('****変更する****');
// スプレッドシートのデータを取得
var datalist = sheet.getRange(dataStartRow, dataStartCol, dataEndRow, dataEndCol).getValues();
// テンプレートをコピーして、スプレッドシートのデータで置換
for (var i = 0; i < datalist.length; i++){
// データがなくなったらループを抜ける
if (datalist[i][0] === '') {
break;
}
// テンプレートをコピーしてファイル名を設定する
var docCopyID = DriveApp.getFileById(docID).makeCopy('宛名_' + datalist[i][3]).getId();
// コピーしたドキュメントを取得し、スプレッドシートのデータで文字列を置換する
var doc = DocumentApp.openById(docCopyID);
var body = doc.getBody()
body.replaceText("{number}", datalist[i][1]).replaceText("{address}", datalist[i][2]).replaceText("{name}", datalist[i][3]);
}
}
悩んだところ
ドキュメント内の置換文字を日本語にしていたらリストの内容が反映されなかった。
ドキュメント内の置き換え文字を日本語から英語に変えたら動いた。
ドライブ内にスプシ(リストが記載されているもの)とドキュメントのテンプレートを格納して使用すると同じドライブ内にドキュメントが格納されるので管理しやすいと思う。