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レコードで複数行になるものも問題なく高速動作になります。(意外に知られていませんが)

 

corabo:関連サービス

環境面のエラーはサービスの状況を確認!

corabo は、専用の情報をデータベース(SQL Server)で管理し、.Net Framework の領域内で動作し、IIS で視覚的操作を可能にしています。‥‥と、言うことは xoBlos ならではでなくとも、関係してくるバックグラウンドサービスが、幾つかあるということですね。

f:id:xoblos:20180614113324p:plain

上図は一例ですが、サービスの一覧はコントロールパネルの「管理」から参照可能です。corabo 実行中に環境水準なエラーメッセージが出る、或いは corabo の画面すら起動しない、等があれば‥‥先ずサービスの稼働具合を確認しましょう。無論メンテナンスする際にも、確認範囲は同じです。

上図例に限らず、以下のようなサービスが、corabo に関係しています。

ASP.NET State Service(ASP.NET 状態サービス)
・SQL Server (インスタンス名)
 →インスタンス名部分は例えば SQLEXPRESS です。
・World Wide Web Publishing Service(その物+以下関連)
 ├ Windows Process Activation Service
 ├ Remote Procedure Call (RPC)
 ├ DCOM Server Process Launcher
 └ RPC Endpoint Mapper
・xoBlosLockService(上図例)

xoBlos Server Host

f:id:xoblos:20180614113823p:plain

こちらも、corabo に於いて必要な稼動物であり‥‥「サービス中」とありますが、前節までの「サービス」とは全く別物です。ご注意ください。

Designer:CSV ファイルの Excel 抽出時の注意点

CSV の正式な確認方法

xoBlos の業務で、入力データとして登場するファイル形式の一つ、CSV。Office を入れられている方からすれば、「Excel の一種!」というご意見が挙げられることもあるでしょう。

しかし Excel と思われてしまうのは、『アプリケーションの関連付けが Office(Excel)にされている』、或いは『CSV ファイルを開くのに Office(Excel)が推奨されている』等の面に縁るのです。

f:id:xoblos:20180605134734p:plain

CSV は上図、上部のようにメモ帳やテキストエディタで、開くこと/開いた見た目 = 正式/正確です。確認するだけでなく、編集するなら尚更です。Excel で開くと上図、下部の「No」のように Excel ならではの表現に書き換えられてしまうものもあるので、確かな情報が得られませんし‥‥このまま編集すると、誤った情報で更新しかねません。これは、xoBlos を通しても同じことが言えます。

CSV に対する制御シートでの抽出

