2015-04-13 2 views
1

Я пишу лист excel. Я хочу написать заголовок (с именами столбцов) и данные (числа с плавающей запятой с 2 ​​десятичными цифрами) с тем же сценарием.Openpyxl: записывать ячейки в другом формате

Для этого я использую этот кусок кода:

# Write the header 
    for i in xrange(len(header)): 
     sheet.cell(row=1,column=i+1).value = header[i] 

    # Write the data 
    for i in xrange(len(data)): 
     sheet.cell(row=2,column=i+1).style.number_format.format_code = '0.00E+00' 
     sheet.cell(row=2,column=i+1).value = float(data[i]) 

    book.save(os.path.join(folder,'excelReport.xlsx')) 

Это дает мне о исключением:

AttributeError: 'str' object has no attribute 'format_code' 

Я не уверен на 100%, что я делаю неправильно здесь.

+0

попытка напечатать 'sheet.cell (строку = 2, столбец = I + 1) .style.number_format' ли это строка? я не знаком с 'Openpyxl', но вы пытаетесь установить объект' format_code', который не существует, поскольку предыдущий объект является строкой. –

+0

Я попытаюсь, но, насколько я понимаю, 'sheet.cell (row = 2, column = i + 1)' ничего. Я имею в виду, что это просто пустая ячейка, ожидающая контента, потому что ранее я создали лист 'sheet = book.create_sheet()' – codeKiller

ответ

2

Просто установите числовой формат для ячейки:

sheet.cell(row=2,column=i+1).number_format = '0.00E+00'

Вы можете также, вероятно, избежать использования xrange для петель. enumerate(sequence, start) лучше, когда вам действительно нужно обращаться к отдельным ячейкам. Но если вы просто работаете с последовательностями, вы можете просто добавить их. Вы, вероятно, можете скопировать код, чтобы выглядеть примерно так:

Написать заголовок

sheet.append(header) 

# Write the data 
for row in data: 
    sheet.append([float(v) for v in row]) 
for cell in sheet.iter_rows(row=2): 
    cell.number_format = '0.00E+00' 
Смежные вопросы