pyExceleratorでExcelファイルをぶっこ抜きだぉ

[pukiwiki]
。。。って感じのタイトルは、もう古いでしょうか(汗

ちょっとした資料(スケジュール表的なものなど)をExcel (xlsファイル)で渡されたけれどOfficeを持ってない!ということで、PythonからExcelファイル中のデータを読み込んだり、逆にxlsファイルを書きだしたりできるPythonモジュールpyExceleratorを使ってみました。
(結局 OpenOffice.org使いましたが)

-[[pyExcelerator(sourceforge):http://sourceforge.net/projects/pyexcelerator/]]
–[[Excelを使わずExcelファイルを読み書きする:http://d.hatena.ne.jp/seraphy/20061206]]
こちらの記事を参考にさせていただきました

調子にのって、サンプルとして、[[東証の投資部門別売買状況:http://www.tse.or.jp/market/data/sector/index.html]]で配布されてるExcelファイルより、個人株主と外国人投資家の売買高の数字を読んでみます。
[/pukiwiki]

[pukiwiki]
わざわざ自前でやらずとも、経済番組に出てきますけど(汗

テストに使ったデータは[[投資部門別 株式売買状況 [株数] 2008年7月2週(7月7日:http://www.tse.or.jp/market/data/sector/J_stk2_080702.xls]]

***テンプレート(雛形)の作成
読み込みたいセルの値を 「$+ラベル」に変更し、”tmpl.xls”というファイル名で保存します($個人売 $個人買 などなど)

http://boxheadroom.com/wp/wp-content/uploads/2008/07/080725.gif

***サンプルコード
データ読み込み用元ファイル(J_stk1_080701.xls)と雛形(tmpl.xls)の内容を照らし合わせ、テンプレートのセルの値が「$+ラベル」の場合、元ファイルの同じ位置の値を読み込みます
_#!/usr/bin/env python
_# -*- coding: utf-8 -*-
_
_import pyExcelerator
_
_def test(fname
_ #,sheetName2={u”3市場1_2部等”:u”3市場1、2部等”}
_ ):
_ print fname
_ tmpl = pyExcelerator.parse_xls(“tmpl.xls”)
_ sheets = dict(pyExcelerator.parse_xls(fname))
_ for sheetName,sheet in tmpl:
_ #if sheetName in sheetName2 :
_ #sheetName=sheetName2[sheetName]
_
_ print u”シート名: %s” % sheetName
_ last=0; i=0; v=0
_ for row,col in sorted(sheet.keys()):
_ k=sheet[(row,col)]
_ if k.startswith(“$”):
_ last=v
_ v=sheets[sheetName][(row,col)]
_ v=int(“”.join(v.split(“,”)))
_ print u”%2d行%2d列: %s %s” % (row, col, k[1:],v)
_ i+=1
_ if i==2: #売り越し 買い越し
_ print “\t\t”,v-last
_ i=0
_ print
_# 実行
_test(“J_stk1_080701.xls”)
_

今回、テンプレート作成にOpenOffice.orgを使用しました。
OOoは、シート名中の読点を「 _ 」に変換してしまうので、その違いを吸収するための余分なコードが入ってます(コメントアウトしてあります)

***実行例
_J_stk1_080701.xls
_シート名: 東証1部
_24行43列: 個人売 1869350
_24行55列: 個人買 1960597
_ 91247
_24行67列: 外国人売 4234162
_24行79列: 外国人買 4144119
_ -90043
_
_シート名: 東証2部
_24行43列: 個人売 144762
_24行55列: 個人買 143877
_ -885
_24行67列: 外国人売 18164
_24行79列: 外国人買 18372
_ 208
_
_シート名: 東証マザーズ
_24行43列: 個人売 31844
_24行55列: 個人買 30870
_ -974
_24行67列: 外国人売 706
_24行79列: 外国人買 825
_ 119
_
_シート名: 3市場1、2部等
_24行43列: 個人売 2117365
_24行55列: 個人買 2209185
_ 91820
_24行67列: 外国人売 4295826
_24行79列: 外国人買 4206527
_ -89299
_

[/pukiwiki]

コメントを残す

メールアドレスが公開されることはありません。