2015-10-04 5 views
1

Вот мой код:Экспорт данных в Excel

import xlwt 
file = 'C://Users/MM/Desktop/' 
wb = xlwt.Workbook() 
sh = wb.add_sheet('S1') 

d = [['Numbers','4,849,377','736,732','6,731,484']['Money','$43,253','$70,760','$49,774'],['Decnum','1.22','3.45','9.10']] 

for row, nums in enumerate(d): 
    for col, value in enumerate(nums): 
     sh.write(col, row , value) 

wb.save(file +'try.xls') 
print('Exported') 

Ниже перечислены вещи, которые я пытаюсь выполнить:

1) Все в первой строке должно быть жирным шрифтом и курсивом.

2) Ширина для всех столбцов должна быть одинаковой (фиксированной).

3) «Numbers», «Money» и «Decnum» дают мне ошибку в excel, говорящие мне преобразовать их в числа с зелеными стрелками ошибки.

4) Данные должны быть центрированы.

Вот пример прогноза

<img>http://i59.tinypic.com/dgu48.jpg<img>

ответ

2

Вы ищете replace()

>>> x = '1,2,3' 
>>> x.replace(',', '') 
'123' 

for row, nums in enumerate(d): 
    for col, value in enumerate(nums): 
     try: 
      value = int(value.replace(',', '')) 
     except: 
      pass 
     sh.write(col, row , value) 

Стиль форматирования:

style = xlwt.XFStyle() 

font = xlwt.Font() 
font.bold = True 
style.font = font 

sh.write(col, row , value, style=style) 

Суммировать:

style = xlwt.XFStyle() 

font = xlwt.Font() 
font.bold = True 
style.font = font 

for row, nums in enumerate(d): 
    for col, value in enumerate(nums): 
     try: 
      value = int(value.replace(',', '')) 
     except: 
      pass 
     if col == 0: 
      sh.write(col, row , value, style=style) 
     else: 
      sh.write(col, row , value) 

Другой подход заключается в использовании easyxf():

head = xlwt.easyxf('align: horiz center; font: bold 1,') 
common = xlwt.easyxf('align: horiz center;') 

for row, nums in enumerate(d): 
    for col, value in enumerate(nums): 
     try: 
      value = int(value.replace(',', '')) 
     except: 
      pass 
     if col == 0: 
      sh.write(col, row, value, style=head) 
     else: 
      sh.write(col, row, value, style=common) 

ширин & Heights

Добавить эту bedore wb.save()

import itertools 

col_width = 26 * 20 

try: 
    for i in itertools.count(): 
     sh.col(i).width = col_width 
except ValueError: 
    pass 

Настройка формата ячейки

Additional formats

num = xlwt.easyxf('align: horiz center;', '#,##') 

if col == 0: 
    sh.write(col, row, value, style=head) 
else: 
    if type(value) is int: 
     sh.write(col, row, value, style=num) 
    else: 
     sh.write(col, row, value, style=common) 

Полный фрагмент кода:

import itertools 
import xlwt 

wb = xlwt.Workbook() 
sh = wb.add_sheet('S1') 

d = [['Numbers', '4,849,377', '736,732', '6,731,484'], 
    ['Letters', 'a', 'b', 'c'], ['Colors', 'red', 'green', 'yellow']] 


head = xlwt.easyxf('align: horiz center; font: bold 1,') 
common = xlwt.easyxf('align: horiz center;') 
num = xlwt.easyxf('align: horiz center;', '#,##') 

for row, nums in enumerate(d): 
    for col, value in enumerate(nums): 
     try: 
      value = int(value.replace(',', '')) 
     except: 
      pass 
     if col == 0: 
      sh.write(col, row, value, style=head) 
     else: 
      if type(value) is int: 
       sh.write(col, row, value, style=num) 
      else: 
       sh.write(col, row, value, style=common) 

    col_width = 200 * 20 

    try: 
     for i in itertools.count(): 
      sh.col(i).width = col_width 
    except ValueError: 
     pass 

wb.save('tryx.xls') 
print 'Exported' 
+0

Хорошо. Я получаю первую строку, чтобы иметь жирный текст. Однако я не хочу заменять запятые. Мне нужно их держать. И, как насчет курсива, ширины столбца и центрирования данных? Как я уже сказал, он должен выглядеть как данные на изображении. – user5403501

+0

@ user5403501 обновлен с выравниванием –

+0

@ user3990145: У меня есть все, кроме расширения столбца. Я использовал второй подход к вашему коду; один с easyxf. Не могли бы вы рассказать мне, как расширить столбцы до определенной ширины? – user5403501

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