2016-12-07 5 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: объект 'tuple' не имеет атрибута 'value' – cojoe

+0

@cojoe: Мне нужно будет увидеть ваш код. Он говорит, что 'cell' относится к кортежу, но ваш код указывает на другое. Возможно, вы делаете свою итерацию следующим образом: 'для ячейки в перечислении (cell_range):'? –

Смежные вопросы