Excel アダプタに書式・コメント書き込み機能が追加されます

Avatar
dstn

こんにちは、開発部の野口です。

 

DataSpider Servista 3.1 Service Pack 5 *1 と、3.2 Service Pack 1 *2 のそれぞれで、
Excel アダプタに書式・コメント書き込み機能が追加されます。

 

この記事では、書式・コメント書き込み機能の実力に迫ります!

 

*1 2015/1/16 リリース
*2 2015/4 リリース予定

 

概要

 

書式書き込み

 

Excel アダプタの書き込み処理で、以下の書式が書き込めるようになりました。


 ● フォント
  ・ フォント名
  ・ スタイル
  ・ サイズ
  ・ 下線
  ・ 取り消し線
  ・ 文字飾り
  ・ 色

 ● 罫線
  ・ 左
  ・ 右
  ・ 上
  ・ 下

 ● 塗りつぶし
  ・ 背景色

結構色々書き込めますね。

試しにすべての書式をドカンと一発適用してみた例がこちらです。
ef1ef2ef3
all_formats

 

なんだかすごいことになっちゃったぞ……。

 

コメント書き込み

 

また、セルのコメントを書き込むこともできます。
ec
allez_vous

 

この通り!

 

仕組み

 

Excel 書式生成ロジック

 

書式やコメントをどのようなかたちで指定できるようにするかについては、議論と検討を重ねた結果、専用のロジックアイコン を作成することにしました。

先ほど設定画面をちらりとお見せしましたが、その名も、Excel 書式生成ロジックです!
egf

 

Excel 書式生成ロジックは、Mapper のツールパレットの、ズバリ [Excel] - [基本] にあります。わかりやすいですね。

 

オペレーションの設定として指定するのではなく、ロジックアイコンで書式・コメントを指定することで、以下のようなメリットがあります。

 

■ アダプタの設定が複雑にならない

書式の設定をロジックアイコンに任せることで、オペレーションの設定が複雑になりません。
実際、Excel の書き込み処理のプロパティについては、[Mapperで書式を指定して書き込む] というチェックボックスの他には何も変更がありません。
書式を書き込まない場合は、これまでとまったく変わらない操作感でスクリプトを作成していただけます。

 

■ Mapper ロジックを組み合わせることで、列単位ではなく、セル単位で書き込む書式を切り替えることができる

たとえば、「オペレーションの設定として、列ごとに書式を設定できるようにする」ことも考えられました。
しかし、実際の業務では、行や、書き込む値によって書式を切り替えたい場合もあるはずです。
豊富な Mapper ロジックを自由に組み合わせて、それを実現することができます。

 

既存オペレーションで対応

 

また、書式・コメント書き込みが可能なオペレーションを新規追加するか、既存オペレーションのまま対応できるようにするかについても様々な観点から検討し、最終的に、既存オペレーションのまま対応できるようにしています。

 

そのため、場合によっては、既存スクリプトのフローを変更することなく書式書き込みに対応させることも可能です!

 

ただし、以下のような注意点があります。

 

■ 書式・コメントを書き込むようにすると、入力スキーマが XML 型になる

入力スキーマに「format」という要素が追加されるため、入力スキーマは XML 型になります。

 

そのため、PSP が無効になるなど、大量のデータを処理していた場合のパフォーマンスに影響が生じる可能性があります。
既存の処理を書式・コメント書き込みに対応させる場合、念のため、スクリプトを簡単に元の状態に戻すことができるようにしてから作業されることをおすすめします。

 

とはいえ、ほとんどのケースでは目立った影響はないでしょう。

 

活用例

 

書式・コメント書き込み機能の活用例を考えてみました。

 

オフィスグレコ在庫チェックスクリプト

 

ギリシアから地中海の香り漂うおいしいお菓子をオフィスにお届けする画期的なサービス「オフィスグレコ」の業務を自動化してみましょう。

 

オフィスグレコ」は、皆さまのオフィスの管理部門に定期的にお菓子をお届けします。

オフィスグレコの在庫数はデータベースで一元管理されていて、各部署はメールに Excel ファイルを添付して管理部に申請すると、申請した数のお菓子が部署まで届きます。
(なんか色々と無理がありますが、そういうことにします)

 

メールで届く Excel ファイルには各商品の発注数が記入されていますが、記入された数の在庫が存在しない場合があります。

