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

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

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

f:id:xoblos:20180816144124p:plain

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

f:id:xoblos:20180816144129p:plain

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

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

corabo:セキュリティ例外設定の設定ファイル

設定内容を持ったファイル

前回記事で、サーバのコンピュータ名を変更した際の留意点として、「ServerSettingWindow.exe」(セキュリティ例外設定)に触れましたが‥‥。この設定が余りに多い場合の、楽な修正方法は無いものでしょうか。

設定を行うプログラムは「ServerSettingWindow.exe」ですが、設定内容そのものは、実は同階層の「xoblossettings.json」が持っています。これはメモ帳等で開き、無論編集することも可能です。

f:id:xoblos:20180808150413p:plain

テキストの内容は‥‥専門的で、余り触れたくない部分ですね。しかしところどころ見ると、実際設定した内容を確り持っていることが確認できます。そして間違いなくコンピュータ名(上図緑枠)も持っていて‥‥。メモ帳の機能である『文字列置換』を使えば、一括で修正が行えますね。環境移行時には、この json ファイルもコピー対象の一つとして、覚えておきましょう!

※コンピュータ名が、コンピュータ名以外で使われていないことを確認の上、一括置換するようにしましょう‥‥。誤った編集を行うと、「ServerSettingWindow.exe」も起動しなくなるかもしれませんので、バックアップをお忘れなく!

Designer:シート名に取り扱える "カッコ"

シート名の制限

Excel のシート名は、フォルダやファイルの名前と同様、様々な制限があります。生成キーワード『シート分割』や、業務ファイル(.xob)内の変数は、シート名を決定することもありますので注意が必要ですね。

使用不可記号 ‥‥ コロン(:)、円記号(\)、スラッシュ(/)、疑問符(?)、アスタリスク(*)、左角カッコ([)、右角カッコ(])
最大表示字数 ‥‥ 31文字

上記の内――「カッコ」ですが、角カッコ以外にも幾らか種類があります。

Excel を単独で扱う分には難なく入力できる値ですが、実は xoBlos の生成高速エンジンの使用によって、それぞれの「カッコ」の制限が変わります。xoBlos で高速生成する際には充分ご注意ください。処理が正常に終了したとしても、ブック破損により、ブックが開けない/修復が発生する場合があります

f:id:xoblos:20180730134532p:plain

Designer:『取得データの組合せ』の落とし穴

項目の記述順が問われる!?

「制御シートのデザイン、記述順は余り問われない。」‥‥序盤はそのように教わる、捉えられるかもしれません。しかしキーワードの処理順序や仕様、よっては項目の記述順が問われてくる場合もあります。

取得データの組み合わせを設定した項目は、参照先項目より左側に置いてはいけないとかでしょう♪」‥‥いいえ?左右正しく置いても、落とし穴があるのです。

f:id:xoblos:20180713162528p:plain

それでは上図、一見何の変哲も無い生成制御シートを題材にしてみましょう。特別なことと言えば、キーワード『取得データの組合せ』だけで、「年」/「月」/処理年と処理月と固定文言を組み合わせた文字列を 1項目――計 3項目を生成するものですね。

f:id:xoblos:20180713162534p:plain

さて‥‥実行してみましたが、残念な結果に成って仕舞いました。何故、「%」で変数を示しているのにも拘らず、文字列と見做されて仕舞ったのでしょうか。

仕組みのお話になりますが――『取得データの組合せ』は、設定内容を基準として見て置き換えているのではありません。①先ず、キーワード『入力項目名』に設定した項目を、左から順に見ていきます。②次に、項目を見る都度、項目名を「%」で囲みます。③続いてその上で、『取得データの組合せ』の設定内容に照らし合わせます。④設定内容に「%項目名%」を見つけ次第、その項目が保持している値に置き換えます。‥‥もうお分かりですね。制御シート上の設定値「%処理年%%処理月%月度」は、項目「年」を真っ先に見つけたことで、「%処理年%年%処理月%月度」と判断されたのです。

この問題を解消する方法は簡単です。項目「年」を、項目「処理月」より右側に書き直しましょう!

Designer+xobQuery:様々な "今日日付" の取得方法

有効性と有用性の境目。

f:id:xoblos:20180704145737p:plain

