Googleスプレッドシートで宛先を管理し、
印刷したい宛先をチェックして、宛名出力スクリプトを起動すると、
そのまま宛名印刷ができる状態のGoogleスライド形式ファイルが手に入るツールを作ってみました。
宣伝
ここから購入できるので、よければ買ってやってください。
ツール概要
使い方
こんな形で、スプレッドシートで宛先を管理して、
同じスプレッドシートに、宛名テンプレートのGoogleスライドIDと出力先のフォルダIDを設定します。
宛名テンプレートのGoogleスライドはこんな感じ。
印刷したい宛先にチェックを入れて、「出力開始」とすると…
Googleスライドのテンプレートに従って、宛名印刷できる状態のファイルURLが取得できます。
Googleスライドにアクセスするとこんな感じです。
GASでやっていること
「出力開始」とすると、テンプレートのGoogleスライドを出力先のフォルダにコピーし、
テキストボックスの内容をスプレッドシートの内容で置換しまくっているだけの単純なものです。
創意工夫したところ
このツールを作るにあたって色々と頑張った部分を紹介します。
連名対応
連名は4人まで対応することができます。
連名の人数に応じて、使用するテンプレートを切り替える方式にしました。
連名をGASだけで頑張るのではなく、Googleスライドで連名の人数に対応するテンプレートをあらかじめ用意することで、GAS側の処理がスッキリしたと思います。
縦書きの苦悩
Googleスライド(というかGoogle Workspace全般)には「縦書きテキストボックス」というものが存在しません。
縦書き文化は海外ではなかなか見かけないと思うので、今後も縦書きにはおそらく対応しないでしょう。
そのため、以下図のように、縦に細長いテキストボックスを使って、なんとか縦書きのように見せています。
ですが、この状態で文字列をそのまま置換しただけではレイアウトがめちゃくちゃずれてしまいました。
悔しいので、「Googleスライド 縦書き」とGoogle先生に聞いてみると、回避策として「1文字ずつ改行する」というのがありました。
以下、参考にしたページです。
テキストボックスに文字を挿入する際に、「1文字ずつ改行」するような処理を入れればなんとかなりそう、、、
ということで、こんな関数を用意しました。
function insertNewLine(text) {
return Array.from(text).join('\n');
}
文字列を一文字ずつの配列にして、改行コードでjoinしてやりました。
テキストボックスの値を書き換えるときに、この関数をこんな感じで使ってやります。
// textRangeオブジェクトはテキストボックスです
textRange.setText(insertNewLine(`${printData['連名①']} ${printData['連名①_敬称']}`));
こうすることで、縦書きのレイアウト崩れを(全て回避できたわけでは無いですが)解決しました。
あとがき
Google Workspace縦書き対応してくれないかなぁ。
きっとしないだろうなぁ。
というわけで、興味のある方は買ってみてください(しつこい)