2016-12-07 19 views
0

我試圖將值2循環到給定範圍內的單元格中,但是當腳本運行時,我檢查了我的Excel表格單元格是空的。單元格中的Python openpyxl循環數據

from openpyxl import Workbook 

wb = Workbook() 

ws = wb.active 

n = 1 
ws.title = 'Day '+str(n) 

ws['A1'] = 42 


import datetime 

ws['A2'] = datetime.datetime.now() 

c = ws['A4'] 
ws['A4'] = 4 

d = ws.cell(row=4, column=2, value=10) 

cell_range = ws['A5':'A7'] 

for cell in cell_range: 
    cell.value = 2 

wb.save("sample.xlsx") 

這裏有什麼錯誤?

回答

2

(注:這個問題最初列出的有問題的任務作爲cell = 2

有兩個問題。

首先,爲了將值分配給一個小區分配給該單元的屬性value

cell.value = 2 

其次,for cell in cell_range實際上返回含有細胞的列的元組。所以遍歷正確的做法是:

for each_column in cell_range: 
    for cell in each_column : 
     cell.value = 2 

原因cell = 2不工作是分配使名稱指代對象。在作業之前,名稱cell指的是cell_range中的一個單元格。後綴,名稱cell稱爲整數對象2。名稱爲cell的單元對象不受此任務的影響。

但是,如果這是真的爲什麼ws['A4'] = 4工作?那是因爲ws['A4'] = 4不是任務!它實際上是一個方法調用ws.__setitem__('A4', 4)的語法糖。因爲它是一個方法調用,它可以實際上改變一個對象,而不是像在正常賦值中那樣僅僅引用一個對象。

+0

好吧,所以我補充說,現在我得到這個錯誤 – cojoe

+0

AttributeError:'元組'對象沒有'value'屬性 – cojoe

+0

@cojoe:我需要看你的代碼。這就是說'cell'指的是一個元組,但是你的代碼指出了另外一個元組。你可能正在像這樣對你的迭代進行枚舉(cell_range):'? –