ディレクトリ以下のexcelファイル内の特定文字列の検索

先端技術開発の三谷です。

先日飲み会の席で、非技術職の方から、
“プログラムを書けるようになりたいが、何をしたらいいのかわからない”
なる質問を受け、技術数人でアドバイスをする場面がありました。

ある方は”ゲームを作ったらいい”とか、ある方は”簡単なウェブアプリを作ったらいい”とか出ましたが、
私は、”日常の業務を楽にするスクリプトから始めてみれば? 例えばディレクトリ内のexcel内のgrepとか…”
と提案してみました。

言ってはみたものの、どうやって実現しようかと考えていました。
結果、python on xonshでやって見ました。 

戦略としては、
1.ディレクトリ内のファイルを検索する
2.ファイルパスの拡張子が”xlsx”であるものにフィルタする
3.Excelファイル内の特定文字検索を行う関数へmapで渡す

となるかと思います。 1, 2 はxonshであればpythonを使用する必要はありません(後述)
3. を作っていこうと思います。

まず、 xonsh記事 の~/.xonshrc を
今回の実装のために、多少変更しました。

この~/.xonshrc を他のスクリプトからでも使いやすいように、ホームにリンクを作りました

次に、pythonでエクセルファイルを扱うためのライブラリ xlrd を利用するため、pip3でインストールしました。

準備は完了です。

こちらの戦略ですが
1. パスからexcelファイルを開き、ワークブックオブジェクトを取得
2. ワークブックオブジェクトからシート配列を取得
3. シート中のセルから情報を取得し値の入っていないセルは除外する
5. List[シート配列[セルinfo]] というListListからList(flatten 1段階)

コードは以下のようになりました。 一部イケてないところはありますがご勘弁を。

このファイルをexc.py とし, xonshの起動からのシェルでの操作は以下になります

これで、
{‘sheet_name’: ‘シート名’, ‘sheet_num’: シート番号, ‘row’: 縦セル位置, ‘col’: 横セル位置, ‘cell’: xlrdデータタイプ:値, ‘path’: ‘ファイルパス’}
を配列にした結果を表示できます。

xonsh 非常に便利ですね。