Designer:空白データ(行)の作り方

全項目が空白であれば‥‥

一覧出力するデータ中に不規則に空白行を入れたい場合は、どのように実現させたら良いでしょうか。不規則なので生成キーワード『ひな形の行数または列数』も決定することができません。

空白行ということは、言い換えれば「全項目の値が空白(Null)であるデータ」ということでもあります。同じ列構成で、XML ファイル内にデータとして持てれば良いですね。同じ列構成ということは、抽出元さえあれば抽出制御シートが使い回せます。すると残される問題は、如何にして入力データから空白行を抽出するか‥‥。否、入力データとは無関係な場所から抽出して仕舞えば解決です!

f:id:xoblos:20181026171938p:plain

新規ブック、或いは取り扱っている制御ブック等、「変更が発生しない」と徹底している所に真っ新なシートを予め用意し、それを抽出元として仕舞えば問題ありません。抽出キーワード『非空白判断列』も『最下行判断列』も、『データ部分の左上』を設定したセル行を基準とする前提がありますので、少なくとも 1件は、 空白データを抽出することが出来ます

f:id:xoblos:20181026171950p:plain

必要な空白行が複数ある場合は、抽出手順に対し、その分繰り返し数を設定すれば問題ありません。しかし複数空白行データを作るということは、出力ファイルに固定のファイル名を設定する訳には参りません。出力ファイルが一意に成るよう、採番値を付加させる『loop 変数』も、序でに学習してしまいましょう。下図青枠部分が関係しています。

f:id:xoblos:20181026172001p:plain

$(loop:1,1,1)
・左側の数値の意味 ‥‥ 初期値
・中央の数値の意味 ‥‥ 増加量
・右側の数値の意味 ‥‥ ゼロ充填桁数

上図赤枠のように、各手順で出力される XML に予め通し番号を固定でファイル名に付加しておけば、並べ替える(連結する)必要も無く最終生成へ臨めます。更に「data」のように共通の固定文言も付加しておけば、後続処理があった際に選択を限らせ易く、また用途も判断し易く成ります。(中間ファイルは多く入り交じりますからね。)

Designer:生成キーワード『セル結合』

セル結合項目を選択する

f:id:xoblos:20181016184843p:plain

生成キーワード『セル結合』は、連続するデータのキー項目が同値である場合、見映え良くする為にセルを結合させる仕組みを持っています。上図のデータを抽出し、項目「売上」を除く各キー項目を、全てその対象にしてみましょう。

f:id:xoblos:20181016184851p:plain

項目「○○ID」と「○○名」は、1:1の関係です。それならば「○○ID」のみ、分類にして仕舞えば良さそうですが‥‥

f:id:xoblos:20181016184857p:plain

結合を有効にしているのにも拘らず、期待する出力結果に成りませんでした。生成キーワード『セル結合』は冒頭のとおり、キー項目に対して設定できます。つまり『区分』が「DATA」である項目には、機能しません。

さてそれでは、項目「○○名」を結合させるにはどうしたら良いでしょうか。「キー項目にして初めて『セル結合』が機能するならば、全部分類にして仕舞えば良い!」というご意見もありましょう。‥‥正解ではありますが、それでは今後、分類項目が増えて仕舞ったらどうしましょう。分類は、大大大分類/大大分類/大分類/中分類/小分類/詳細行の、6種類しかありません。

f:id:xoblos:20181016184902p:plain

上図のように、『区分』が「DATA」であっても、セルを結合させる方法があります。それぞれに分類名称がいれられていますが、これは「その分類を設定している項目と同水準にセルを結合する」という意味が込められています。ID と名称の関係は1:1なので、有効な設定になりますね。

仕組みをより理解し易いように、試しに「分類の逆転」も行ってみましょう。項目「拠点名」は「拠点ID」に紐付くものですが、これを下位のキーである「部門ID」と同水準にセルを結合させてみましょう。下図のような出力結果を、得られるようになります。

f:id:xoblos:20181016184907p:plain

Designer+Excel:セルの名前定義

セル番地とは?

制御シートのリファレンスマニュアル上、各キーワードの設定値に「セル参照」と示されているものがあります。これは、セル番地を指定することが出来るという意味です。

f:id:xoblos:20181004101351p:plain