xoBlos では、CSVExcel として見て抽出することができます。前節のような注意点はありますが、「CSV のヘッダ行に、XML に使用できない項目名がある!(前回記事」や、「形式は CSV であるけれど、レコードによって列の量が変動する!(前回記事」等の場合に、制御シートを用いる抽出方法が活躍します。

Excelから抽出』の手順が使えるということは、『高速抽出エンジン』が使用できる?‥‥とも思われるかもしれませんが、CSV に対しての高速エンジンの使用は推奨しません。以下の仕様を、理解しておきましょう。

CSVExcel として取り扱う上で、一回の処理に 3回ファイルは開かれている。

「C:\Users\ユーザ名\AppData\Local\Temp」に出来上がる一時ファイルは、
上記のとおり「3つ」出来上がる。
→文字コードの認識や、同容量の Excel を一時的に作り上げる分等によるもの。
⇒高速エンジン使用すると、一時ファイルは消えない為、
 C ドライブの容量が増えていく

Designer:Excel の親切機能に笑顔で対応する

親切が "仇" に。

f:id:xoblos:20180522114632p:plain

上図は一見して、特に難しくはない抽出用の制御シートですが、作成途中です。出力項目である「売上」は、セル「AUG2」を対象にしたく‥‥更に隣のセル「AUH2」からは、「bve」という項目名として抽出を行おうとしています。

しかし作成者は、頭を抱え込んでいます。一体どうしたのでしょうか。‥‥列が「AUG」という、果てしない範囲に困惑しているのでしょうか?いいえ、実際に 3000列程の項目を取り扱ったお客様も前例としてあります。

f:id:xoblos:20180522114717p:plain

作成者は、セル「AUG2」と値「bve」をひたすら入力しています。ところが上図の状態が繰り返されるだけで、いつまで経っても完成しません。

AUG2」という入力に対し、Excel は「August の 2(8月2日)」と解釈し、親切に日付書式に変えてくれます。

一方「bve」に対しては、Excel は「キー[b]とキー[v]は隣同士であるから、ユーザはタイプミスしたのかな?そうすると英単語の『be』と入力したかったのかな?」と解釈し、これまた親切に正しい文字列に変えてくれます。

f:id:xoblos:20180522114724p:plain

AUG2」を A1 表現しなければ良いのでは?という方。「(2,1229)」では、新たな問題に直面することでしょう。その為、セルの書式を予め文字列にしてから再入力することで、本件は解消します。‥‥「bve」は上図のように、入力文字の自動修正(オートコレクト)機能の設定に及びます。変更、削除等は皆様次第です‥‥

Excel に限らず、Word や PowerPoint 等といった Office 製品が、大抵デフォルトで設定されている事項です。「bve」等を実値として扱われる方は、この仕組みを不親切と捉えられるかもしれませんね。

Designer:要件の汲み取り方

期待する出力結果から判断する。

xoBlos で開発を行う際、要件が専門的で何を行えば良いか困惑することがあります。要件を提示する側とて、表現が困難な場合もあります。そのような時は一つの手段として、先ず期待する出力結果(帳票)から要件を汲み取ることをお勧めします。入力データにしろ出力データにしろ、「開発側の観点」「要件を提示する側の観点」は必ず分かれるものですが、お互いの認識一致への近道には、成り得る筈です。

f:id:xoblos:20180518145018p:plain

例えば上図 2つの入力データ――「主データを基に副データに対する直積情報を出力して欲しい」と挙げられた際に、困惑するパターンはどういうものがあるでしょうか。「直積は分かるけれど、xoBlos でどう組めば良いのだろう‥‥」「直積って何!?」等が挙げられるのではないでしょうか。

前述の 2パターンは、有識者に事前確認しても何ら差し障りは無いかもしれませんが‥‥。期待する出力結果があって xoBlos の機能も理解していれば、たとえ「直積」を知らずとも、たとえ要件に「直積」が挙げられていなかったとしても、開発に取り掛かることができるのです。

f:id:xoblos:20180518151223p:plain

複数の入力データがあり、一方が「基」となるデータであるとすると、大抵もう一方は『追加入力』或いは『変換入力』の活用を思い付く方もいらっしゃることでしょう。しかし 2つの入力ファイルは、お互いにマッチさせる要素(キー値)が何もありません

出力結果から、それぞれのデータがどういう状況(出力単位)であるのか注意深く見ていくと‥‥。主データの 1 情報は副データの全件分、"繰り返し" と "固定" で情報を紐付けています。いずれも、xoBlos に存在する機能やキーワードになりますね。

f:id:xoblos:20180518151822p:plain

繰り返すとは言え、一度生成した結果シートに連結して、次のデータを生成することはできません。ここではそれぞれの結果をシート分けすることにします。(このような手段もありますが‥‥)

ここまで来れば後は簡単ですね。中間データとして生成したブックに対し、全シートを抽出しましょう。中間処理にはもう慣れましたか?複数シート抽出の注意点も、復習しておきましょう!

Designer:生成時の「Sheet1」

参照されることが多い記事だったので、次の記事にタイトルを変えて再掲しました。 Designer:既存ブック、シートに生成する https://xoblos.hatenablog.jp/entry/2020/09/20/182747


「Sheet1」って?

f:id:xoblos:20180427162052p:plain

上図は、単純な新規生成処理で取り扱われるシート達です。制御シートの設定内容と、雛形シートの最低限のレイアウトを基に、結果シートが作成されます。通常、新規生成要件の場合はこの三つのシートの内、「制御シート」と「雛形シート」を同一のブックに用意します。そして「結果シート」は、業務ファイル(.xob)の『出力設定』に新しいブックのシートとして設定しますね。

f:id:xoblos:20180427162059p:plain

xoBlos に新しいブックを作成させるのは、上図のように普段、私達が手動で空白のブックを新規作成するのと同じことになります。Excel の設定によって変わりますが、新規作成時には必ず「Sheet~」のシートがいくつか用意されます。Excel の仕様上、シートが一枚も存在しないブックという形態は、作ることができないのです。その為 xoBlos では、結果シートに最低一枚の「Sheet1」が作成される仕様になっています。

既存ブック生成という手段

f:id:xoblos:20180427162107p:plain

新規ブック生成と既存ブック生成は、上図のように設定が変わってきます。後者は、生成キーワード『区分』に分類見出しで設定した入力項目の値と、ブック上の値をマッチングさせる時に使いますね。

さて、よく考えてみましょう。既存のブックは帳票や資料、つまり元々は私達が手動で作成したものであり、空の「Sheet1」等も無く、必要なシートしか存在しないことが殆ど。‥‥ということは、新規ブック生成の際にも、必要最低限のシートしか持たない既存ブックに対し、既存ブック生成の設定方法で生成させれば、「Sheet1」が残る問題は解消されることになるのです!

業務ファイル(.xob)の在り方
手順1:予め雛形シートしか無いブックを用意し、出力先へコピーしておく手順2:既存ブック生成の方法で、コピーしたブックを雛形として生成を行う

なお、「雛形シートと既存ブックのシートが同じ名前で、業務ファイルの『c.ひな形シート名』項に設定したら、どちらのブックが優先されるの?」という疑問にお答えしますと、前者の雛形シート(制御シートも持ったブック)の方が優先されます。