ネットワーク上のExcelファイルをPythonで直接読み込む(xlrd)

1.python-excelライブラリをインストールする。

http://www.python-excel.org

先日、パッケージ管理システム『pip』をインストールしていたので、PythonExcel ファイルを 読み/書きするためのパッケージ xlrd, xlwt, xlutilsをpipでインストールする。

pip install xlrd xlwt xlutils

2.Pythonでネットワーク上のExcelファイルを直接読み込んで、セルの中身をそのままリストしてみる。

以下のテキストをexcel.pyとして保存し、

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import xlrd
import urllib

def read_xls(url):
    web = urllib.urlopen(url)
    webdata = web.read()
    web.close()

    book = xlrd.open_workbook(file_contents=webdata)
    sheet_1 = book.sheet_by_index(0)
    print 'sheet_name=', sheet_1.name.encode('utf-8')
    print 'ncols=', sheet_1.ncols
    print 'nrows=', sheet_1.nrows

    for col in range(sheet_1.ncols):
        print "----------------------------"
        for row in range(sheet_1.nrows):
            cell=sheet_1.cell(row,col)
            if cell.ctype == xlrd.XL_CELL_TEXT:
                print 'col=', col, 'row=', row, cell.value.encode('utf-8')
            else:
                print 'col=', col, 'row=', row, cell.value


if __name__ == '__main__':
    import sys
    if len( sys.argv ) > 1:
        url = sys.argv[1]

    read_xls(url)


コマンドラインから

./excel.py 'http://www.soumu.go.jp/johotsusintokei/field/data/gt010601.xls'

と打つと、総務省「分野別データ:通信:国際比較」のページ(http://www.soumu.go.jp/johotsusintokei/field/tsuushin08.html)にある「世界のインターネット利用者総数の推移」のExcel ファイル(http://www.soumu.go.jp/johotsusintokei/field/data/gt010802.xls)を直接読み込んで1シート目の各セルの値が、以下の形でプリントされます。

sheet_name= 世界のインターネット利用者総数の推移
ncols= 16
nrows= 7
----------------------------
col= 0 row= 0 世界のインターネット利用者総数の推移
col= 0 row= 1 
col= 0 row= 2 
col= 0 row= 3 利用者総数
col= 0 row= 4 
col= 0 row= 5 
col= 0 row= 6 (出典)「ITU Internet Report 2006: digital life」等
----------------------------
col= 1 row= 0 
col= 1 row= 1 
col= 1 row= 2 1991col= 1 row= 3 4.0
col= 1 row= 4 
col= 1 row= 5 
col= 1 row= 6 
----------------------------
col= 2 row= 0 
col= 2 row= 1 
col= 2 row= 2 1992col= 2 row= 3 7.0
col= 2 row= 4 
col= 2 row= 5 
col= 2 row= 6 
----------------------------
col= 3 row= 0 
col= 3 row= 1 
col= 3 row= 2 1993col= 3 row= 3 10.0
col= 3 row= 4 
col= 3 row= 5 
col= 3 row= 6 
----------------------------
col= 4 row= 0 
col= 4 row= 1 
col= 4 row= 2 1994col= 4 row= 3 21.0
col= 4 row= 4 
col= 4 row= 5 
col= 4 row= 6 
----------------------------
col= 5 row= 0 
col= 5 row= 1 
col= 5 row= 2 1995col= 5 row= 3 40.0
col= 5 row= 4 
col= 5 row= 5 
col= 5 row= 6 
----------------------------
col= 6 row= 0 
col= 6 row= 1 
col= 6 row= 2 1996col= 6 row= 3 74.0
col= 6 row= 4 
col= 6 row= 5 
col= 6 row= 6 
----------------------------
col= 7 row= 0 
col= 7 row= 1 
col= 7 row= 2 1997col= 7 row= 3 117.0
col= 7 row= 4 
col= 7 row= 5 
col= 7 row= 6 
----------------------------
col= 8 row= 0 
col= 8 row= 1 
col= 8 row= 2 1998col= 8 row= 3 145.0
col= 8 row= 4 
col= 8 row= 5 
col= 8 row= 6 
----------------------------
col= 9 row= 0 
col= 9 row= 1 
col= 9 row= 2 1999col= 9 row= 3 235.0
col= 9 row= 4 
col= 9 row= 5 
col= 9 row= 6 
----------------------------
col= 10 row= 0 
col= 10 row= 1 
col= 10 row= 2 2000col= 10 row= 3 390.0
col= 10 row= 4 
col= 10 row= 5 
col= 10 row= 6 
----------------------------
col= 11 row= 0 
col= 11 row= 1 
col= 11 row= 2 2001col= 11 row= 3 496.0
col= 11 row= 4 
col= 11 row= 5 
col= 11 row= 6 
----------------------------
col= 12 row= 0 
col= 12 row= 1 
col= 12 row= 2 2002col= 12 row= 3 623.0
col= 12 row= 4 
col= 12 row= 5 
col= 12 row= 6 
----------------------------
col= 13 row= 0 
col= 13 row= 1  
col= 13 row= 2 2003col= 13 row= 3 688.0
col= 13 row= 4 
col= 13 row= 5 
col= 13 row= 6 
----------------------------
col= 14 row= 0 
col= 14 row= 1 
col= 14 row= 2 2004col= 14 row= 3 875.0
col= 14 row= 4 
col= 14 row= 5 
col= 14 row= 6 
----------------------------
col= 15 row= 0 
col= 15 row= 1 (百万人)
col= 15 row= 2 2005col= 15 row= 3 965.0
col= 15 row= 4 
col= 15 row= 5 
col= 15 row= 6