2016-12-07 4 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のセルの1つを指していました。その後、cellという名前は整数オブジェクト2を参照しました。 cellという名前のセルオブジェクトは、この割り当ての影響を受けません。

これが真実なら、なぜws['A4'] = 4が機能しますか? ws['A4'] = 4は割り当てられていないためです実際には、メソッドコールws.__setitem__('A4', 4)の構文的な砂糖です。それはメソッド呼び出しであるため、通常の割り当てのように名前をオブジェクトに参照させるのではなく、実際にオブジェクトを変更することができます。

+0

私はこれを追加しましたが、今はこのエラーが発生します – cojoe

+0

AttributeError: 'tuple'オブジェクトに属性 'value'がありません – cojoe

+0

@cojoe:あなたのコードを確認する必要があります。 'cell'はタプルを指しますが、あなたのコードはそうでないことを示しています。あなたはおそらくこのようにあなたの反復をやっていますか?列挙するセル(cell_range): '? –

関連する問題