入力データから、"今日(システム)日付" を得る手段は、数あります。それこそ――たとえ何処にも明示されていなくとも、xoBlos の内部処理や Excel の関数等で得ることができますので、業務実行時の日付/日時を記録として残したい場合は深く考えず、安心して設計を行ってください。

しかしいずれの手段も、得失が必ず存在します。いくら汎用性を重視しても、慣れていない操作が発生すればそれは手間であると抱かれるでしょう。

ブック名/シート名から得る(冒頭画像①/③)

f:id:xoblos:20180704145747p:plain

こちらは、xoBlos の予約変数です。ブック名とシート名に間違いが無ければ‥‥情報としては確かなものですが、現実的ではありませんね。更に得た内容は日付書式ではないので、抽出キーワード『日時指定』で書式変更はできません。更に生成キーワード『日時指定』では「Custom」が使えないので、生成時点でも書式変更ができません。つまり、書式変更する場合には中間処理を設けなければならないのです。

"日時関連の" 予約変数から得る

前節の方法から出た問題を楽に解決させるには、抽出キーワード『対象セル』に対し、「%Today」或いは「%Now(書式パターン)」を設定することです。抽出制御シートのリファレンスにも注記がありますので、ご確認ください!

Excel 上から得る(冒頭画像②)

f:id:xoblos:20180704145753p:plain

入力データ上に "今日日付" があれば、それも纏めて抽出しておくと楽ですね。これならば抽出キーワード『日時指定』は使えます。しかし資料上に、システム情報がデータレベルで並んでいることは、かなり珍しいでしょう。Excel の関数(冒頭画像例示の「TODAY()」のように)であれば、日付値の保証はありますが‥‥Excel の自動計算が「手動」になっていたり、関数でなく固定値であったりすると、不確かな情報を得る心配があります。

実行者に入力して貰う

f:id:xoblos:20180704145758p:plain

こちらは『業務変数』を定義し、我々が "今日日付" を伝える手段です。業務の実行者が入力を間違えさえしなければ‥‥という問われがあります。しかし前日中に作業が完了せず、どうあっても "今日日付" として処理したくない――等の場合に、日付操作できる面はありますね。

corabo から実行する業務であるならば、変数名を入力する欄のプルダウンから「システム日付を取得する予約変数」を選択することもできます。自動で取得されるので、入力する必要はありませんね。これは将来、Designer 単独でも扱えるようになるかもしれません!

f:id:xoblos:20180704145804p:plain

後は業務ファイル(.xob)の『制御シートの書き換え設定』で実現可能です。抽出キーワード『対象セル』に固定値を指定する場合は、値の先頭に「#」を忘れずに付けましょう。‥‥しかし "書き換え" を行うので、万一制御シートの修正が発生した場合には、書き換え先が変動しないよう注意が必要です。なお『制御シートの書き換え設定』は、「%BOOK%」や「%SHEET%」をあて込むことができません

XML を編集する手順を使う

f:id:xoblos:20180704145810p:plain

こちらは業務ファイル(.xob)内、手順種『抽出データ編集』にて実現可能です。XML to XML なので、中間処理のように 2手順(抽出⇔生成のワンセット)ではなく、1手順節約することができます。抽出キーワード『日時指定』のような加工も可能です。‥‥ただご覧のとおり、制御シートとは別で編集定義用の XML を 1から作成しなければなりません。制御シート以上に、専門性/見易さ/修正のし易さを問う方が多いのではないでしょうか。

xobQuery を使う

f:id:xoblos:20180704145816p:plain

SQLxobQuery)に慣れている方は、一目散にこの手段を選択されることでしょう。しかし上図のように XML の項目に、明示的に項目名を設定しないと大文字は小文字になるので、生成キーワード『入力項目名』の設定時には注意が必要です。前回記事のような手段もあります。また日付書式も、上図クエリの時点で整える必要がありますね。

さて、どの手段が全面的に最良であるか‥‥皆様の中で整いましたでしょうか――。

Designer:値のソート(並べ替え)

xoBlos が取り扱う書式。

xoBlos では、抽出~生成時点で関わる "値" は基本「文字列」として扱います。たとえ抽出元の内容が通貨であろうが指数であろうが、文字列として扱います。勿論キーワード『日時指定』等は、「この値は先ず日付/時間として見れるものであろうか‥‥」と xoBlos は確認してくれます。

