Excel/PDF出力のテンプレートの作り方のちょっとした小話

公開日:

こんにちは。サポートチームの自称帳票まにあ、ほり🐰です。

注意

本記事は情報提供を目的としており、本記事の内容は無保証、サポートの対象外です。
サポート窓口、問合せ窓口にご質問をいただいても対応いたしかねますのでご了承ください。

カスタマインで帳票出そうよ!

みなさん、カスタマインで帳票出力していますか? 実はカスタマインって帳票も出せるんですよ。知ってましたか? 意外と知られていない機能だったりするかもなので、これを機会にぜひお試しいただきたいです!

帳票っていうか、ExcelとPDF出力なんですけどね。 きちんとテンプレートを用意すれば帳票に使えますよっていうことなんですよね。

カスタマインで帳票出力する時には、帳票レイアウトを決めたテンプレートを用意する必要がありますが、これはExcelファイルで作成します。

見たままのレイアウトをExcelで作るわけですね。
固定値はそのまま文字列などを記載します。

文字の大きさや色、罫線も引き継がれます。
Excel出力の時だけでなく、PDFでも書式は引き継がれますが、PDF出力の時には一部制限がありますので、『結果がなんか思ってたのと違うぞ?』となった時にはこちらのページを一読いただけるとありがたいです。

PDF出力時の制限事項

フィールドの値を表示する方法

細かい色々はドキュメントサポートサイトの記事を見ていただきたいのですが。

簡単に言うと、

$(フィールドコード)

と書かれた部分に、そのフィールドコードの値が出力されます。
ここに書くのはフィールドコードです。フィールド表示名と間違ってしまうケースもあるので要注意です。

例えば

$(顧客名)

と書かれたセルがあると、出力時にそのセルには「顧客名」フィールドに入っている値が出力されるわけです。

Excelには値として文字列で扱うか数値で扱うか日付で扱うか、、、みたいな設定もあるので、明確に指定したい場合は先ほどのコマンドにSTRやNUMやDATEをつけて設定します。

出力した結果が数値として扱われちゃって、先頭の0が勝手に消えちゃう!みたいな問題とか、数値の桁区切りなどの書式に反映したいときとか、日付形式の見た目を変えたい時なんかに使えます。

$STR(企業コード)

$NUM(合計金額)

$DATE(注文日)

他にもいろんなコマンドがありますが、今回注目したいのは、この基本のフィールド値出力の書き方についてです。

ちょっと凝った作り

上にも書きましたが、要は

$(フィールドコード)

というような、テンプレートに必要な書き方に沿ったコマンドを指定してれば、kintoneのレコードのフィールドの値を出力できるわけです。

フーン。。。じゃあ、会社コードに値が入っている時は会社名フィールドの値、入ってない時は空欄を出したい時はどうするの?

その時は$IFコマンドを使います。

$IF(会社コード)$("")$("")$(会社名)

じゃあさ、顧客種別がA・Bあって、Aの時は会社名Aフィールド、Bの時は会社名Bフィールドの値を出したいときはどうすんの?

はい、ごもっともです。

でもこのようなパターンの判定は$IFコマンドだけでは対応ができません。
基本的には、顧客種別、会社名A、会社名Bの3つのフィールドをそれぞれ帳票の欄外の別のセルに出力してもらって、それをExcel関数で参照して表示するような方法になります。

= if(顧客種別のセル= “A”,会社名Aのセル,会社名Bのセル)

もしくはもう少し詳しく書くなら

= if(顧客種別のセル= “A”,会社名Aのセル,if(顧客種別のセル= “B”,会社会社名Bのセル,””))

とかでしょうか。ここらへんはExcelの関数の書き方になるのであまり詳しく書きませんが色々試してみてください。
if関数以外も使える関数はたくさんありますので。

いや〜でも、欄外を使う方法も限度があるし、できたらその辺りも可変にしたテンプレートできないかなぁ?

ぐおおおおおおお!!!!

いやできますよ?できますけど!!

ちょっと癖ありますから要注意ですからね!!!!!

基本に立ち返ろう

改めまして、テンプレートにはこのように記載しておく必要があるわけです。

$(フィールドコード)

逆にいうと、この文字列がセルに配置されていれば、フィールドの値を出力できるわけなのです。

だからね、たとえば、条件によって

$(フィールドコードA)

$(フィールドコードB)

のどっちかを使いたいみたいな時も、条件によってどっちかのコマンドが配置されていればいいわけです。

でも、$()で囲まれた文字列は、テンプレートの中ではコマンドとして扱われてしまうのでちょっと工夫が必要なわけです。

たとえば、こんな書き方だったら行けそうな気がしますよね?

$IF(文字列1行)$("A")$("$(フィールドコードA)")$("$(フィールドコードB)")

でも、これは途中の$()が多すぎるという理由で出力時にエラーになります。

さてどうしましょう。

こうしましょう。

そう、テンプレートExcelファイル作成を、カスタマインのExcelファイル出力でやっちゃえばいいのです!!!

たとえば、こういう仮のテンプレートを用意するじゃろ?

$(文字列1行)

この文字列1行のフィールドにはこういうふうに値をセットしておくじゃろ?

そして、こう(Excel出力)じゃ!

ほら、こうするとコマンドの文字列を出力できちゃうのです。

だから、条件によって出力したいフィールドを変えたいなら、カスタマインで画面の保存時とかにif関数とか「フィールド値が特定の値ならば」で文字列1行フィールドにセットする値を変えてしまえばいいんです。

で、このコマンドの値を出力したExcelをテンプレート用のアプリのレコードの添付ファイルに保存してしまってですね、
そのレコードを取得するんですよね。

そしてそのレコードの添付ファイル(テンプレートExcelファイル)を本来のテンプレートファイルとして指定してExcel/PDF出力したら良さそうな感じしませんか?

うん、よくわかんなかった?

だったらこれはあまり使わない方がいいかもですw

ああ〜なるほどね!となった方だけチャレンジしていただければと思います。

※ただ、サポートでどこまで対応できるかはここで明言できません。あくまで個人的なチャレンジでお願いします。

そうそう、文字列フィールドにコマンドを入れず、そのまま固定値のコマンドを出力したい時はこうしてくださいね。
(こうしないと、最初の出力でコマンドとして処理されちゃいます)

$("$FOREACH")

$(“〜〜〜”)とすると、ダブルクォーテーションに囲まれた部分はそのまま文字列で出力されますので、それを利用するのです。

以上、ちょっとしたコツと言いますか、テンプレート作成時の工夫についてお話ししました。

良きカスタマインライフをお過ごしくださいませ〜o(^_^)o

画面のカスタマイズ、自動処理(バッチ)、帳票出力といった「kintoneの”できない”を”できる”に」
gusuku Customineがあればkintoneらしさをそのままにkintoneをカスタマイズできます

投稿者プロフィール

アバター画像
ほり
kintoneが好き過ぎる、自称帳票まにあ。
テクニカルサポートチーム所属。
「仕事をITでたのしく」をモットーに岡山県倉敷市から完全リモートワークしております!