Windows Dev. Site

Pyvot / Excel

Excelネタが続きますが、今回はPythonを使ったExcel操作です。Excel「ファイル」への読み書きを目的にしたものではなく、開いたままのシートに対してリアルタイムに読み書きするものです。Pythonはソースを見やすいようにパッケージの形にしましたが、コンソールでの操作を想定しています。
コンソール画面でプログラムのテストしたりするときに、標準入力や標準出力をセルでやると面白いかもということで試してみました。WindowsやLinuxなどのコマンドラインでデータの入出力をするときなど、ファイルでもいいのですが、データを部分的に変更したりするとき、この方法は便利です。視覚的にもわかりやすいです。(こんな用途かぎられるかもしれませんが・・)

環境 : Python 2.7.3, Excel 2010 / Windows 7
インストール :

http://pytools.codeplex.com/wikipage?title=Pyvot

PTVSからもできるようですが、よくわかりませんでしたので、

https://pypi.python.org/pypi/Pyvot

こちらのサイトから
Pyvot-0.1.2-py2.7.egg
をダウンロードして、easy_install コマンドを使いました。
あとwin32comも必要です。

使い方に関しては、以下の動画がわかりやすかったです。

基本的な機能を使ってみました。
pyvot_1
Pythonから書き込んだあと、Excelシートをエディトして(1 -> 10)、Excelから読みこみます。(w.get())
Pyvot_2
これを踏まえて、ちょっと変わった使い方ですが連続してデータをExcelに送り、グラフを表示してみました。

import xl
import threading
import time
import random

def main():
	xl.Workbook('xlTest.xlsx')
	
	r = range(1,11)
	for i in range(10):
		xl.get("A1:A10").set(r)
		random.shuffle(r)
		time.sleep(1)

if __name__ == '__main__':
	main()


初期値は以下で、
PYvot_3
あとは1秒ごとにランダムに並び順が変化します。
Pyvot_4
実は、マルチスレッドでデータを変化させ、リアルタイム解析みたいなことができないか、ということをしたかったのですが、Pythonのスレッドの中からxl関数を呼び出すと、エラーになってしまいました。また前提条件として、プログラム動作中、セルをクリックすると停止します。あと変更対象のセルにはあらかじめデータを入れておく必要があります。
自分が個人的にやりたかったことができないものもありましたが、十分使えるツールだと思います。

また、いろいろと試していきたいと思います。