Technical information

外部との連携 KompiraでExcelファイルの読み書きをする

Pythonで記述された処理をKompiraから呼び出す」という記事では、KompiraジョブフローからPythonコードを呼び出す方法を解説しました。今回の記事ではExcelファイルを扱うPythonライブラリを利用して、データの読み書きを行います。

Excelファイルを扱えるPythonライブラリはいくつか存在しますが、今回はopenpyxlを利用します。
openpyxlには多くの機能が用意されているため、知識のある方はセルの範囲指定や表示フォーマット、色指定など多くの機能を利用できると思いますのでチャレンジしてみてください。(なお、本記事はPython 2.6.6、openpyxl 2.4.0のバージョンで動作確認しております。)

 
Excelファイルの用意

ここではKompiraサーバーの/tmpにtest.xlsx をアップロードします。
この際に’kompira’アカウントから操作できるように、ファイルのパーミッションを 0666 に設定してください。

このファイルには以下のような値が書き込まれているとします。

Excelシート

 
openpyxlのインストール

まずKompiraサーバーでopenpyxlが利用できるようにインストールします。ここではPythonのpipコマンド(pythonのパッケージ管理ツール)を利用してインストールします。

(追記) Kompira1.5以降では、以下のようにパッケージをインストールします。

続いて動作確認をしてみます。Pythonをコマンドラインで実行してみます。>>> に続いてPythonのコマンドを入力していきます。

Excelに記載されている文字列が表示されればOKです。(以下の例では’A1’に記載されている’tokyo’)

(追記) Kompira1.5以降では、以下のように確認します。

 
Kompiraライブラリの作成

上記の動作確認の際に使った関数を利用して、Kompiraのライブラリを作ってみましょう。
ここではディレクトリ”ライブラリ”を作成し、その中に”ExcelRW”というライブラリを作成します。

ここで入力するPythonコードは以下の通りです。

 
ジョブフローの作成

先に作成したディレクトリ”ライブラリ”の1つ上の階層に、ジョブフロー「Excel読み込み」を作成します。

さて、ここまで出来たら実行してみましょう。セル番号が’A1’なので’tokyo’が表示されれば成功です。

このままですと、実行時にセル番号の変更のたびにジョブフローの編集が必要になるので、セル位置をパラメータにします。

ジョブフローを次のように変更します。

パラメータの利用

変数を | | で囲うとパラメータとして設定されます。(‘=’ 以降の値はデフォルト値) ジョブフローの実行時に、パラメータのcellの欄にセル番号を文字列で指定できるようになりました。指定する際には’B2’のようにセル番号を’ ‘で囲ってください。

 
Excelファイルへの追記

Excelファイルにデータを書き込もうとする場合には、何らかの処理結果の記録を残すようなユースケースが考えられます。続いて、指定された文字列をA列の一番最後の行に追記する方法をご紹介します。
一番最後の行の番号は指定のワークシートの”max_row”で取得できます。

まずはライブラリ”ExcelRW”に次の関数”append_cell”を追記します。

ここでcolumn=1は列番号が1番目で、いわゆるA列を意味します。

 

次に、ディレクトリ”ライブラリ”の1つ上の階層に、ジョブフロー「Excel追記」を作成します。

これを実行すると以下のように出力されます。

先に作ったジョブフロー”Excel読み込み”で、セルを”A5″(1列、5行目)にして実行すると’Fukuoka’と表示されれば成功です。(先にアップロードした’text.xlsx’のパーミッションで書き込みパーミッションが不足しているとエラーになります。666に設定されているか確認してください。)

 

ここではopenpyxlの機能の一部を用いて、KompiraからExcelファイルへの読み書きの方法をご紹介しました。他にも多くの機能がありますのでドキュメントなどを参考にして、必要な関数を実装してみてください。
なお、Excelファイル自体はKompiraサーバー上のものにアクセスします。ファイルサーバーのようなリモートサーバーにあるファイルを操作する場合には、必要に応じてフォルダKompiraサーバーにマウントしてください。