pythonで解析を行ったものをエクセルに出力したい事ってありますよね。
今回は、pythonからエクセルにデータ出力をする方法を紹介します。
Contents
エクセルを扱うライブラリー xlwings
pythonからエクセルを操作するライブラリー、私は初めpywin32を使ってみたのですが問題が起こったときに調べようとしてもなかなかいい情報が得られない。という事で、今ではxlwingsを使っています。
そこで、今回はxlwingsを紹介します。
インストール
インストールはいたって簡単
コマンドプロンプトを立ち上げて、
pip install xlwings
もしくは
conda install xlwings
これだけです。仮想環境を構築している方は、仮想環境をアクティベートしてから行ってください。
なお、anacondaのベース環境を使っている方はanacondaに含まれているらしいのでインストールの必要はないようです。
使い方
使い方はすごくシンプルです。
エクセルを立ち上げる
import xlwings as xw
wb = xw.Book()
この2行だけでエクセルが立ち上がってくれます。
文字の入力
そうしたら、シートを指定し、セルを指定してあげます。
そこにどの値を入力するかを指定してあげるだけです。
import xlwings as xw
wb = xw.Book()
sht = xw.sheets[0]
sht.range("A1").value = 'TEST_A1'
sht.range("C5").value = 'TEST_C5'
リストを入力
続いて、リストを一気に入力してみます。
import xlwings as xw
coment =['slice1', 'slice2', 'slice3', 'slice4', 'slice5', 'slice6']
wb = xw.Book()
sht = xw.sheets[0]
sht.range("A1").value = coment
リストを縦方向に入力
今度は、縦方向に入力してみます。
optionsで指定をします。
import xlwings as xw
coment =['slice1', 'slice2', 'slice3', 'slice4', 'slice5', 'slice6']
wb = xw.Book()
sht = xw.sheets[0]
sht.range("A1").options(transpose=True).value = coment
2次元のリストを入力する場合 横方向に入力
for文を使って入力していくのが簡単です。
その際に、オプションとしてoffsetを用います。
import xlwings as xw
coment =[['slice1_1', 'slice1_2', 'slice1_3', 'slice1_4', 'slice1_5', 'slice1_6'],
['slice2_1', 'slice2_2', 'slice2_3', 'slice2_4', 'slice2_5', 'slice2_6'],
['slice3_1', 'slice3_2', 'slice3_3', 'slice3_4', 'slice3_5', 'slice3_6'],
['slice4_1', 'slice4_2', 'slice4_3', 'slice4_4', 'slice4_5', 'slice4_6'],
['slice5_1', 'slice5_2', 'slice5_3', 'slice5_4', 'slice5_5', 'slice5_6']]
wb = xw.Book()
sht = xw.sheets[0]
for i in range(len(coment)):
sht.range("A1").offset(i, 0).value = coment[i]
offsetは基準セルから以下の様に(縦、横)で指定します。
(-1,-1) | (-1,0) | (-1,1) |
(0,-1) | 基準セル | (0,1) |
(1,-1) | (1,0) | (1,1) |
2次元のリストを入力する場合 縦方向に入力
今度は、縦方向に入力していきます。
import xlwings as xw
coment =[['slice1_1', 'slice1_2', 'slice1_3', 'slice1_4', 'slice1_5', 'slice1_6'],
['slice2_1', 'slice2_2', 'slice2_3', 'slice2_4', 'slice2_5', 'slice2_6'],
['slice3_1', 'slice3_2', 'slice3_3', 'slice3_4', 'slice3_5', 'slice3_6'],
['slice4_1', 'slice4_2', 'slice4_3', 'slice4_4', 'slice4_5', 'slice4_6'],
['slice5_1', 'slice5_2', 'slice5_3', 'slice5_4', 'slice5_5', 'slice5_6']]
wb = xw.Book()
sht = xw.sheets[0]
for i in range(len(coment)):
sht.range("A1").options(transpose=True).offset(0, i).value = coment[i]
終わり
以上、pythonからエクセルに入力する方法でした。
以下、xlwingのドキュメントです。
xlwings Documentation