Daily Archives: 2013年9月4日

PythonでExcelを読み書きする。

====== PythonでExcelを読み書きする。 ======
PythonでExcelのファイルを読み書きしてみます。
有名どころでは、[[http://www.python-excel.org/|python-excel]]なるmoduleがあります。

「python-excel」ライブラリは「xlrd」「xlwt」「xlutils」という3つのパッケージが存在します。Installerもそれぞれ分かれており、ぞれぞれdownloadしてinstallできます。
詳しくは、[[http://www.python-izm.com/contents/external/excel.shtml|pythonでexcel]]で説明されていますので、参考にしてください。

ここでは、Excelのfile拡張子が**xlsx**の2007以降のExcel fileを読み書きしてみます。

今回使うmoduleは、[[http://openpyxl.readthedocs.org|openpyxl]]を使ってみます。
そのほか、
– PythonからExcelを利用する[[https://pypi.python.org/pypi/Pyvot|Pyvot 0.1.2]]
– [[https://pypi.python.org/pypi/XlsxWriter/0.4.2|XlsxWriter]]
– [[http://www.pyxll.com/PyXLL]]
など多数、それそれの機能に特化したmoduleがあります。
[[https://pypi.python.org/pypi?%3Aaction=search&term=xls&submit=search]]で検索するとmoduleがhitします。 いろいろと試してみるのも良いですね。

===== openpyxl install =====
pygeocoderを動かす環境ですが、
– Windows 7 64 bit (32bitでも可)
– Python 2.7.5 (2013年6月18日現在最新版)
で行います。

環境の構築に関しては、[[http://blog.godo-tys.jp/2013/06/19/2465/|PythonでGeoSpatialをやってみる。[Chapter 1]]]のinstallのsectionを参考にしてください。

まずは、[[https://pypi.python.org/pypi/openpyxl/1.6.2|openpyxl 1.6.2]]から[[https://pypi.python.org/packages/source/o/openpyxl/openpyxl-1.6.2.tar.gz#md5=9f24ed772c98f24ae693f8ab6c7b7016|openpyxl-1.6.2.tar.gz]]をdownloadして、解凍します。
その後、解凍したfolderにcdして、cmdターミナルから

python setup.py install

を実行します。

以上でinstallは終わりです。

===== how to openpyxl =====
使い方はいたって簡単です。
PyScripterやIDLEなどからcodeを実行します。

==== Excel Workbookに書き出す ====
まずは、ExcelのWorkbookに書き出してみます。
下記codeをPyScripterに入力します。

from openpyxl import Workbook

from openpyxl.cell import get_column_letter

wb = Workbook()

dest_filename = r'F:¥¥openpyxl-1.6.2¥¥test_books¥¥check_book.xlsx'

ws = wb.worksheets[0]

ws.title = "range names"

for col_idx in xrange(1, 40):
    col = get_column_letter(col_idx)
    for row in xrange(1, 600):
        ws.cell('%s%s'%(col, row)).value = '%s%s' % (col, row)

ws = wb.create_sheet()

ws.title = 'Pi'

ws.cell('F5').value = 3.14

wb.save(filename = dest_filename)


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_write_module_01.pyに保存し、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image01.jpg}}
のようにエラーがなければ、インタープリタ画面には何も表示されません。

F:¥openpyxl-1.6.2¥test_booksのfolderを確認しみると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image02.jpg}}
のようにcheck_book.xlsxが作成されています。

とりあえずは、check_book.xlsxを開いて中身を確認すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image03.jpg}}
のようにcheck_book.xlsxのsheet内に値が入力されていることがわかります。

==== Excel Workbookを呼び出す ====
次に、ExcelのWorkbookを呼び出してみます。
下記codeをPyScripterに入力します。

from openpyxl import load_workbook

dest_filename = r'F:openpyxl-1.6.2test_bookscheck_book.xlsx'

wb = load_workbook(filename = dest_filename)

sheet_ranges = wb.get_sheet_by_name(name = 'range names')

print sheet_ranges.cell('D18').value


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_read_module_01.pyに保存し、実行すると、
{{http://blog.godo-tys.jp/wp-content/gallery/python_excel_01/image04.jpg}}
のようにエラーがなければ、cell(‘D18’)の値がインタープリタ画面に表示されます。

==== 日本語の読み書き ====
日本語の読み書きについては、py fileをUTF-8で保存して、
py modlueの1行目に

# -*- coding: utf-8 -*-

を付け加えればOKです。
例えば、Excel Workbookに書き出す場合は、

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.cell import get_column_letter

wb = Workbook()

dest_filename = r'F:¥¥openpyxl-1.6.2¥¥test_books¥¥check_book2.xlsx'

ws = wb.worksheets[0]

ws.title = u"日本語"

ws.cell('A1').value = u'行1'
ws.cell('A2').value = u'行2'
ws.cell('A3').value = u'行3'
ws.cell('A4').value = u'行4'

wb.save(filename = dest_filename)


**注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。**

code入力後は、F:¥openpyxl-1.6.2¥test_books¥xlsx_write_module_02.pyに保存し、実行すると、check_book2.xlsxが作成されます。

中身は日本語となっています。
読み込みについても同様ですので、exerciseとしてtryしてみてください。

===== 今回のまとめ =====
**openpyxl**を使って簡単にExcel Workbookの読み書きしてみました。moduleの使用については必要最低限の利用方法ですので、詳しくは[[http://pythonhosted.org/openpyxl/index.html#usage-examples|openpuxlの使い方]]をみて勉強してください。