セル番地とは、その考えを持つ Excel 上のセル一つ一つが固有に持つ位置情報を表します。例えば上図、選択されているセルは「B列の 1行目」です。別の表現として「2列目の 1行目」でもあります。このセルに対し、「B1」と表現するのを「A1 形式(表記)」、「(1,2)」と表現するのを「R1C1 形式(表記)」と呼びます。後者のカッコ内は、左の数字が行数(Row の R)、右の数字が列数(Column の C)を表しますのでご注意ください

f:id:xoblos:20181004101357p:plain

皆様が使っている Excel が普段、どういう編集画面であるかは決定付けられませんが、人に縁ってどちらの番地形式が取り扱い易い――は、分かれることでしょう。xoBlos でセル番地指定が求められるのは、制御シートと雛形シートの作成時に成りますが、特に「R1C1 形式」が有力になる場面は項目数が多く且つ連続している制御シートの作成です。また制御シートのメンテナンス面に於いても、上図どちらが編集画面であるかで、良し悪しが変わることでしょう。

セル番地 "名" って?

f:id:xoblos:20181004101402p:plain

セル番地は前節のとおりですが、セルの「名前」を設定/表現することができるのはご存知ですか?これは xoBlos ではなく、Excel の標準機能になります。上図青枠のように、『名前定義』を設定することで、設定したセルを "名前指定" で参照することができるようになります。或いは上図緑枠に任意の名前をいれて [Enter] キーを押下すれば、手っ取り早い名前定義になります。

f:id:xoblos:20181004101408p:plain

これまでの、「B1」「(1,2)」そして「目印」は全て共通の場所を表し、いずれも「セル参照」と成っている xoBlos のキーワードに設定することが可能です。

f:id:xoblos:20181004101413p:plain

"制御シートに於ける名前定義の強み" は、他の表記とは異なり、「周囲の行/列に増減が発生してもダイレクトに参照することが可能」という面です。つまり帳票レイアウトに変更要件が挙げられても、制御シートの修正が発生し難いということになります。また上図のように、共通の情報を取り扱うけれどもレイアウトが異なる単票の作成は、それこそ一枚の制御シートを用意するだけで済むケースがあります。

しかしブック内を名前定義塗れにするのも望ましくはありません。情報は少ないのにブックの容量が大きくなったり、使い回す際に参照が壊れた名前定義がゴミとして残り易かったり等、デメリットも多いものです。皆様が取り扱っているブックの中で、極端に容量が大きかったり、開くのに時間が掛かったりするものがあるならば‥‥一度、名前定義のメニューを確認してみてください。

Designer:CSV のヘッダに XML で使用できない文字がある

XML で使用できない文字

xoBlos でデータ抽出を行うと、XML ファイルができますね。このファイルから、1手順で CSV ファイルに変換することができます。

f:id:xoblos:20180928181507p:plain

対象手順の設定画面には、『b. 1行目にヘッダを出力しますか?』という機能が置かれています。デフォルトは「いいえ」ですが、その場合は XML にある項目名(上図青枠)がヘッダ行として出力されます。

では、"XML で使用できない文字(ご参考)が使われている内容" をヘッダ行に出したい場合には、どうしたら良いでしょうか。

f:id:xoblos:20180928174552p:plain

上図は、期待する CSV ファイルの内容です。前述の "使用できない文字" は、「6」「7」「8」のような全角英数字が該当しています。抽出の時点で躓いて仕舞いますね。

冒頭に挙げた『b. 1行目にヘッダを出力しますか?』の機能を振り返ってみましょう。これを「はい」に設定した場合には、XML 内にある最初の タグ――つまるところ一件目のデータの内容をヘッダ扱いにしてくれます。

f:id:xoblos:20180928174558p:plain

抽出の段階、入力データを見てみましょう。‥‥普段なら 2行目の実データ部分から抽出しますが、1行目に丁度、ヘッダ行にあて込みたい文言があります。『b. 1行目にヘッダを出力しますか?』を「はい」にすることで一件目のデータがヘッダになるのであれば、上図の 1行目も抽出してデータにしてしまえば良いのです

Excel:データの重複チェック

関数式で示そう

xoBlos の中間処理は慣れてきましたか?

さて、今回は処理対象と成ったデータから、重複データをチェックしてみましょう。手段は幾らかあるかもしれませんが、代表的なのを 2つ、以下に挙げます。

f:id:xoblos:20180912104757p:plain

