Enterprise 技術情報 Enterprise 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 に設定してください。
このファイルには以下のような値が書き込まれているとします。
openpyxlのインストール
まずKompiraサーバーでopenpyxlが利用できるようにインストールします。ここではPythonのpipコマンド(pythonのパッケージ管理ツール)を利用してインストールします。
変数を | | で囲うとパラメータとして設定されます。(‘=’ 以降の値はデフォルト値) ジョブフローの実行時に、パラメータのcellの欄にセル番号を文字列で指定できるようになりました。指定する際には’B2’のようにセル番号を’ ‘で囲ってください。
Excelファイルへの追記
Excelファイルにデータを書き込もうとする場合には、何らかの処理結果の記録を残すようなユースケースが考えられます。続いて、指定された文字列をA列の一番最後の行に追記する方法をご紹介します。
一番最後の行の番号は指定のワークシートの”max_row”で取得できます。
まずはライブラリ”ExcelRW”に次の関数”append_cell”を追記します。
ライブラリ「ExcelRW」その2

$ sudo pip install openpyxl Collecting openpyxl Downloading openpyxl-2.4.0.tar.gz (153kB) 100% |████████████████████████████████| 153kB 228kB/s Collecting jdcal (from openpyxl) Downloading jdcal-1.3.tar.gz Collecting et_xmlfile (from openpyxl) Downloading et_xmlfile-1.0.1.tar.gz Installing collected packages: jdcal, et-xmlfile, openpyxl Running setup.py install for jdcal ... done Running setup.py install for et-xmlfile ... done Running setup.py install for openpyxl ... done Successfully installed et-xmlfile-1.0.1 jdcal-1.3 openpyxl-2.4.0(追記) Kompira1.5以降では、以下のようにパッケージをインストールします。
$sudo /opt/kompira/bin/pip install openpyxl続いて動作確認をしてみます。Pythonをコマンドラインで実行してみます。>>> に続いてPythonのコマンドを入力していきます。 Excelに記載されている文字列が表示されればOKです。(以下の例では’A1’に記載されている’tokyo’)
$ python Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from openpyxl import load_workbook >>> wb = load_workbook('/tmp/test.xlsx') >>> ws = wb['Sheet1'] >>> print(ws['A1'].value) tokyo >>> (Ctrl+Dで抜ける)(追記) Kompira1.5以降では、以下のように確認します。
$ /opt/kompira/bin/python Python 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from openpyxl import load_workbook >>> wb = load_workbook('/tmp/test.xlsx') >>> ws = wb['Sheet1'] >>> print(ws['A1'].value) tokyo >>> (Ctrl+Dで抜ける)Kompiraライブラリの作成 上記の動作確認の際に使った関数を利用して、Kompiraのライブラリを作ってみましょう。 ここではディレクトリ”ライブラリ”を作成し、その中に”ExcelRW”というライブラリを作成します。 ここで入力するPythonコードは以下の通りです。 ライブラリ「ExcelRW」
from openpyxl import load_workbook def get_cell_value( filename, sheet_name, cell ): # 引数はExcelファイル名、シート名、セル番号 wb = load_workbook(filename) # ファイルの読み込み ws = wb[sheet_name] # シートの指定 return ws[cell].value # 指定されたセルの値を返すジョブフローの作成 先に作成したディレクトリ”ライブラリ”の1つ上の階層に、ジョブフロー「Excel読み込み」を作成します。 ジョブフロー「Excel読み込み」
[./ライブラリ/ExcelRW.get_cell_value: '/tmp/test.xlsx', 'Sheet1', 'A1'] -> print($RESULT)さて、ここまで出来たら実行してみましょう。セル番号が’A1’なので’tokyo’が表示されれば成功です。
tokyoこのままですと、実行時にセル番号の変更のたびにジョブフローの編集が必要になるので、セル位置をパラメータにします。 ジョブフローを次のように変更します。 ジョブフロー「Excel読み込み」
|cell = 'A1'| [./ライブラリ/ExcelRW.get_cell_value: '/tmp/test.xlsx', 'Sheet1', cell] -> print($RESULT)

