2014-11-03 2 views
1

Можно ли изменить или добавить в существующий формат «на лету» в xlsxwriter? Мне нужна эта функциональность, поэтому я могу поддерживать несколько основных форматов и добавлять новые критерии в каждом конкретном случае.Как добавить форматы в существующие объекты формата «на лету» с помощью xlsxwriter

Например, в приведенном ниже коде я хотел бы добавить формат подчеркивания в dark_blue_header_format только в ячейке A2. Однако это приводит к некоторым неожиданным результатам, которые показаны на рисунке ниже. Я ожидал, что A1 и A3 будут синими с белым текстом 24 размера: и я ожидал, что A2 будет синим с белым текстом 24 размера и подчеркнуто.

import xlsxwriter 

workbook = xlsxwriter.Workbook('demo.xlsx') 
worksheet = workbook.add_worksheet() 

dark_blue_header_format = workbook.add_format({ 
    'bg_color': '#5081BB', 
    'font_color': '#FFFFFF', 
    'font_size': 24 
}) 

worksheet.set_column('A:A', 30) 

worksheet.write('A1', 'Company Name', dark_blue_header_format) 
worksheet.write('A2', 'Underlined Company Name', dark_blue_header_format.set_underline()) 
worksheet.write('A3', 'Company Name', dark_blue_header_format) 

workbook.close() 

enter image description here

Я посмотрел через formatting docs и я все, что может добавить форматы на лету не найден. Если функциональность set_whatever ведет себя как этот пример, я не понимаю, для чего это полезно.

Если невозможно добавить форматирование в существующие форматы «на лету», то какова наилучшая практика при создании множества уникальных форматов?

Спасибо!

ответ

1

Возможно ли изменить или добавить в существующий формат «на лету» в xlsxwriter?

В настоящее время нет.

docs С:

Каждый уникальный формат ячейки в электронной таблице XlsxWriter должен иметь соответствующий объект Format. Невозможно использовать формат с методом write(), а затем переопределить его для использования на более позднем этапе. Это связано с тем, что формат применяется к ячейке не в ее текущем состоянии, а в конечном состоянии. Рассмотрим следующий пример:

format = workbook.add_format({'bold': True, 'font_color': 'red'}) 
worksheet.write('A1', 'Cell A1', format) 

# Later... 
format.set_font_color('green') 
worksheet.write('B1', 'Cell B1', format) 

Ячейка A1 присваивается формат, который изначально имеет набор шрифтов в красный цвет. Тем не менее, цвет затем устанавливается на зеленый. Когда Excel отобразит ячейку A1, отобразится окончательное состояние формата, который в этом случае будет зеленым.

Это, вероятно, изменится на определенном этапе в будущем, когда будет возможно объединить и изменить форматы. Существует открытый feature request, который будет охватывать это, что будет частью большей модификации около separating data and formats.

В то же время наилучшей практикой при создании множества уникальных форматов является сохранение форматов в индексе, индексированных их свойствами.

+0

Отличная идея передовой практики. И спасибо, чтобы указать мне на запросы функций. – a15n