![]() |
|
---|
斎藤です。こんにちは。
今日は、Pythonの"xlutils"ライブラリを利用してExcelスプレッドシートの生成をしてみます。「使い方」「書式定義のしかた」そして「注意点」の3点について、順にお話しします。
Excelを用いて、サーバ管理台帳など、ITインフラ運用に用いるドキュメントを作られる方もいらっしゃるかと思います。そのときに、これからお話しする"xlutils"ライブラリを用いると、お手製CSV出力ツールや、それこそ手動 で作るよりも手間を省きつつExcelスプレッドシートを作成できます。
※Python 2.7.4, xlutils 1.6.0, xlwt 0.9.2, Excel for Mac 2011 (14.3.6), Mac OS 10.7.5 を用いて検証しています
インストールはとても簡単です。
# easy_instal xlutils
インストール時、Excelファイルの書き込みを行う"xlwt"と、読み込みを行う"xlrd"が同時にインストールされます。なお、今回は"xlrd"については説明しません。
プログラミング入門の定番、"Hello, world !"の出力です。
書き込みたいセルに対して、テキストを挿入します。
from xlwt import Workbookwb = Workbook()ws = wb.add_sheet( "First Step" )ws.write( 0, 0, "Hello" )ws.write( 0, 1, "World" )ws.write( 1, 0, "Hello" )ws.write( 1, 1, "Excel" )wb.save( "helloworld.xls" )
プログラムを実行し、出力されたExcelファイルを開くと、次の通りの結果が得られます。
Excel VBA に取り組んだ事がある方だと、書き方が似ていてしっくり来るかもしれません。
xlwt では、書き込むセルに対して書式を定義する事ができます。
"site-packages/xlwt/Style.py"内の"XFStyle"を用いて書式を定義し、ws.write()メソッドにてテキストを入力する際、同時に書式の情報を与える事で反映します。ここで可能なのは、Excelのセル上で右クリックしたときに出る「セルの書式設定」メニューで定義できるものとほぼ同じです。
実際は、"site-packages/xlwt/Formatting.py"内のクラスを用いて書式を定義し、XFStyle の各プロパティに反映します。次の5つのクラスがあります。
それぞれのクラスのプロパティはAPIドキュメントを...と言いたい所なのですが、簡素なドキュメント以外見つける事ができませんでした。そのため、詳細を知るには直接ソースコードを覗く必要があります。
# -*- coding: utf-8 -*-from xlwt import Workbook, Font, Alignment, Borders, Pattern, Protection, Formula, XFStyleimport datetimewb = Workbook()ws = wb.add_sheet( "Second Step" )# Titlefont_title = Font()font_title.name = u"MS ゴシック"font_title.bold = Truefont_title.colour_index = 0x35 # Orange - Style.py:L307 に定義があるfont_title.height = 12 * 20 # 20倍するとポイントになるws_style_title = XFStyle()ws_style_title.font = font_titlews_style_title.num_format_str = 'yyyy-mm-dd'ws.write( 0, 0, datetime.date.today(), ws_style_title )# headerws_header = [ "A", "B", "C" ]align_header = Alignment()align_header.horz = Alignment.HORZ_CENTERborders_header = Borders()borders_header.left = Borders.MEDIUMborders_header.right = Borders.MEDIUMborders_header.top = Borders.MEDIUMborders_header.bottom = Borders.MEDIUMpattern_header = Pattern()pattern_header.pattern = Pattern.SOLID_PATTERNpattern_header.pattern_fore_colour = 0x16font_header = Font()font_header.name = u"MS ゴシック"font_header.height = 10 * 20 # 20倍するとポイントになるws_style_header = XFStyle()ws_style_header.alignment = align_headerws_style_header.borders = borders_headerws_style_header.pattern = pattern_headerws_style_header.font = font_headerfor i, text in enumerate( ws_header ): ws.write( 1, i, text, ws_style_header )# bodyws_data = [ [ u"A3", u"B3", u"C3" ], [ u"A4\nデータ", u"B4\nデータ", u"abcdefghijklmn" ], [ 1, 2, Formula( "A5+B5" ) ] ]align_body = Alignment()align_body.wrap = Alignment.WRAP_AT_RIGHTalign_body.vert = Alignment.VERT_TOPalign_body.shri = Alignment.SHRINK_TO_FITborders_body = Borders()borders_body.left = Borders.THINborders_body.right = Borders.THINborders_body.top = Borders.THINborders_body.bottom = Borders.THINfont_body = Font()font_body.name = u"MS ゴシック"font_body.height = 10 * 20ws_style_body = XFStyle()ws_style_body.alignment = align_bodyws_style_body.borders = borders_bodyws_style_body.font = font_bodyfor i, row in enumerate( ws_data ): for j, col in enumerate( row ): ws.write( i + 2, j, col, ws_style_body ) # 既に2行書いているのでずらす # 幅 if isinstance( col, unicode ): width = 300 * len( col.split( "\n", 1 )[0] ) if width > ws.col( j ).width: ws.col( j ).width = widthwb.save( "format.xls" )
実行すると、次のような結果になります。
より実用的な体裁の表が出来上がりました。
先にも述べましたが、"xlwt"のAPIドキュメントは非常に簡素なものです。そのため、どんなメソッド・プロパティが用意されているかは、ソースコードを覗く必要があります。また、"site-packages/xlwt/examples/"内に、開発者が用意したサンプルもあります。使い方がよくわからない時は、サンプルも参照すると良いかと思います。
変数名、メソッド名等の英単語の綴りがイギリス英語です。"colour"などが要注意です。"color"とアメリカ英語で入力するとはまる事になるので、注意してください。先の話に続きますが、変数名等はソースコードを確認して入力すると良いかと思います。
ここまで、PythonでExcelスプレッドシートを作る"xlutils"の使い方について、「使い方」「書式定義のしかた」そして「注意点」の3点に分けて説明しました。説明中、サンプルを通じて使い方も示しました。
今回は、あらかじめ用意したデータをもとにファイルを作成しましたが、実際は自動生成をするために利用するのが主になると思います。そこで、AWSで稼働中のインスタンス一覧をboto等を経由して取得、またnoukaなどで収集したインベントリデータを取得することで、1台から数百・数千にわたる情報をスプレッドシートとしてまとめることができます。
いやはや、ドキュメント作成って辛いですよね...ささっと作り終えたいですよね...。そんな中で、"xlutils"は自社内はもちろん、お客様に納品するドキュメントの作成の手間を減らせる、よいライブラリだと思います。
それでは、ごきげんよう。
私たちハートビーツはただITインフラを構築・監視・保守するのではなく、我々がサポートするお客様の事業成長を加速させることを目的としてインフラ運用に取り組んでいます。お客様のビジネスの成果を最大化するために「最適なITインフラ」をご提案します。
「ITインフラで課題があるけど社内では解決できそうにない……」
「自社のサービスをちゃんと理解している会社にインフラ運用をお願いしたい」
といったお悩みの方はぜひ一度、私たちにご相談ください。
Copyright (C) 2005-
HEARTBEATS Corporation.
All Rights Reserved.