def append_cell( file, sheet_name, word ): # 引数は、ファイル名、シート名、追記する値 wb = load_workbook(file) ws = wb[sheet_name] row_to_append = ws.max_row+1 # 追記する行は最終行+1 ws.cell(row=row_to_append, column=1, value=word) # 指定セルに値を記載 wb.save(filename=file) # ファイルを保存 return([row_to_append, 1, word]) # 書き込んだ行番号、列番号、追記した値 を返すここでcolumn=1は列番号が1番目で、いわゆるA列を意味します。 次に、ディレクトリ”ライブラリ”の1つ上の階層に、ジョブフロー「Excel追記」を作成します。 ジョブフロー「Excel追記」
[./ライブラリ/ExcelRW.append_cell: '/tmp/test.xlsx', 'Sheet1', 'Fukuoka'] -> print($RESULT)これを実行すると以下のように出力されます。
[5, 1, 'Fukuoka']先に作ったジョブフロー”Excel読み込み”で、セルを”A5″(1列、5行目)にして実行すると’Fukuoka’と表示されれば成功です。(先にアップロードした’text.xlsx’のパーミッションで書き込みパーミッションが不足しているとエラーになります。666に設定されているか確認してください。) ここではopenpyxlの機能の一部を用いて、KompiraからExcelファイルへの読み書きの方法をご紹介しました。他にも多くの機能がありますのでドキュメントなどを参考にして、必要な関数を実装してみてください。 なお、Excelファイル自体はKompiraサーバー上のものにアクセスします。ファイルサーバーのようなリモートサーバーにあるファイルを操作する場合には、必要に応じてフォルダKompiraサーバーにマウントしてください。
スタートガイド
Kompiraジョブフローの基礎
ジョブフローの簡単な例
Kompiraの機能
-
- フィールド修飾子でフィールドの入力内容に制約を設ける
- Kompiraでの文字列のパターンマッチング
- Kompira上でWikiページを作成する
- スケジューラを使って定期的にジョブを実行する
- ジョブフローを実行するフォームを作成する
- テーブル内の情報を選択して処理を実行する
- ジョブフローに権限設定をする
- ジョブフロー画面の各種設定
- Pythonで記述された処理をKompiraから呼び出す
- Kompiraオブジェクトのプロパティ,メソッド,フィールドを扱う
- Windowsでリモートスクリプトを実行する(その1)
- Windowsでリモートスクリプトを実行する(その2)
- Kompira上のデータをバックアップする(その1)
- Kompira上のデータをバックアップする(その2)
- Kompira上のデータをバックアップする(その3)
外部との連携
-
- Prometheusからの通知をKompiraで受信する
- Kompira cloud Pigeonを利用した通知電話の利用
- ネットワーク機器へのコマンド投入
- KompiraからWindowsGUIアプリケーションを操作する (1/2)
- メールを送信する
- メール受信をトリガーにしてジョブフローを実行する
- アラートメールをフィルタリングして転送する
- チャネルを利用して外部システムからデータを受信する
- Webページから内容を取得する
- Redmineへ新規チケットを登録する
- Redmineでのチケット作成をKompiraに通知する
- Kompira REST APIを利用して外部からジョブフローを実行する
- Kompira REST APIを利用して外部からオブジェクト情報を取得する
- KompiraからSlackに通知する
- Slackでの投稿をKompiraに通知する
- KompiraからTwilioで電話をかける
- Zabbixからの通知をKompiraで受信する
- syslogをKompiraで受信する
- snmptrapをKompiraで受信する
- KompiraでExcelファイルの読み書きをする
- KompiraでGoogle SpreadSheetの読み書きをする
- Active Directoryから情報を取得する
- Active Directoryにユーザーを登録する