Формат чисел не работает должным образом в xlsxwriter - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь установить числовой формат без десятичных знаков для 2 созданных форматов xlsxwriter:

text_wrap = wb.add_format()
text_wrap.set_text_wrap()
text_wrap.set_align('vcenter')
text_wrap.set_font_name('Arial')
text_wrap.set_font_size(10)

num_format = copy_format(wb, text_wrap)
num_format.set_num_format('0')

total_num_format = copy_format(wb, text_wrap)
total_num_format.set_bg_color(bg_color)
total_num_format.set_num_format('0')

, где "wb" - это экземпляр класса WorkBook, copy_format - это пользовательская функция:

def copy_format(workbook, existing_format):
    """
    This function should be deleted when all reports with xlsxwriter
    will be rewritten to classes

    Give a format you want to extend and a dict of the properties you 
    want to extend it with, and you get them returned in a single format

    :rtype : xlsxwriter.format.Format
    """
    new_dict = {}
    for key, value in existing_format.__dict__.iteritems():
        if value:
            new_dict[key] = value
    del new_dict['escapes']

    return workbook.add_format(new_dict)

Итак, я применяю num_format для одного столбца с формулами в ячейках и total_num_format для ячейки с SUM этого столбца:

ws.write(0, 2, '=B1-A1', num_format)
ws.write(1, 2, '=B2-A2', num_format)
ws.write(2, 2, '=B3-A3', num_format)
ws.write(3, 2, '=B4-A4', num_format)

ws.write(4, 2, '=SUM(C1:C4)', total_num_format)

, где "ws" - это экземпляр класса WorkSheet.

И я получаю округленные результаты в первых 4 ячейках, как и ожидалось, но не округленные в последней ячейке (всего).

Это ошибка xlsxwriter, или я делаю что-то не так?Что я должен сделать, чтобы округлить мою общую ячейку?

Извините за мой плохой английский и заранее спасибо!

1 Ответ

0 голосов
/ 25 сентября 2019

Я обнаружил эту проблему , если вкратце, это ошибка xlsxwriter, обходной путь должен использовать 1 (как число) вместо '0':

total_num_format.set_num_format(1)

Надеюсь, это будетсэкономить чье-то время

...