Форматирование числа так, чтобы нули были тире (-) с xlwt - PullRequest
0 голосов
/ 27 января 2012

Я пишу листы Excel с xlwt, и он отлично работает, за исключением одной мелочи. Я хотел бы отображать ноль в виде тире (-), как это происходит с учетом. Однако я не хочу, чтобы он показывал знак доллара, $, прежде всего, и я не хочу, чтобы он имел запятые в тысячах.

Я подумал, что это будет довольно легко решить, я просто захожу и устанавливаю формат в Excel на то, что мне нужно, затем просматриваю «Формат -> Пользовательский формат», чтобы получить точную строку формата. Это дает мне _(* (#,##0);_(* "-"_);_(@_) для использования (это не относится к запятым, но отображает нули в виде черточек и удаляет $). К сожалению, когда я использую эту строку в xlwt, она, кажется, сбрасывает ее на значение по умолчанию для учета: _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_). Я думаю, что это ошибка в xlwt, но кто-нибудь знает, есть ли способ обойти это, чтобы позволить мне делать то, что я хочу?

Edit: Не знаю, почему это работает, но моя проблема, кажется, решается удалением запятых из строки. Это меняется:

'_ (* #, ## 0 _); _ (* (#, ## 0); _ (* "-" ); (@ )' в ' (* ### 0 _); _ (* (### 0); _ (* "-" ); (@_)'

Я считаю, что это работает, потому что xlwt не видит его как пользовательский формат, когда вы просто удаляете $, а вместо этого записывает как учетную запись по умолчанию, но когда вы удаляете $ и запятые, он вставляет его в метод пользовательского формата что я и хочу.

В ответ Джону я использую их с атрибутом tablestyle.numformat. основной код будет:

style = xlwt.xlwt.XFStyle()

style.num_format_str = '_(* ###0_);_(* (###0);_(* "-"_);_(@_)'

Единственное, что я в идеале хотел бы изменить сейчас, это сделать так, чтобы отрицательные числа выглядели как -5, а не как бухгалтерия (5), но я думаю, что могу жить так, как сейчас. Было бы неплохо, если бы кто-то мог объяснить, как работают строки формата Excel, я вижу в них немного рифмы / причины, но в основном меня смущает эта длинная строка чисел, которую я просто вырезал и вставлял.

1 Ответ

0 голосов
/ 28 января 2012

Вот минимальный рабочий код.В выходной электронной таблице столбец A использует ваш исходный формат, B использует то, что вам сначала показалось нужным (формат учета), а столбец C дает вам формат без учета учета.

import xlwt
custom_fmts = (
    '_(* (#,##0);_(* "-");(@)',
    '_(#0_);(#0);"-"_)', # positive;negative;zero
    '#0;-#0;"-"', # positive;negative;zero
    )
xfs = [xlwt.easyxf('', fmt) for fmt in custom_fmts]
wb = xlwt.Workbook()
ws = wb.add_sheet('x')
for colx, xf in enumerate(xfs):
    for rowx, value in enumerate((1234567, 0, -1234567)):
        ws.write(rowx, colx, value, xf)

wb.save('demo_custom_format.xls') 

Вам может понравитьсяпрочитать учебник, к которому вы можете обратиться по этой ссылке .

Было бы неплохо, если бы кто-то мог объяснить, как работают строки формата Excel

Нет смысла рассказывать RTFM, потому что с тех пор об Excel 5.0 AFAIK руководства не было, но вы всегда можете HTF1K (нажать клавишу F1), затем ввести custom formats в поле поиска и затем FYN (следуйте за своим носом).

...