2016-01-31

テンプレートを利用した Excel ワークシートの作成

データの集約、集計の最終成果物として、タイトル、表頭・表側、表外の注記などを含む規定の様式に基づいた Excel ワークシートの作成が求められることがよくあります。

FME の Excel ライターには、書式も含めて既存のワークシート(テンプレート)を出力先の Excel ファイルにコピーし、それにデータを書き込むオプション機能があり、それをうまく利用すると、ソースデータの読込から規定の様式による Excel ワークシート作成までを全て自動化できる場合があります。

ここでは、平成22年国勢調査結果に基づき、テンプレートを使用して都道府県別の人口、世帯数の表を作成する例を掲げます。

FME 2015.1.3.2 build 15575

ソースデータ
e-Stat (政府統計の総合窓口) よりダウンロードした「平成22年国勢調査人口等基本集計 第2表 男女別人口及び世帯の種類(2区分)別世帯数」(CSV 形式 "002.csv")
※CSVテーブルの読込に関しては、「属性値の条件に基づくデータ抽出」をご参照ください。





















テンプレート例 1

全国集計行、及び都道府県別集計行(計48行)からなる単純な表です。





















FME ワークスペース例 1
















CSV リーダー: ソーステーブルの7行目を属性名とし、8行目以降の全ての行を読み込む。
Tester: 全国集計行、都道府県集計行 (地域識別コード = a) のみを抽出する。
AttributeRenamer: 出力する必要がある属性名を Excel の列名 (アルファベット) に変更する。
StringReplacer: 数値列のうち「-」を「0」に置き換える (「世帯数 不詳」列対応)。
Counter: 出力先の Excel 行番号 (5~) を格納する xlsx_row_id 属性を追加する。

テンプレートを使用するには、Excel ライターをワークスペースに追加した後で、以下のようにパラメーターを少し調整する必要があります (これらのうち一部は、リーダーの追加時に設定することもできます)。

(1) Template File パラメーター

Navigator ウィンドウにおいて、Excel ライターの Template File パラメーターに使用するテンプレートファイルを指定します。このパラメーターでテンプレートファイルを指定してワークスペースを実行すると、FME はそのファイルに含まれるワークシートを出力先の Excel ファイルにコピーしてからデータの出力を行います。













(2) フィーチャータイププロパティ: Format Parameters

テンプレートを使用する場合は、Excel ライターフィーチャータイププロパティ画面 Format Parameters タブで、次のような設定をします。
・Output Field Names: No (属性名は出力しない)
・Use Attribute Names As Column Positions: Yes (フィーチャー属性名を Excel 列名として使用する)
・Writer Mode: Update (更新モード)
・Row ID Attribute: xlsx_row_id (各フィーチャーの出力先行番号を格納した属性を指定)























(3) フィーチャータイププロパティ: User Attributes

User Attributes タブでは、出力する属性名 (Name = Excel 列名) とデータ型 (Type) のみを指定します。書式はテンプレートに設定済みの内容が使用されるので、セル幅 (Cell Width) や書式 (Formatting) を編集する必要はありません。
























出力先のフィーチャータイプ名 (Excel ワークシート名) をテンプレートワークシート名と同じ名前 (この例では「表-1」) にして実行すれば、コピーされたテンプレートにデータが出力されます。

結果 1: 各列の幅や書式はテンプレートに設定されたとおりになります。





















テンプレート例 2

都道府県名がテンプレートに記載されている (つまり、各都道府県の出力先の行がテンプレートで規定されている) とともに、地方区分別の小計行や全国集計行のセルに Excel の数式があらかじめ入力されているケースです。




















FME ワークスペース例 2



















CSV リーダーから StringReplacer までは例1と同じです。ただし、今回の例では「地域コード」を出力する必要がないので、その属性名の変更は省きました。「都道府県名」もテンプレートに記載済みなので属性名の変更は必須ではありませんが、CSVリーダーが設定したデフォルトの属性名 (col6) では分かり難いので「都道府県名」に変更しました。

例1の場合は、テンプレートの5行目から連続して48行を出力するだけなので、出力先行番号を5から始まる連番として Counter によって定義することができましたが、例2では、途中に地方区分ごとの小計行がはさまっているため、出力先の行番号を連番で定義することができません。この例ではテンプレートにあらかじめ都道府県名が記入されているので、次のようにテンプレートそのものから各都道府県に対応する行番号を取得することができます。

まず、テンプレートから「都道府県名」列を読み込むための Excel リーダーをワークスペースに追加し、リーダーフィーチャータイプのフォーマット属性 (Format Attributes) タブで xlsx_row_id (行番号) を公開 (Expose) しておきます。次に、FeatureMerger によって、CSV から読み込んだフィーチャーとテンプレートから読み込んだフィーチャーを「都道府県名」をキーとして結合します。
これによって、各都道府県のデータと、テンプレート (出力先ワークシート) の xlsx_row_id (行番号) を関連づけることができました。

Excel ライター、フィーチャータイプ設定の要領は例1と同じです。

結果 2




















Excel ライターのテンプレートオプションは、上記例のようにテンプレートと出力テーブルが 1:1 で対応する場合のほか、ひとつのテンプレートに基づいて同じ様式の複数のテーブル (ワークシート) を作成する場合にも応用できます。様式が規定されている Excel ワークシートを作成する場合は、テンプレートの活用をご検討ください。

0 件のコメント:

コメントを投稿