Designer:雛形シートの作り方

図版を更新し、次の記事に掲載しましたので、こちらを参照してください。

Designer:ひな形の在り方

https://xoblos.hatenablog.jp/entry/2021/07/08/023318

 --

【2017年時点のオリジナル記事】

大きく二種類。

xoBlos の生成処理で、生成するレイアウトのベースとなるのは雛形シートです。これは、大きく分けて二つの作り方があります。一つは、最低限必要な(共通する)レイアウト部分を用意すること。もう一つは、既存情報(出力するデータの情報)を予めいれておくこと。‥‥後者の情報は、分類または見出しの項目で、判断させることができます。

f:id:xoblos:20170508165657p:plain

上図を期待する結果として、様々な要件をこなしてみましょう。「ID」は分類項目とします。‥‥先ず最初の要件は、"抽出時に読み込んだ順で、一から単純生成する" です。

f:id:xoblos:20170508165701p:plain

上図のように、最低限必要なレイアウト部分を用意するパターンになります。データは増えていくので、キーワード『行ひな形の左上』が必要になりますね。

それでは次に、"ID が 1~4 のデータだけ出力して他データは出力させない" という要件を挙げられた場合には、どのように作りましょうか。

f:id:xoblos:20170508165706p:plain

上図のように、既存情報を予めいれておくパターンになります。データは増えないので、キーワード『行ひな形の左上』は設定してはいけません。しかしこれだけでは、ID が 1~4 以外のものも処理上読み込まれ、新規に行を追加しようとします。ですが『行ひな形の左上』が無いのでエラーが起こってしまいます。‥‥それを防ぐ役割を持つキーワードが、『行・列の作成禁止』の「禁」設定になるのです。

では最後に、"ID が 1 と 2 のデータはくることが分かっていて絶対出力して欲しいのだけれど、他にどんなデータが来るかは分からない" という要件を挙げられた場合は、どのような雛形シートを作ることになるでしょうか。

f:id:xoblos:20170508165711p:plain

上図のように、両パターンを合わせた形になります。

②と③のような、既存情報を入れておくことができる点は、出力するデータの順序をユーザレベルで操作/定義できる利点にも繋がります。例えば "ID が 2、4 のデータは上位に出力したい!" という要件を実現するには、どのような雛形シートを用意すれば良いか考えてみてください!

Designer:「%Row」の役割

抽出と生成で差が出る役割。

「%Row」は xoBlos の予約語の一つであり、内部で自動的に採番値を作成する面は、抽出も生成も同じです。いずれも採番値に対し 1000000 を加えて先頭に "R" を付けた文字列が入ります。但し、作成するまでの過程に差があります。

f:id:xoblos:20170502105754p:plain

先ずは上図――抽出用の「%Row」を設定してみましょう。抽出元には存在しない情報なので、キーワード『対象セル』に「%Row」と設定します。

f:id:xoblos:20170502105800p:plain

続いて上図――前述で抽出したデータを用いつつ、生成用の「%Row」を設定してみましょう。キーワード『入力項目名』に、基本データには存在しない項目なので、「#」始まりで項目を設定します。そしてキーワード『固定値』に「%Row」とします。

f:id:xoblos:20170502105806p:plain

生成結果です。D列と E列に差が出ましたね。結果からも判断できるかもしれませんが、以下の仕組みの差がありますので、取り扱いにご注意ください。

抽出での「%Row」:抽出元の、データが置いてある Excel 行 No を見ている。
生成での「%Row」:基本入力ファイルの、レコード No を見ている。

Designer:xoBlos の中間処理

基本形態と考え方はいつでも同じ。

xoBlos の役割として、基本は「(入力データから)データの抽出」~「(抽出データを使って)帳票の生成」という形態になります。他にも「データの加工」という役割も持っていますが、これはどういう仕組みになるのでしょうか。‥‥難しいことではありません。加工も結局のところ、「(入力データから)データの抽出」~「(抽出データを使って)中間データの生成」という、同じ形態を確立することなのです。