「数値の世界」と「文字の世界」の差

f:id:xoblos:20180628163954p:plain

xoBlos が基本「文字列」として扱っているのを、生成キーワード『並べ替え』を例に、明かしてみましょう。上図は、基本入力ファイルです。数値データが一つだけあり‥‥これを、「昇順に並べ替えて!」というような要件が挙げられた場合の対応例を、以下に示します。

f:id:xoblos:20180628164000p:plain

‥‥「並べ替えて!」という要件を単純に受け、キーワード『並べ替え』に設定しましたが、昇順になりませんでしたね。この結果は、各値を "文字列" として扱い、並べ替えていることによるものです。

文字列であるからとは言え、何故桁数順――期待するように並ばないのでしょうか。‥‥数値でないものを思い浮かべてみてください。

「あ」「あい」「あいす」「い」「いす」「ね」「ねこ」「ねこやなぎ」
→「あ」「い」「ね」「あい」「いす」「ねこ」「あいす」「ねこやなぎ」

‥‥このようにソートされても、困りますよね。

f:id:xoblos:20180628164007p:plain

先程との差は、キーワード『並べ替え』の設定値を「1, n」としたことです。「n」は数値比較を表しています。文字列として扱われる仕様から、一時的に "数値" として扱うのを、xoBlos に伝えていることになります。

★キーワードは『並べ替え』です。『並替え』ではないのでご注意ください。

今回は生成制御シートでのソート方法でしたが、業務ファイル(.xob)内でのソート方法は前回記事をご参照ください。

Designer:Excel表生成処理を更に高速に(キーワード『順序処理』)

[高速生成エンジンを使いますか?]「はい」に設定することにより、
Excel表生成手順の処理速度が、Microsoft Excel で開いて処理するより30倍以上
高速になること。皆様、実感を持ってご存知かと思います。

高速生成エンジンを使っても、まだ遅いと思われる処理に関しましては、
生成用制御シートのキーワードである、[順序処理] キーワードの使用もご検討ください。

f:id:xoblos:20180617123046p:plain


[順序処理] キーワードは、縦に行を生成していく多くのケースに適用できますので、
使用できない場合の制約事項(後述記載)を参考にして使用してみてください。100倍以上の高速化の効果が出ることもあります。

最近のユーザーサポート事例では、分類項目が「大分類」、「中分類」、「詳細行」
の3階層で約12万行ある入力データから、分類のセル結合処理を施したレポートを作成する処理が10秒で完了しました。[順序処理] キーワードを入れないと40分以上はかかっていた処理です。

[順序処理] キーワードが使える場合と使えない場合(xoBlos 開発エンジニアより)

順序処理=yesは技術講習会でも必ず取り上げる高速化手法です。

区分がDataシート固定だけのImportは極めて高速になるのはご存じと思います。これはImporterが全く別のモードで動作するからです。
順序処理=yesはたとえ分類系があっても、Dataだけと同じモードで動作していいよとxoBlosに送るヒントです。

順序処理=yesが意味を成すのは以下の条件のときです。

  1. 追加入力セクションがない。
  2. 見出し系(「大見出し」、「見出し」などの見出し項目)がない。
  3. スキップ行の指定がない。
  4. 塗りつぶし、加減算、表示形式使用、日時指定、通貨指定、空データの上書き禁止がない。(あっても、実質指定されてなければOK)
  5. 条件塗りつぶしがない。
  6. 帳票印刷指定がない。
  7. 値確定セルがない。

以上の条件を満たさないと、たとえ順序処理=yesと指定しても、高速動作にはなりません。 (ヒントである所以です)

ただし、入力のXMLの順序で、分類系のキーが正しくまとまっている必要があります。(内部の並べ替えでもOKです)

キーでまとまっていれば、必ずしもソートされている必要はありません。
分類系のキーが正しくまとまってなくても、実行はされますし、エラーにはなりません。(可能な限りのセル結合は行います)

高度選択条件やシート分割も使えます。変換入力も使えます。

但し、分類系のプリセット(値を事前に設定しておく)は使えません。
順序処理=yesでは、分類系を指定できるので、当然セル結合も可能です。


順序処理=yesではないですが、区分がDataだけのときの高速処理は、1レコードで複数行になるものも問題なく高速動作になります。(意外に知られていませんが)