この在庫が足りないケースで、申請者に通知する処理を自動化してみます!

 

■ スクリプトの全貌

スクリプトの全貌は、こんな感じになります。
script


 1. スクリプト実行時のオフィスグレコの在庫を取得して、あとで使いやすいようにスクリプト変数に格納します。
 2. メールを受信し、添付されていた申請書を読み取ります。
 3. Mapper で在庫をチェックし、足りない場合は書式・コメントを設定します。
   ここがキモです!
 4. 実際にファイルに書き込みます。書き込み先は、読み取ったものと同一のファイルです。
 5. 書き込んだファイルを送り返します。

※本当は、在庫が足りた場合と足りなかった場合とでメールの文面を切り替えたりとか、やった方がいいことは色々ありますが、その辺は端折っています。

何となく処理の流れをイメージしていただけましたでしょうか。

 

■ Mapper の中身

続いて、「ここがキモです!」とした、Mapper の中身を覗いてみましょう。
mapper

 

入力は Excel の読み取り処理、出力は同じく書き込み処理ですが、出力スキーマには「format」要素があります。
お察しの通り、書き込み処理では [Mapperで書式を指定して書き込む] にチェックを入れています。

 

処理の流れはこうです。


 1. 各行について、品目に応じてスクリプト変数から在庫数を取得し、申請書に入力された個数と比較する。
 2. 申請書に入力された個数が在庫数より大きければ、 書式・コメントを「個数」列に出力する。

ポイントは、「ならば出力」という名前で置かれた、「条件判定による出力の切り替え」ロジックです。
このような設定を行っています。
if1if2if3

 

こうすることで、「その行の品目の個数が在庫数より大きかった場合にのみ、書式・コメントを書き込む」という処理を実現しています。

 

■ 実行するとこうなる!

最後に、「メールで受け取った申請書」と「スクリプト実行後の申請書」の画像をお見せします。

【メールで受け取った申請書】
before

【スクリプト実行後の申請書】
after

 

アーモンド・グレコは在庫が残り 100 個だけだった(という設定)ので、在庫チェックに引っかかったのでした。
ポイントは、注文が 3 品(= 3 行)あるなかで、「アーモンド・グレコ」の行だけ書式・コメントが書き込まれていることです。

 

Mapper ロジックアイコンを活用することで、条件に応じて書式を書き込めることがわかっていただけたかと思います!

 

これまでの「書式設定」とどう違うの?

 

これまでにも Excel アダプタを活用してこられた方は、オペレーションの [列一覧][書式設定] を指定できることをご存知かと思います。
この [書式設定] と、Excel 書式生成ロジックによって指定できる書式との関係が、少しわかりづらいかもしれないので、ご説明します。

 

その関係は、以下のようになります。


 ● オペレーションの [書式設定] : 従来通り動作する。([フォーマット] 列では、表示形式を指定することができる)
 ● Excel 書式生成ロジック : オペレーションの [書式設定] を、指定した要素だけ、 部分的に上書きする。

部分的に上書き」というのは、たとえば以下のような動作を指します。


 ● 書き込み先のセル : フォントサイズは 10、 背景色は青色
 ● オペレーションの [書式設定] : [書き込み先の書式を利用する] を選択
 ● Excel 書式生成ロジック : フォントサイズに 12 を指定、他はデフォルトのまま

この状態でスクリプトを実行すると、「書き込み後のセルのフォントサイズは 12(に書き換わる)、背景色は青色(のまま)」となります。

 

このように、Excel 書式生成ロジックで指定しなかった要素(この場合「背景色」)は、オペレーションの [書式設定] で指定した通りとなります。

 

Excel 書式生成ロジックで書式を書き込みたい場合も、オペレーションの [書式設定] では、[書式を指定して書き込む] だけではなく、すべての [書式設定] を自由に選択することができます!

 

今後の展望

 

Excel アダプタでは他にも、DataSpider Servista 3.2 から xlsx / xlsm 形式のファイルでもセル指定による書き込みが新たに行えるようになるなど、機能強化を進めています。

 

この調子で、セル指定による読み取りや、セル指定での書式・コメント書き込みにも対応したいところです。
開発者(私)はそのように意気込んでいます。

 

あくまで意気込みなのでお約束はできませんが、楽しみにお待ちいただければ幸いです!

コメント

ログインしてコメントを残してください。

Powered by Zendesk