2012-01-27 3 views
0

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

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

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

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

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

В ответ на сообщение John, I используя их с t атрибут tablestyle.numformat. базовый код будет:

style = xlwt.xlwt.XFStyle() 

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

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

+1

«когда я использую эту строку в xlwt» ничего не говорит. Измените свой вопрос, чтобы показать минимальный код, который будет воспроизводить вашу проблему. –

ответ

0

Здесь это минимальный рабочий код. В выходной таблице столбец 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') 

Вы можете как прочитать учебник, который вы можете получить доступ через this link.

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

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