中間処理で関わるデータは、どういう作りであっても構いません。XML データ、雛形シート、いずれも内部で取り扱われるものなので、見た目や表現は重要視しなくて良いのです。

相手は Excel

f:id:xoblos:20170428132701p:plain

制御シートのキーワードには、抽出データの内容を編集/判定するものも用意されています。ただ、それを活用しても期待する結果を得られない要件が出てくる場合もあります。例えば上図、C列と D列に出力される内容を、B列の内容によってどちらか一方を「対象」とする要件があったとしましょう。一項目にそれらを纏めるにはどうしたら良いでしょうか。

雛形シートを用意する時点で Excel の標準機能に触れることになりますが‥‥そうなれば Excel の機能さえもフル活用してしまえば、抽出データに存在しなかった情報を取り扱うこともできるようになるのです。

f:id:xoblos:20170428132709p:plain

上図雛形シート E列に、一列設けました。ここに Excel の関数が入れてあります。その為、制御シートのキーワード『対象部分の右下』は「E3」まで伸びました。たとえ抽出データに存在しない内容(列)であったとしても、繰り返す範囲を明示しなければ、各レコードの情報は正しく得られません。

f:id:xoblos:20170428132714p:plain

表のレイアウト、2行目の列項目名――。全て開発やメンテナンスのし易さを意識した上で、自由なのです。最終的に生成する帳票上に必要とされるデータ(上図例で言えば E列)を抽出できれば、問題はありません。

Designer:複数のデータ抽出

抽出ファイルに入力データの名前を持たせる。

以下の、計 3ブック中――計 6シートのデータを抽出対象としましょう。

f:id:xoblos:20170412100228p:plain

f:id:xoblos:20170412100234p:plain

data1.xlsx:「Sheet1」「Sheet2」「Sheet3」     
data2.xlsx:「Sheet1」
data3.xlsx:「Sheet999」「SortData

参照するブック名は、いずれも "data" 始まりなので、下図のように『2.入力設定』節の『a.ファイル名』項は「data*.xls*」とすれば、同階層に他ブックが存在したとしても影響なく複数対象とすることができます。(※ "xls*" は「.xls」や「.xlsm」形式が設置された時の保険としています。)『b.シート名』項は、全シートの参照を示すように「*」と設定しましょう。

f:id:xoblos:20170412103842p:plain

まとめたものを取り扱いたいので、『3.出力設定』節の『a.ファイル名』項に設定したものには、抽出対象の全データが入りそうな気はしますが――

f:id:xoblos:20170412100248p:plain

‥‥残念ながら、一番最後に参照されたブック「data.xlsx」の、シート「SortData」のデータしか取得できませんでした。『Excelから抽出』の手順は仕様上、複数のデータを対象とすることはできますが、参照情報をまとめることはできません。データをまとめる方法は、前回記事をご参照ください。

f:id:xoblos:20170412110010p:plain

上図、下部の赤枠にも説明文がありますが、xoBlos の予約値を使うことで、入力データの情報をそのままあて込むことができます。たとえブックとシートの数が 1:1 であったとしても、「%SHEET%」をいれておくと変更対応に強いです。

f:id:xoblos:20170412100305p:plain

また予め固定文言を付け加えておくと、後続処理で参照のし易さ/中間ファイルの管理/中間ファイルの上書き防止等の面で、より良いものとなるかもしれません。

f:id:xoblos:20170412100312p:plain

ワイルドカード「*」の取り扱いに慣れたら、今回例のブック「data3.xlsx」のシート「SortData」が抽出対象外とされた時、各項どのような設定をすれば良いのか考えてみましょう。共通している文言を見極め、設定してみてください!

Designer+Windows:フォルダの中のファイルリストを作成する

特定のフォルダの中にあるファイル名のリストを作成する、フォルダの中のファイルリスト作成.xobという業務を作ってみましょう。下図のような位置にある、INPUTフォルダを対象にしてみます。

