はじめに
プログラムを色々と書いていると、Excelファイルで作られたフォーム(申込書みたいなやつのことです。)に記入されているデータを読み出すためのプログラムを書く必要に迫られることがあります。
一般にそれらのフォームは人間がパソコンの画面上で見たり、紙に印刷した際に読みやすいようにレイアウトされていますが、レイアウト映えのためならということで、行や列の幅を変えてみたり、複数のセルをまとめて1個の入力フィールドに見せるようなレイアウトが行われていたりと、手段を選ばないものがあります。
そのようなネ申Excelなファイルに記載されているデータを読み出すには、読み出すべきデータがどのセルに書かれているかを項目ごとに確認することになりますが、行や列の幅を小さくされてしまっていたりすると、それをExcel上でいったん幅を広げて行名または列名を確認してそっと元に戻すといったような作業を繰り返すことになったり、そもそもそのためだけにExcelファイルを開くこと自体が地味にデータ読み出し位置の把握作業における作業効率の向上の妨げになってきます。
そこで、Excelで作られたフォーム(未記入のもの)を想定し、そのフォームに記述されている文字列をセル名と紐づけ、かつその結果をテキストファイルとして出力するためのPython3のプログラムを書きましたので、この記事ではそれについて書きます。
Python3からのExcelファイルの読み出し
Python3からExcelファイルのデータを読み出すにはopenpyxlライブラリを使います。
以前はxlrdライブラリも使うことができましたが、Version 2.0.0以降では.xlsxファイルに対応しなくなりました[1]。
openpyxlライブラリがない場合には、以下のコマンドを実行し、インストールします。
プログラム
openpyxlライブラリを使ったプログラム例は以下の通りです。
-iまたは--input-fileオプションで指定されたExcelファイルを読み込んでセルに記載されているデータをシートごとに取り出し、それらのデータをセルごとにセル位置(A1形式)、セル位置(R1C1形式)及び記載されていた文字列の順で1行にまとめて標準出力に出力することができます。
動作確認
テストデータ
前節のプログラムが書けたら、動作確認をしてみます。
なお、入力には以下のようなテストデータが記載された2枚のシートを持つExcelファイルを指定します。
なお、どちらのシートもデータをまばらに配置しています(データが存在しない行も設けています)。また、上図に示した範囲以外のセルにはデータの記載はありません。
確認してみます。
Python3及びその他必要なPython3のパッケージをインストールしたWindows10上で確認してみます。
スポンサーリンク
以下のコマンドを実行します。
すると、以下のように出力されます(1行目はコマンドラインオプションのデバッグ用の出力(プログラム例の19行目参照。)で、Excelファイルに記載されている文字列とは関係ありません)。
Namespace(input_file='testdata1.xlsx')
Sheet1
A1 1,1 テスト
A2 2,1 データ1
F2 2,6 項目2
B3 3,2 アイテム3
A4 4,1 情報4
D4 4,4 情報5
A6 6,1 以上
シート2
A1 1,1 テスト
A2 2,1 データ1
F2 2,6 項目2
B3 3,2 アイテム3
A4 4,1 情報4
D4 4,4 情報5
A6 6,1 以上
E8 8,5 中トロ
記載されているデータ及びその記載位置が2通りの形式(A1形式及びR1C1形式)で出力されていることがわかります。😎
なお、R1C1形式は本来であれば「R8C5」などと表現すべきところかもしれませんが、上記の出力では単にカンマ区切りで表示するコードとしています。
まとめ
最初の節でも書きましたが、プログラム例の入力となるExcelファイルには未記入のフォームを想定しています。したがって、実際にフォームに記入されるデータの位置が直接出力されるわけではないため、一見作業効率がExcelファイルを開いて直接探す場合と比較してあまり変わらないようにも感じられるかもしれません。
しかし、前節の出力結果の情報をExcelファイルとは別の形式で手元(または別ファイル)に持つことによって、その情報を参照しつつ、Excelファイル上でデータのおおよその位置の見当をつけることが容易になるので、データの位置を特定する作業の効率を上げることができると考えています。
この記事は以上です。