はじめに
DMを郵送するときなど、顧客名簿アプリの一覧画面から宛名ラベルを出力できると便利です。ただ宛名ラベルの用紙は色々な種類のレイアウトのものが販売されており、Excelで印刷しようとした場合はラベルの印刷位置合わせが大変です。
こういった場合には、各社から提供されている宛名ラベルのテンプレートを使ってWordなどの差し込み印刷で印刷するようにして、宛名データには「Excelを出力する」で出力したExcelファイルを利用することをオススメします。
なお、テンプレートで位置合わせして直接PDFで出力することも可能なので、後半ではその場合のテンプレートの作成方法もご紹介します。
今回のカスタマイズで用いるアプリ
今回のカスタマイズで用いるアプリは、この記事内で出てくる全てのカスタマイズで共通となります。
送付状アプリ
このアプリは 「お中元・お歳暮」送付状アプリを作ってみよう で作成したものと同じものです。
なお今回の出力に使うのは、これらのフィールドのみです。
テンプレートアプリ
テンプレートアプリについては、CustomineでExcel出力 / PDF出力を試してみよう などの記事を参考にアプリを作成しておいてください。
差し込み印刷を行う場合のカスタマイズ
カスタマインで差し込み印刷用データ作成を行うカスタマイズについて説明します。
差し込み印刷用データ作成で用いるテンプレートファイル
リファレンスマニュアルの「レコードの一覧に対して利用できるgusukuコマンドの仕様」にも記載があるのですが、Excel出力やPDF出力においては$FOREACHコマンドおよび$ENDコマンドを用いると、複数レコードを展開して出力を行うことができます。
$FOREACHおよび$ENDコマンドを設定したテンプレートファイルの例
今回のカスタマイズでは次のようなテンプレートファイルを準備し、テンプレートアプリの添付ファイルフィールドに保存しておいてください。
差し込み印刷用データ作成のカスタマイズについて
カスタマイズは5つのアクションで構成されます。
ボタンの配置
まず、やること「ボタンをメニュー位置に配置する」条件「一覧画面を表示した時」を用い、ボタンを配置します。
チェックボックス列の追加
続いて、やること「一覧にチェックボックス列を追加する」を用いてチェックボックス列を追加します。
チェックしたレコードの印刷処理
やること「一覧で選択されたレコードを取得する」でチェックしたレコードを取得できます。ボタンを押した時にレコードを取得するため、条件は「ボタンを押した時」を用います。
続いて、「キーを指定してレコードを取得する」でテンプレートを取得します。
最後に「Excelを出力する」で出力します。
差し込み印刷用データ作成のカスタマイズ最終形
最終的にカスタマイズは次のようになります。
差し込み印刷用データの出力結果
出力ファイルは次のようになり、この出力結果を使って色々なソフトで宛名ラベルの印刷を実現することができます。
PDFで直接出力する場合のカスタマイズ
この場合のカスタマイズはテンプレートファイルの作り方で2つの方式があります。
それぞれの方式について説明します。
テンプレートファイル上で直接出力指定する方式(推奨)
上のカスタマイズの例のように、1行や複数行に対し1レコードの情報となるようなレイアウトでExcel出力したり、印刷する場合はテンプレート上で $FOREACH~$END コマンドを使うのが適切になるのですが、シールラベルや名刺カード印刷用のシートの場合は印刷領域が左右2列の配置となっている事があります。
【ラベル印刷シートの例】
こういった、「1行に複数レコードの情報を乗せる」ケースでの印刷(※宛名ラベルシートの様な出力対象に直接印刷をしたい場合はどうすればよいのでしょうか?
直接出力指定する方式のテンプレート例
この様なレイアウトでのPDF出力を行いたい時は $FOREACH~$END コマンドを使わずに次のようなテンプレートを作り、レコードの行を直接指定する事でラベル印刷のような印刷レイアウトをシンプルに実現できます。
※全てのセルに上寄せ設定を入れ、住所の出力設定をしているセルのみ折り返し設定を入れています。
直接出力指定する方式のカスタマイズ例
このテンプレートに対応するカスタマイズは先の例(差し込み印刷を行う場合のカスタマイズ)のアクション1〜4と全く同じ設定ですので、ここでは差分となるアクション5に相当する箇所のみ内容を説明します。
PDFの出力
このアクションでは、やること「PDFを出力する」を使いPDFを出力します。
直接出力指定する方式の出力結果
出力結果のPDFは次のようになります。このPDFファイルをラベル用紙に印刷してご利用ください。
テンプレートファイル上でindirect関数を用いる方式
上の例とは別の方式として、出力結果で宛名一覧を出力し、出力されたセル値をExcelテンプレート内でindirect関数を用いて参照し、宛名ラベルを印刷する方法もあります。
この時は次のように1テンプレートに2つのシートを作成し、
・Job Runnerからレコードを格納するシート
・シートに格納された情報を元に出力整形を行うシート
という形にし、後者のシートではindirect関数を用います。
indirect関数を用いる方式のテンプレート例
この場合のテンプレートファイルは2つのシートで構成されます。
送付先一覧シート
このシートは、前述の差し込み印刷で用いているテンプレートと同じものです。
また、このシートは印刷出力が不要であればシートを非表示設定しておくと、後述の「ラベル印刷」シートのみがPDFの出力対象となります。
ラベル印刷シート
前述の「送付先一覧」シートに対し、indirect関数でシート内の値を参照しています。
A1からB4には次の式を入力しています。
このような表計算上での式とする事で、展開後のセル位置を直接参照することが可能になります。
indirect関数を用いる方式のカスタマイズ例
先ほどの「直接出力指定する方式」と設定は同じの為、割愛します。
PDF出力用テンプレート作成時の補足
PDFを出力するテンプレートでは、出力対象とならないシートを非表示としておくと、そのシートはPDF出力されなくなります。
もしくは全シートをPDF出力対象とし、PDF出力後印刷する際に、印刷したいページのみ、範囲指定して印刷するという運用を行ってください。
またPDFで出力する場合はExcelの画面表示とは印刷結果の細かな位置が違ってくるため、テンプレート作成時にExcelの機能「PDFとして保存」を使い、PDFに変換した結果を確認しながら作成するようにしてください。
まとめ
印刷フォーマットが決まっているものに合わせ込むような印刷設定は、テンプレートの設定というよりはExcel側の設定や調整が大変ではありますが、Excel上での印刷位置合わせに慣れている方だとやりやすいかもしれません。
レイアウトや数式を工夫するともっと複雑な印刷も実現できそうです。ぜひ色々と試してみてください。