XML→Excel抽出(階層表示)プログラム(Python)
XMLファイルをExcelデータに抽出するPythonスクリプトです。階層表示させることによる見通しの良さと、大量のファイルを一括処理させることを目的として作成しました。プログラムファイルは下方のダウンロードボタンより取得できます。またサンプルとして「地質・土質調査成果電子納品要領・同解説 国土交通省」の記載例から起こしたXMLファイルとその出力Excelデータを同梱しております。
1.本プログラムの特徴
- ネストされたタグをExcelに階層表示させる。
- 任意のタグでグルーピングし、横並びに表示させる。
- XMLファイルを個々に選択するのではなくフォルダを選択する方法とし、フォルダ内のXMLファイルを一括処理させる。
なお、本プログラムは、XMLファイルから抽出できる情報はタグとテキストのみであり、属性等の抽出には対応しておりません。実装は可能ですので今後必要を生じたら追加したいと思います。
2.とりあえず使ってみる
- プログラムで使用するファイルは「GD土質データ抽出.pyw」のみです。通常の使用においてはエクスプローラーからダブルクリックして起動させます。
- 起動させると、注意事項の表示を経てフォルダ選択画面が出てきますので、XMLファイルが格納されているフォルダを選択してください。選択したフォルダ内にあるすべてのXMLファイルをExcelデータに抽出します。
- ここでExcelデータは、XMLファイルがあるフォルダに「OUTPUT_[日付]_[時刻]」という名称の下位フォルダを作り、そこにXMLファイルと同名で保存されます。
XMLファイルと比較するとこのような感じになります。少しは見やすくなったでしょうか。
3.抽出方法の設定(ソースコードを書き換えます)
ソースコードを少し書き換えることにより、抽出方法の設定が出来ます。
- 設定1:ファイル名に情報を付加
(前置き:このプログラム、元々は土質データの出力を目的として作ったためこの機能を設けています。)
ファイル名にXMLのタグ情報から取得した日本語の土質試験名等を付加する場合は「add_ja_name = 1」とします。付加しない場合や、付加した場合に使用禁止文字の影響でExcelデータを出力できなかった場合は1以外の数字を入力してください。
- 設定2:数字をExcelに数値として抽出するか文字として抽出するか
数字をExcelに数値として抽出する場合は「XLSX_str_num = 1」とします。文字として抽出する場合は1以外の数字を入力してください。
なおこの設定は一長一短あり、数値として抽出する設定とした場合は文字として扱いたい数字(例えばコード番号など)も数値に変更されてしまいますし、文字として抽出する設定とした場合はExcelの集計などが期待する結果とならない場合があります。現在のプログラムでは個々に判定する機能を設けていませんので、設定はケースバイケースでお願いいたします。
各設定での出力結果を以下に示します。
- 設定3:キーワードでグルーピングする設定
キーワードごとにグルーピングして抽出したい場合は「reset_line_2~4」に、該当するXMLタグの名称を追記してください。2~4はExcelの行に相当します。現在のソースコードには、土質データXMLファイルに含まれるタグをキーワードとしていくつか設定しています。実際に処理したいファイルが土質データと無関係でもこのキーワードは残しておいて構いません。エラーにはなりません。
下の図では、”試験情報”をキーワードに登録しているため、試験情報ごとに列を変えて出力されています。
4.プログラムがエラーもしくは続行出来ていない場合
正常にExcelデータが出力されていない場合は、コマンドプロンプトやVSCodeから起動させてエラーの状況を確認してください。症状によっては下記の対処により解決できます。
- ライブラリがインストールされていない場合は、PIP等によりインストールしてください。
- XMLファイルに誤記などがある場合は、別途XMLエディタなどでご確認ください(本プログラムでもエラーの箇所を特定できますが、try~exceptでエラーをスキップさせているため、コードを書き換えないとエラー箇所の特定ができません)。
- 心当たりの無いエラーが出た場合は、お手数ですがVSCodeなどでエラーをご確認お願いします。