f:id:xoblos:20170409233258p:plain

INPUTフォルダの中には、5個のファイルと1個のサブフォルダがあります。

f:id:xoblos:20170409234830p:plain

もし、下図のように1行目に「ファイル名」という名前の項目名、2行目以降にファイル名のリスト形式にできれば、「手順の繰り返し実行の設定」で活用できそうです。この場合、資料 というサブフォルダ名はリストには必要ありません。

f:id:xoblos:20170409233356p:plain

xobファイルに設定する前に、まずコマンドプロンプトで検証してみます。dir INPUT というコマンドだけだと、余分な情報がたくさん表示されてしまいます。

f:id:xoblos:20170409233435p:plain

/B オプションを付けて、dir INPUT /B とすると、ファイル名の表示だけになりますが、まだ 資料 というサブフォルダ名(ディレクトリ名)が 余分です。/AD オプションでA(属性)がD(ディレクトリ)のものだけ、/A-D のようにして、D(ディレクトリ)以外のものだけにできます。

f:id:xoblos:20170409233500p:plain上記DIRコマンドの実行結果を、>(リダイレクト)で filelist.csv というファイルに書き込みます。出力結果を、typeコマンドで確認してみます。

f:id:xoblos:20170409233601p:plain

1行目を項目名にするには、最初にechoコマンドで "ファイル名" を書き込んでから、その後で >>(アペンド書き込み)で追加書き込みをします。これで良さそうですね。

f:id:xoblos:20170409233621p:plain

確定したコマンドを、flist.bat というファイルに書き込んで、xobファイルのあるフォルダに保存します。

f:id:xoblos:20170409233653p:plain

後は flist.bat を、xob業務の「外部アプリの実行」手順から呼ぶだけです。

f:id:xoblos:20170410010428p:plain

「関連付けられたアプリケーションで実行しますか?」が「はい」でbatファイルを実行できない環境では、ここを「いいえ」にして、「実行するファイル」%ComSpec% にし、コマンドライン引数」を /s flist.bat にしてください。 

手順を実行すると、filelist.csvが作成されます。

f:id:xoblos:20170410011046p:plain

補足
この例では、ファイルリストの拡張子を便宜上 .csv にしています。「手順の繰り返し実行の設定」で使用できるファイルリストのファイル形式は、XML形式かCSV形式(またはタブ区切りなど、カンマ以外の区切り文字形式)のどちらかです。この例では、レコードにカンマ区切りがないため、.txt のような拡張子で設定しても構いません。

Designer:『外部アプリの実行』手順を作成する

Designerトップメニューの、[新しい手順]-[外部のアプリケーションを実行] を選択します。

f:id:xoblos:20170409083237p:plain

「外部アプリの実行」手順が作成されます。

f:id:xoblos:20170409083258p:plain

ヘルプへリンク

xoBlos Designer ヘルプ - 外部アプリの実行

f:id:xoblos:20170409083310p:plain

Designer:#S 記号(Spacer)で不要な箇所を削除する

SUM関数を使用した集計例(合計行の前に1行空行が入る)

【ひな形シート】

f:id:xoblos:20170331165621p:plain

B4のセルには、=SUM(B2:B3) という関数が入っています。

【制御シート】

f:id:xoblos:20170331165648p:plain

【出力結果】

f:id:xoblos:20170331165701p:plain

SUM関数を使用した集計例(合計行と明細行の間をくっつける)

【ひな形シート】

f:id:xoblos:20170331165747p:plain

【制御シート】

f:id:xoblos:20170331165802p:plain

【出力結果】

f:id:xoblos:20170331165818p:plain

ポイントは、ひな形シートに入れた #S 記号です。#S は、Spacerの意味合いで、処理後に削除する箇所に指定します(指定できるのは分類項目、または見出し項目のみ)。この例では、「大分類」という分類項目に指定しているので、処理後に行を削除することができます。

記号判定処理を施すため、制御シートの「整形対象部分の右下」キーワードも必要となります。