Python で、Excel を読み込むメモ xlrd 使用

PythonExcel を読み込む xlrd の解説はネットでたくさん見つかるのだが、やはり書いてみないと習得できない。

Excel ファイルのサンプル、 sample.xlsx が以下の様になっているとする。

Name value 開始日
あいう 242 2018/11/06
ABCD 108 2018/11/07
XYZ 47 2018/11/08

まずは、これを読み込むスタンダードな簡単なスクリプト

# -*- coding: utf-8 -*-
import xlrd

book = xlrd.open_workbook('sample.xlsx')
sheet = book.sheet_by_index(0)
for row in range(1, sheet.nrows):
    print("%s %d %s" % (sheet.cell_value(row, 0), sheet.cell_value(row, 1), sheet.cell_value(row, 2) ) )

1行目はヘッダだから読み飛ばしてる。
cell_value(row, col) は、cell(row, col).value でも同じ。
上の結果は、

あいう 242 43410.0
ABCD 108 43411.0
XYZ 47 43412.0

と、日付が小数点になってしまう。
セルのタイプをチェックする。
sheet.cell_type(row, col) もしくは、sheet.cell(row, col).ctype で取得できる値は、
API Reference — xlrd 1.1.0 documentation を参照すると、

0 空セル
1 テキスト文字列(Unicode string)
2 数値(float)
3 日付(float)

これに従いセルをチェックすると日付のセルは、 3=日付(float) である。
日付をなんとか、yyyy/MM/dd の書式にしたいので、
https://qiita.com/nezumi/items/23c301c661f5e9653f19
を参考にさせてもらい、、

# -*- coding: utf-8 -*-
import xlrd

def excel_date(num):
    from datetime import datetime, timedelta
    return(datetime(1899, 12, 30) + timedelta(days=num)).strftime("%Y/%m/%d")

book = xlrd.open_workbook('sample.xlsx')
sheet = book.sheet_by_index(0)
for row in range(1, sheet.nrows):
    str = "'%s',  %d, TO_DATE('%s','YYYY/MM/DD')" % (
        sheet.cell(row, 0).value,
        sheet.cell(row, 1).value,
        excel_date(sheet.cell(row, 2).value)
        )
    print(str)

結果、

'あいう',  242, TO_DATE('2018/11/06','YYYY/MM/DD')
'ABCD',  108, TO_DATE('2018/11/07','YYYY/MM/DD')
'XYZ',  47, TO_DATE('2018/11/08','YYYY/MM/DD')

と、まあ、とりあえず、めでたし、めでたし。