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



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

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

調子にのって、サンプルとして、東証の投資部門別売買状況で配布されてるExcelファイルより、個人株主と外国人投資家の売買高の数字を読んでみます。

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

テストに使ったデータは投資部門別 株式売買状況 [株数] 2008年7月2週(7月7日

テンプレート(雛形)の作成

読み込みたいセルの値を 「$+ラベル」に変更し、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 "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
		-89299
Tags:

Related posts

タグ:

コメントは受け付けていません。