2015-04-07 4 views
3

У меня возникли проблемы с записью в файл excel с использованием модуля openpyxl. До сих пор я могу написать этот код создаетсянаписать файл xlsx с помощью модуля openpyxl в python

from openpyxl.workbook import Workbook 
import datetime 

header = [u'Name', u'Email', u'Mobile', u'Current location',] 
new_data = [ 
       [u'name1', u'[email protected]', 9929283421.0, u'xxxx'], 
       [u'name2', u'[email protected]', 9994191988.0, u'xxxx'] 
      ] 
wb = Workbook() 
cur_date = str(datetime.date.today()) 
log_file = "%s/%s_%s_errorlog.xlsx" % (settings.MEDIA_ROOT, 
             os.path.splitext(file_name)[0], 
             cur_date) 
log_csv = wb.worksheets[0] 

for i in range(1, len(header) + 1): 
    log_csv.cell(row = 1 ,column = i).value = header[i - 1] 

wb.save(log_file) 

error_count = 0 
for each_row in new_data: 
    error_count += 1 
    for i in range(1, len(each_row) + 1): 
     log_csv.cell(row = error_count ,column = i).value = each_row[i - 1] 

wb.save(log) 

файла, но он поврежден, и я не смог открыть его с читателем файла Excel (LibreOffice), представленной ОС (Ubuntu). Также содержимое файла не читается. Не знаю, что я делаю неправильно

+0

Почему вы пытаетесь записать координаты, а не использовать 'ws.append()'? Создание диапазона по последовательности плохой Python. Вместо этого используйте 'enumerate (seq)'. –

ответ

7
from openpyxl.workbook import Workbook 

header = [u'Name', u'Email', u'Mobile', u'Current location',] 
new_data = [[u'name1', u'[email protected]', 9929283421.0, u'xxxx'], 
      [u'name2', u'[email protected]', 9994191988.0, u'xxxx']] 

wb = Workbook() 

dest_filename = 'empty_book.xlsx' 

ws1 = wb.active 

ws1.title = "range names" 

ws1.append(header) 

for row in new_data: 
    ws1.append(row) 

wb.save(filename = dest_filename) 

Я могу написать контент в xlsx, как указано выше.

+1

'для строки в new_data: ws.append (строка)' –

+0

Да. Я должен был использовать это в своем ответе. Ред. :) – WannaBeCoder