Python 讀 EXCEL


from xlrd import open_workbook

開放excel檔 a.xlsx

wk = open_workbook('a.xlsx')

查看有哪些sheet

for s in wk.sheets():
    print "Sheet: $s has cols: $s and rows: $s" % (s.name, s.ncols, s.nrows)

讀第一個sheet 的每一列的資料

for r in range(wk.sheets()[0].nrows):
    print wk.sheets()[0].cell_value(r, 3) #第4欄
    print wk.sheets()[0].cell_value(r, 5) #第6欄



如果遇到合併格

s = wk.sheets()[0]
table = s.merged_cells
merCell = {}
for r in range(s.nrows):
    for t in table:
        if r>=t[0] and r< t[1]:
            if s.cell_value(r,0) != "":
                merCells[t] = s.cell_value(r,0)

因為s.merged_cells會給出,sheet中所有合併格範圍的list如下

[(1, 8, 0, 1), (48, 56, 0, 1), (39, 45, 0, 1), (8, 32, 0, 1), (45, 48, 0, 1), (85, 93, 0, 1), (93, 109, 0, 1), (56, 64, 0, 1), (83, 85, 0, 1), (32, 38, 0, 1), (77, 83, 0, 1), (64, 73, 0, 1), (73, 77, 0, 1)]

以第一個元素 (1,8,0,1)是指這個合併格的 row 是      1<= row < 8 , 0<=col < 1這個範圍。
所以我們做一個字典,merCell。以merged_cells的元素為key。

上面的結果就會 print merCells 就會看到
{(85, 93, 0, 1): u'Lta', (8, 32, 0, 1): u'LTb',...}
之後只要檢驗列與欄是否在合併格範圍,就可以查merCells得到要的值。




如此這般即可處理

留言

這個網誌中的熱門文章

python 找圖自動點擊

Python pyserial 抓取系統內的 COM PORT

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change