Designer:『シート分割』の注意事項まとめ

当然シートの仕様が問われる

前回記事で、シート分割の設定例を挙げました。便利な機能ですが、Excel のシートを操作する以上 xoBlos 側だけでなく、Excel 側の仕様も意識しなければなりません。

xoBlos 側‥‥①入力データ(.xml)内のシート分割項目は、最優先でソートされていなければならない。
       ②セクション『追加入力』を持つ制御シートでは使用できない。

Excel  側‥‥③シート名に相当する項目の文字数が 30 文字を超えるとそれ以降は切られる。
        (エラーにならない上、切られた結果が同名であった場合は、無関係データが纏められたり一方しか生成されなかったり等が起こる。)
       ④シート名に相当する項目に、シート名に使えない値("?" "/" 等)が来るとブック破損する。
       ⑤生成キーワード『(高度)選択/スキップ条件』は、キーワードの処理順序上、『シート分割』より後に動作する

特に⑤は問われ易いですよね。xoBlos の基本構成が、"抽出時は問答無用で全件抽出"、"生成時に初めて対象データを絞る"――を推奨していますので、シート分割要件が関わってくると、「あれ?どうして全データ出力されたのであろう。」となります。シート分割要件がある場合は、抽出時にキーワード『(高度な)スキップする行の条件』で絞っておくか、中間処理にて対象データを限らせなければなりません。何せ、抽出は行方向に並んでいる情報しか条件付け出来ませんから‥‥

Designer:複数の CSV を一括抽出

繰り返しの設定は必須

抽出元が複数の Excel である場合は、ワイルドカード「*」の曖昧指定と「%BOOK%」「%SHEET%」の活用ですんなり対応出来ました。では、複数の CSV はどうでしょうか。

f:id:xoblos:20190913161631p:plain

手順種『変換(CSV→抽出)』は、『a.入力ファイル名(必須)』項にワイルドカード「*」が使えません。間接的な理由になりますが、「b.出力ファイル名(必須)」項に「%BOOK%」「%SHEET%」が使えない為――。そもそも CSV ファイルにブックやシートという考えが無い為ですね。

では前回記事のように、手順種を『Excelから抽出』にすれば対応可能なのでは?と挙がるでしょうが、半分正解です。但し、以下の制約は全てクリア出来るでしょうか。

零始まりの数値‥‥「0001」「01」などが「1」で抽出されて仕舞い、『前ゼロ付加桁数』や『取得データの前ゼロ付加』では補正し切れない。
桁数の多い数値‥‥指数に成って仕舞う。
         例:「12345678901234」が「1.23457E+13」に。
日付形式な文字‥‥日付に成って仕舞う。
         例:「01-01」は「(現在は)2019/1/1」で表示は「1月1日」、「50-01」は「1950/1/1」で表示は「Jan-50」に。
etc...

上記から一つでも該当するならば、繰り返し処理で各 CSVXML 変換を行いましょう。繰り返しということは、繰り返しの基準ファイルを作成する必要があります。

f:id:xoblos:20190913161637p:plain

上図のような抽出の制御シートを用意し、無論手順種『Excelから抽出』を使って全 CSV を対象とします。その際抽出する項目は、データ内にある項目は一切不要。必要なのは CSV のファイル名だけであることがポイントです。次に、変換された XML一つにマージします。‥‥ここまで出来れば後は簡単ですね。マージした XML を繰り返し基準ファイルとして、手順種『変換(CSV→抽出)』に繰り返し設定を行ってみましょう。対象の CSV がどう増減しても、何の修正も要らずに xoBlos は処理対応し続けてくれます!

Designer:制御シートの書き換え設定の注意点

一括制御シート要件の書き換え対象は?

f:id:xoblos:20190902165052p:plain

