。。。って感じのタイトルは、もう古いでしょうか(汗
ちょっとした資料(スケジュール表的なものなど)をExcel (xlsファイル)で渡されたけれどOfficeを持ってない!ということで、PythonからExcelファイル中のデータを読み込んだり、逆にxlsファイルを書きだしたりできるPythonモジュールpyExceleratorを使ってみました。
(結局 OpenOffice.org使いましたが)
- pyExcelerator(sourceforge)
- Excelを使わずExcelファイルを読み書きする
こちらの記事を参考にさせていただきました
- Excelを使わずExcelファイルを読み書きする
調子にのって、サンプルとして、東証の投資部門別売買状況で配布されてるExcelファイルより、個人株主と外国人投資家の売買高の数字を読んでみます。
わざわざ自前でやらずとも、経済番組に出てきますけど(汗
テストに使ったデータは投資部門別 株式売買状況 [株数] 2008年7月2週(7月7日
テンプレート(雛形)の作成
読み込みたいセルの値を 「$+ラベル」に変更し、tmpl.xlsというファイル名で保存します($個人売 $個人買 などなど)
サンプルコード
データ読み込み用元ファイル(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 "tt",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 -89299Tags: Python
Related posts
タグ: Python
