1. 程式人生 > >python如何獲取多個excel單元格的值

python如何獲取多個excel單元格的值

load 解決 info ace 多層嵌套 traceback spa 數據 多個

一. 獲取多個單元格的值報錯:AttributeError: ‘tuple‘ object has no attribute ‘value‘

需要讀取的sample.xlsx

技術分享圖片

代碼讀取的是A3:B10之間的單元格

from openpyxl import load_workbook

wb = load_workbook(r"D:\python_workshop\python6\study\sample.xlsx")
sh = wb["Sheet"]

print(sh["A3":"B10"].value)


運行結果:
Traceback (most recent call last):
  File 
"D:/python_workshop/python6/study/demo.py", line 8, in <module> print(sh["A3":"B10"].value) AttributeError: ‘tuple‘ object has no attribute ‘value‘

二. 如何解決

上面報錯信息是,元組對象沒有屬性"value",我們先來看一下print(sh["A2":"B10"]),得到的是一個元組,比較有意思的是,元組中的每一項也是一個元組,這個元組裏存儲的是每一行的單元格對象:相當於 元組(A3: B10) ——> 第三行:元組(A3: B3),第四行:元組(A4: B4)...第十行:元組(A10: B10)——>每一個單元格對象

print(sh["A3":"B10"])


運行結果:
((<Cell Sheet.A3>, <Cell Sheet.B3>), (<Cell Sheet.A4>, <Cell Sheet.B4>), (<Cell Sheet.A5>, <Cell Sheet.B5>), (<Cell Sheet.A6>, <Cell Sheet.B6>), (<Cell Sheet.A7>, <Cell Sheet.B7>), (<Cell 
Sheet.A8>, <Cell Sheet.B8>), (<Cell Sheet.A9>, <Cell Sheet.B9>), (<Cell Sheet.A10>, <Cell Sheet.B10>))

這種多層嵌套的形式,我們要想獲得最裏面單元格對象,就要用到雙層for循環:

for item in sh["A3":"B10"]:            #item表示每一行的單元格元組
    for cell in item:                  #cell表示每一行的每一個單元格對象
        print(cell)                    #打印出每個單元格對象


運行結果:
<Cell Sheet.A3>
<Cell Sheet.B3>
<Cell Sheet.A4>
<Cell Sheet.B4>
<Cell Sheet.A5>
<Cell Sheet.B5>
<Cell Sheet.A6>
<Cell Sheet.B6>
<Cell Sheet.A7>
<Cell Sheet.B7>
<Cell Sheet.A8>
<Cell Sheet.B8>
<Cell Sheet.A9>
<Cell Sheet.B9>
<Cell Sheet.A10>
<Cell Sheet.B10>

得到單元格對象就好辦了,只需要單元格對象.value,我們就可以獲取單元格值。試試按照excel中的形式打印,得到的結果看起來很美觀:

#用enumerate包裝一個可叠代對象,可以同時使用索引和叠代項,在叠代的同時獲取叠代項所在位置時非常方便
for index, item in enumerate(sh["A3":"B10"]):
    if index > 0:
        print("\n")
    for cell in item:
        print(cell.value, end=" ")


運行結果:
2018-05-10 電影 

hello world 小說 

hi 數據 

stop 美團 

bike 花生 

中國 電視 

測試 連續劇 

深圳 廣告 

python如何獲取多個excel單元格的值