『制御シートの書き換え設定』は、その通り(処理中に一時的に)制御シートを書き換える機能ですが、対象の制御シートは業務ファイル(.xob/.xbt)の『1.制御シート指定』節、『b.制御シート名(必須)』項で指定されたシートのみになります。したがって、たとえブック内に別の制御シートが複数あったとしても、纏めて書き換えてくれる訳ではありません。‥‥一括制御シートは特に注意が必要です。

f:id:xoblos:20190902165100p:plain

一括制御シートは――つまりは個別制御シートを複数実行させる、業務シナリオ表です。しかし "制御シート" に変わりはなく、無論実行の際には一括制御シートの方を設定することになりますので、各個別制御シートの書き換えは行えません。手順を個別制御シート分用意するか、マスタ化して繰り返し処理化する等、工夫が必要です。

Designer:シート名に全角スペースは要注意!

シングルクォーテーションが判断出来ない

生成時、高速エンジンを使用すると結果のブックが破損することがあります。前回記事でも示しましたが、これは大抵のケースで高速エンジンの未使用にて解決します。高速エンジンの未使用は "Excel ならではで動かす" 為、処理は遅くなりますが、高速エンジンよりかは Excel 機能の大部分に対応が行えるという訳です。

f:id:xoblos:20190805163405p:plain

さて上図①ですが、2行の表内で別シートのセルと――更に別のシートのセルをそれぞれ参照しています。列「B」に書かれているのは列「A」が持つ式の内容です。‥‥生成高速エンジンではこの内、明細 1行目に表現されているようなシングルクォーテーションで囲まれる全角の空白(スペース)を含むシート名を解釈することが出来ませんExcel の仕様上、何処までがシート名を示しているのか区別する為に、シングルクォーテーションで囲むことになっているのです。

上図②は、シート「空白 シート」自身が持っている情報です。印刷範囲を設定すると、名前定義には自動でその情報が入ります。しかし下部の「参照範囲」は前述と同様シングルクォーテーションが含まれており、同じ問題が挙げられます。

"高速エンジンの未使用" 以外の対処法としましては(シート名にスペースが無いよう運用化して頂きたいのが本音ですが‥‥)、全角スペースから半角スペースを 2つに変更するか、或いは前回記事のように通常式から INDIRECT 式に記述を変えることです。「=INDIRECT("'空白 シート'!A1")」のように、シート名部分はただの文字列と見做されますので、破損することなく高速生成が成立するでしょう。

Designer:スキップする "行の" 条件だもの

xoBlos の世界での "行" とは?

xoBlos で取り扱うデータは、無論少なければ少ない程、処理は軽くなります。業務の作りに縁っては―― 1件と 100件の差では、速度の違いが実感出来ないかもしれません。

f:id:xoblos:20190723130058p:plain

上図は‥‥穏やかではありませんが、基本的なクロス表です。無論、セル「B3」を『データ部分の左上』にし、『行方向単位行数』と『列方向単位列数』いずれも「1」にして、各戦士(?)間の実績を抽出するのが相応ですね。これで、ケンカの詳細が無い(Null の)データと、ブチミケを抽出対象外とする場合、『スキップする行の条件』か『高度なスキップする行の条件』を設定しますが‥‥

f:id:xoblos:20190723130107p:plain

抽出キーワードを充分ご確認ください。『(高度な)スキップするの条件』です。たとえこのキーワードの仕様が分からなくても、行方向に読み取ろうとしている部分にしか効かないキーワードであるのは明らかです。つまり、ここでの抽出は「ブチ(が出した実績データ)のスキップ」しか、こなせないということです。

冒頭のとおり、事と次第ではパフォーマンス面が問われてきますが xoBlos は基本、抽出は全件+加工や最終生成時点で条件付けを、基本としています。

なお『高度なスキップする行の条件』は、前回記事のような恐ろしい罠が控えておりますので、ご注意を!

Windows:Windows Server 2012 などに .NET Framework 3.5 をインストールできないとき

Windows Server 2012 .NET Framework 3.5 をインストールできない。

