Movatterモバイル変換


[0]ホーム

URL:


インフラエンジニアway - Powered by HEARTBEATS
HEARTBEATS
   
斎藤 祐一郎 2013年8月14日 10:00

カテゴリ:

斎藤です。こんにちは。

今日は、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 !

プログラミング入門の定番、"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ファイルを開くと、次の通りの結果が得られます。

helloworld.png

Excel VBA に取り組んだ事がある方だと、書き方が似ていてしっくり来るかもしれません。

書式定義のしかた

書式を司るクラス

xlwt では、書き込むセルに対して書式を定義する事ができます。

"site-packages/xlwt/Style.py"内の"XFStyle"を用いて書式を定義し、ws.write()メソッドにてテキストを入力する際、同時に書式の情報を与える事で反映します。ここで可能なのは、Excelのセル上で右クリックしたときに出る「セルの書式設定」メニューで定義できるものとほぼ同じです。

実際は、"site-packages/xlwt/Formatting.py"内のクラスを用いて書式を定義し、XFStyle の各プロパティに反映します。次の5つのクラスがあります。

  • Font --- フォントを変更します
  • Alignment --- テキストの配置を変更します
  • Border --- 罫線を変更します
  • Pattern --- 背景を変更します (ソースのヘッダにはBackgroundとありますがクラス名はPatternです)
  • Protection --- セルの保護状態を変更します

それぞれのクラスのプロパティは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" )

実行すると、次のような結果になります。

format.png

より実用的な体裁の表が出来上がりました。

注意点

使い方はソースを読みながら理解する

先にも述べましたが、"xlwt"のAPIドキュメントは非常に簡素なものです。そのため、どんなメソッド・プロパティが用意されているかは、ソースコードを覗く必要があります。また、"site-packages/xlwt/examples/"内に、開発者が用意したサンプルもあります。使い方がよくわからない時は、サンプルも参照すると良いかと思います。

変数名等がイギリス英語

変数名、メソッド名等の英単語の綴りがイギリス英語です。"colour"などが要注意です。"color"とアメリカ英語で入力するとはまる事になるので、注意してください。先の話に続きますが、変数名等はソースコードを確認して入力すると良いかと思います。

おわりに

ここまで、PythonでExcelスプレッドシートを作る"xlutils"の使い方について、「使い方」「書式定義のしかた」そして「注意点」の3点に分けて説明しました。説明中、サンプルを通じて使い方も示しました。

今回は、あらかじめ用意したデータをもとにファイルを作成しましたが、実際は自動生成をするために利用するのが主になると思います。そこで、AWSで稼働中のインスタンス一覧をboto等を経由して取得、またnoukaなどで収集したインベントリデータを取得することで、1台から数百・数千にわたる情報をスプレッドシートとしてまとめることができます。

いやはや、ドキュメント作成って辛いですよね...ささっと作り終えたいですよね...。そんな中で、"xlutils"は自社内はもちろん、お客様に納品するドキュメントの作成の手間を減らせる、よいライブラリだと思います。

それでは、ごきげんよう。

参考文献

ハートビーツでは、お客様の課題に合わせた適切なインフラ環境をご提案します。

私たちハートビーツはただITインフラを構築・監視・保守するのではなく、我々がサポートするお客様の事業成長を加速させることを目的としてインフラ運用に取り組んでいます。お客様のビジネスの成果を最大化するために「最適なITインフラ」をご提案します。

「ITインフラで課題があるけど社内では解決できそうにない……」
「自社のサービスをちゃんと理解している会社にインフラ運用をお願いしたい」

といったお悩みの方はぜひ一度、私たちにご相談ください。

記事をシェア

タグ:

インフラエンジニアway - Powered by HEARTBEATS

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。



バナー画像:お問い合わせ。確かな技術力を持つ経験豊富なエンジニアがお客様のインフラ・システムをサポート致します。お気軽にご相談ください。バナー画像:採用エントリー受付中。「みんな仲良く」「プライドを持って」「変化を楽しむ」という企業理念に共感していただけるエンジニアを募集しています。バナー画像:失敗しないフルマネージド導入。ITインフラ管理・運用を外注する際に抑えておきたいポイントとは?資料をダウンロードバナー画像:case study 詳しく見てみる

ハートビーツをフォロー

  • Twitter:HEARTBEATS
  • Facebook:HEARTBEATS
  • HATENA:HEARTBEATS
  • RSS:HEARTBEATS

殿堂入り記事


  • HEARTBEATS
  • 株式会社ハートビーツ
    〒160-0022 
    東京都新宿区新宿1-28-11 小杉ビル5F
    / 03-3356-1236

Copyright (C) 2005-
HEARTBEATS Corporation.
All Rights Reserved.


[8]ページ先頭

©2009-2025 Movatter.jp