PythonでEXCELを触ってみる
2015/09/29
岡山Python勉強会
@k5_yamayama
山手 恵悟(やまやま)
@k5_yamayama
岡山の某DBメーカー勤務
ユーザーCE→社内SE→企画開発→
→サーバー管理→営業に至る。
(これってフルスタック…?)
自己紹介
Okayama Engineers Community(通称:OITEC)
運営スタッフやってます。
岡山Python勉強会(通称:おっPy)
立ち上げスタッフ
主催者のはずの“#た”が福山に戻っちゃった
で現在は、ほぼ主催者状態。
コミュニティ
はじめに
今回は、Pythonを使ってExcelを触ってみよう
と思います。
注意事項
本セッションは、やまやま個人が調査・検証した
結果を発表するもので、間違いやこれにより損害
が生じても一切責任を負いませんのでご了承くだ
さい。
ちなみに
最近、VBAで作業している人?
ちなみに
結構、使う頻度が少なかったりす
るのでどうやって書くか忘れてグ
グったりするほうが多かったりし
ませんか?
ちなみに
そんな時にコードは、Pythonで
書いて動かしたりできると便利で
はないかと思い調べてみました。
今日の目的とゴール
 目的
PythonでExcelを操作する方法を理解
する。
 ゴール
実際に触ってみてどういった動きにな
るかやってみる。
ExcelをPythonで動かすために必要なも
の
Excel
Python(今回は2.7で…)
Excel操作用のPythonモジュール
では、どんなモジュールがあるのか?
Excel操作用Pythonモジュール
 DataNitro INC.が作ったExcelプラグイン
でExcelのリボンに操作用の項目が追加され
る。
 有償(30日間のトライアルあり) $99/年
 使い勝手が良かったがトライアル期間終わっ
た。
DataNitro
Excel操作用Pythonモジュール
 zoomeranalyticsが作ったExcelプラグイ
ンでVBAからPythonを呼び出す仕組み。
 無償(BSDライセンス)
xlwings
今回は
xlwingsを使ってみようと思います。
インストール
必要なモジュール
pywin32(win32apiを操作するのに必要)
numpy(デモ用で必要なのでインストール)
xlwings(Excel操作用)
インストール
pywin32
以下のURLよりダウンロードしexeから
イントール
http://u111u.info/o9a8
ハマりどころとしてpythonのバージョンと64Bit or
32Bit(pythonの…)を間違えるとうまくいかないので注
意が必要(私はここで最初に悩みました。)
インストール
numpy
以下のURLよりダウンロードしexeから
インストール
http://u111u.info/o9aE
現行Ver.は、1.9.2のインストーラを使用
ハマりどころとしてpip installで実施するとC++のラ
ンタイムが必要だったりするのが結構めんどうだったので
今回はインストーラを使用
まずはコンソールで動かしてみる
xlwings.orgのQuick Startから
> from xlwings import Workbook, Sheet, Range, Chart
> wb = Workbook()
> Range(‘A1’).value = ‘Foo 1’
> Range(‘A1’).value
‘Foo 1‘
> Range(‘A1’).value = [['Foo 1‘, 'Foo 2‘, 'Foo 3'], [10.0, 20.0, 30.0]]
> Range(‘A1’).table.value
[['Foo 1‘, 'Foo 2‘, 'Foo 3'], [10.0, 20.0, 30.0]]
> Sheet(1).name
‘Sheet1’
> chart = Chart.add(source_data=Range(‘A1’). table)
実際に動かしてみると…
 結構インタラクティブに動く
 自動マクロ的なことができます
 よくある感じだとDBからデータを取ってきて事前
に作っておいたセルにデータを置いてグラフ作っ
たりするマクロなんかに使うといいかも
マクロからのPython呼び出し
 事前準備
 マクロ付きExcelファイルを作成(~.xlsm)
 ファイルのインポートにてxlwings.basを登録(重要)
 実行用のPythonファイルの作成
 注意点
 xlsmファイルと同一フォルダ内に~.pyファイルを置かな
いとちゃんと動きません(階層を追って見つけることがで
きないため)
マクロからのPython呼び出し
 xwings.basは何のために必要?
 python処理用ファイルでコレを使って処理をして
いる
 basファイルのありかはPythonインストールフォ
ルダ内の/Lib/site-packages/xlwings
 xwings.bas内のPYTHON_WIN = “”(MACは
PYTHON_MAC = ““)にパスの指定を行う。
マクロからのPython呼び出し
 Python内のコード
# -*- coding: utf-8 -*-
import numpy as np
from xlwings import Workbook, Range
def rand_numbers():
""" produces standard normally distributed random
numbers with 10
shape (n,n)""“
# Creates a reference to the calling Excel file
wb = Workbook.caller()
# Write desired dimensions into Cell B1
n = int(Range('Sheet1', 'B1').value)
rand_num = np.random.randn(n, n)
Range('Sheet1', 'C3').value = rand_num
マクロからのPython呼び出し
 マクロのコード
Sub ボタン1_Click()
RunPython ("import mymodule;
mymodule.rand_numbers()")
End Sub
やっていることは、
1.モジュールの呼び出し
2.メソッドの呼び出し
実際に動かしてみると…
 コンソールから動かすのと変わんない
 メソッド単位に処理を分けれるのは便利
 一括でモジュール読み込むのってできないのかな?
まとめ
 外部から処理がインタラクティブにできるので結構便利
(外部処理的な使い方は便利かも)
 複雑な統計処理などのVBAでやるには面倒なところは
Pythonのライブラリに任せるとラクに処理ができる
 別ファイルでの管理ができるのでソース管理がラクかも
 パス等の依存があるのでvirtualEnv等を使ってうまく
やらないと環境依存で動かない可能性がある
 日本語の処理が…
参考URL
xlwings
http://xlwings.org/
Python for Windows Extensions (Pywin32)
http://sourceforge.net/projects/pywin32/files/pywin32
Numerical Python(numpy)
http://sourceforge.net/projects/numpy
DataNitro
https://datanitro.com/
ご清聴ありがとうございました。

Pythonでexcel