上図左側は、存在チェック先である列全体を見て、同行のデータを比較対象にしています。見つかれば "重複" という文言を出すようにしています。別の手段として上図右側は、左図のように処理列を要さず、Excel の標準機能「条件付き書式設定」で重複を示そうとしています。自身の値と、同列全体を比較させていますね。

f:id:xoblos:20180912104802p:plain

各、生成結果です。重複データを速やかに判断することができますね。こちらが最終生成結果であるならば、見易い方の手段を選択して問題ありません。

しかし、後続処理が存在して且つ、その処理内容が「重複データのみ」或いは「重複データ以外」を取り扱うとなりますと、上図右側は実装手段としては相応しくありません。何故なら、xoBlos の抽出は セルの色情報を判断することができない為です。

corabo:セキュリティ例外設定

Windows 標準のアプリ/xobQuery の実行許可

前回記事で、「ServerSettingWindow.exe」の設定について記しましたが、ここ最近のバージョンでは「xoBlosLockService の実行設定」ではなく「セキュリティ例外設定」と表現しています。(実行/設定方法は従来と同じなのでご安心ください。)

f:id:xoblos:20180831173228p:plain

さて、今回はその中でも「外部アプリケーションの実行」手順を持った業務の、実行許可を行う部分に触れてみたいと思います。Windows 標準の機能である――コマンドプロンプト処理やスクリプト処理の作成に慣れている、或いは現行の運用で使用している方は、xoBlos の外部アプリの実行にも活用なさることがあるでしょう。しかし出来上がった業務ファイルを、Designer 単独で動かす分には何も問題ありませんが、corabo へ乗せるとなるとセキュリティ例外設定が必要になります。

f:id:xoblos:20180831173235p:plain

使用する外部アプリは、xoBlos の業務一式の(フォルダの)内側にあれば判断し易いのですが、Windows 標準のプログラムは決められた場所にあるので、注意が必要です。‥‥設定をし忘れる方が結構いらっしゃいます。特に、上図の『b.実行するファイル(必須)』項に慣れて「%ComSpec%」を手打ちされる方、或いは前項の『a.関連付けられたアプリケーションで実行しますか?』項を「はい」にし、アプリ本体ではなく処理ファイル(バッチファイルやスクリプトファイル)を指定される方‥‥

これにより、corabo 上で出るエラーメッセージに対し、「何をどう許容すれば良いのか?」となる可能性もあります。環境変数が設定されていたら、上図右方の「環境変数」一覧の「値」から、対象を特定しましょう。スクリプトの実行プログラムに関しても、対象はコマンドプロンプトと同じ階層に置かれている筈です。

また、「::\helper\xobQuery.exe」を設定し、『xobQuery』を実行している方は、xoBlosHome 下を許容設定してください。

C:\Windows\System32\cscript.exe  ‥‥ コンソール向け
C:\Windows\System32\wscript.exe  ‥‥ 対話向け
C:\xoBlos\bin\helper\XobQuery.exe ‥‥ xobQuery

Designer:取得データの分離文字が "全角スペース"

使えないなら使えるようにしてしまおう。

生成キーワード『取得データの分離』は、分離の基準となる文字を指定すれば、それを境目に区分けされたそれぞれの情報を取り扱える、便利なキーワードです。しかし残念なことに、この分離文字にスペース(全角)を指定することはできません

f:id:xoblos:20180816144124p:plain

スペースが区切り目である情報は、幾らでもあることでしょう。上図のように、住所より「建物」の部分は別の枠へ生成――等は大いに有り得ますね。そのような場合、『取得データの分離』は活躍できないのでしょうか。‥‥いえ、『取得データの分離』だけでは活躍に成らないのです。

f:id:xoblos:20180816144129p:plain

分離文字にスペースが扱えないのであれば、スペースを扱える文字に置換してしまえば良いのです。更に、実際のデータには入り得ない文字に置換するのが望ましいです。(上図例では「@(アットマーク)」に置換しています。)キーワード『文字列編集』は、『取得データの分離』よりも先に処理が行われます。

上図例の項目「住所」のように、処理としては扱うけれども、実際の帳票上には出力させないような項目は、キーワード『セット先セル』を空欄にします。そして、参照している基本入力データ(XML)に存在しなかった項目は、「#住所前半」「#住所後半」のように、最初に「#」を付けて任意の項目名を設定しておきます。これはプログラムの世界で言う、変数のようなものですね。