xoBlos サーバー構築のための必須システム要件に、Microsoft .NET Framework 3.5 がありますが、Windows Server 2012 の環境に、.NET Framework 3.5 をインストールできずに手こずったことがあり、そのときの対処方法をメモします。

現象とエラーメッセージ

現象が起こったのは、インターネット接続がされていない Windows Server 2012 Datacenter の環境でした。

サーバーマネージャーから「機能」の追加で失敗。代替ソースパスでOSの評価版ソースの指定、製品版ソースの指定でも失敗。DISM コマンドでインストールしても失敗。

エラーメッセージは必ず「ソースファイルが見つかりませんでした。」が出ます。

グループポリシーを調整しても同様のエラー。

 

こんな場合の手がかりは、イベントビューア>Windows ログ>Setup に出ていました。

パッケージ microsoft .net framework 3.0 を有効にできませんでした。状態:0x800f0906

 対処方法

解決方法の手がかりは、下記のマイクロソフトサポート記事にありました。

Windows Server 2012 R2、Windows Server 2012Windows 8.1、または Windows 8 上でセキュリティ更新プログラム 2966827 または 2966828 をインストールした後で Microsoft .NET Framework 3.5 の機能を有効化できない

https://support.microsoft.com/ja-jp/help/3002547/you-cannot-enable-the-microsoft-net-framework-3-5-feature-on-windows-s

 

原因と対策をかいつまんで記述すると、以下になります。

 

原因

対策

  • この場合、更新プログラム 3005628 をインストールする。

Designer+Excel:「INDIRECT」関数の活用

見た目は複雑でも強い味方

生成の雛形シート上に Excel の関数をいれておくと、値の操作が楽になる場合があります。しかし時として「雛形シート」や「行/列ひな形」「エリアひな形」のような処理後に消えて仕舞う領域上を参照しなければ成らない式も、設定する機会があることでしょう。

f:id:xoblos:20190704134919p:plain

上図は列「A」と列「B」それぞれに、共通でセル「E3」を見る関数が置かれています。列「A」の方はセル番地をシステム値として見ていますが、列「B」の方はセル名で見ています。

INDIRECT 関数はセル番地を文字列で表現出来、その場所が物理的に存在すれば、周囲から行列の増減がどう起きようが、自身の行列が削除されようが、参照を保持します。

f:id:xoblos:20190704134926p:plain

‥‥しかしシステム値が文字列に成って仕舞いますと、オートフィルが使えませんね。少々手を加えます。

f:id:xoblos:20190704134933p:plain

上図の赤字の意味は、「自分自身のセルの行番号と、自分自身のセル位置から 3つ右の列番号の交点であるセル番地を物理的に参照する」という内容になります。‥‥複雑化しましたが、オートフィルの為だけとすると効果が薄いですね。

f:id:xoblos:20190704134940p:plain

xoBlos の雛形の如く、列「E」を削除してみましょう。‥‥列「A」のような、使い慣れているに等しい式の方は壊れて仕舞いました。しかし列「B」の方は参照を保持し、新たに列「E」に入った情報の表現を成立させています。

例えばシートとシート間で跨いで参照している関数を持つ既存資料や、常に出力するデータの直前データを比較参照するような生成要件等に、xoBlos の生成が関わる場合には、このような物理的参照を成す関数が必要になってくる場合があります。相対参照に強い関数(今回例の「ADDRESS」や「OFFSET」等)と組み合わせて、関数の破損(REFエラー)を回避しましょう!

通常関数から INDIRECT 関数の書き換えは、難しいものではありません。結局のところセル番地が REF エラーとなるので、その部分を文字列でカバーして仕舞えば良いのです。

例)
・「=A10」     → 「=INDIRECT("A10")」
・「=SUM(A1:A10)」 → 「=SUM(INDIRECT("A1:A10"))」
・「=IF(雛形シート!A1=出力結果シート!A1,"OK","NG")
         → 「=IF(INDIRECT("雛形シート!A1")=INDIRECT("出力結果シート!A1"),"OK","NG")」