Использование XLSXWRITER в Python: как вставить 27-значное число в ячейку и отобразить его как текст, а не как научное число

Я пишу Excel, используя пакет XLSXWRITER на Python. К ячейкам применяются форматы, и все это работает, за исключением одной ячейки, в которой присвоенное значение представляет собой 27-значную текстовую строку (извлеченную из какого-то источника).

Я прочитал Как применить формат «Текст» и «Учет» с помощью xlsxwriter. Предлагается установить числовой формат «@», но когда я пытаюсь:

WSFMT_TX_REFINFO          = wb.add_format({'num_format': '@'
                                         , 'align': 'right'
                                         , 'border_color': WS_TX_BORDERCOLOR
                                         , 'right': WS_TX_BORDERSYTLE
                                         })

и напишите ячейку с:

refdata = '001022002024080400002400105'
ws.write(wsRow, WS_COL_REF_INFO, refdata, WSFMT_TX_REFINFO)

Ячейка отображается как

1.041E+24

и в поле редактора как

1.041002024073E+24

Если я изменю спецификацию формата с '@' на 0, т. е. изменю

WSFMT_TX_REFINFO          = wb.add_format({'num_format': '@'

к

WSFMT_TX_REFINFO          = wb.add_format({'num_format': 0

ячейка отображается как

1022002024080400000000000

Обратите внимание, что цифры после 14-й заменяются нулями. В поле редактора это отображается как

1.0220020240804E+24

Что мне нужно: номер должен отображаться в виде 27-значной строки, точно так же, как в refdata. Примечание. В некоторых случаях refdata может содержать буквенно-цифровые строки, помимо чистых 27-значных строк.

Есть какой-нибудь намек?

Я использую ' для преобразования чисел в текст в Excel: ws.write(0, 0, '\'001022002024080400002400105'). Формат не применен.

rachel 08.08.2024 13:06

Когда вы пишете его как текст, он будет отображаться как строка цифр, поэтому в первом примере должно отображаться именно это «001022002024080400002400105». Только если оно было преобразовано в число, оно будет отображаться как 1.041E+24

moken 08.08.2024 13:15

@moken Да, должно, но это не так.

phunsoft 08.08.2024 14:08

Для меня это так, я попробовал ваш код ради интереса. Вы получите ошибку «число, сохраненное как текст» в ячейке, но вся строка отображается так, как написано. Код, который я использовал, приведен ниже в ответе вместе с результатом.

moken 08.08.2024 14:11

@rachel Я пробовала это, но тогда данные отображаются как '001022002024080400002400105, т. е. отображается апостроф.

phunsoft 08.08.2024 14:18

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

Mark Ransom 08.08.2024 14:23

Возможно, в этом случае лучше использовать write_string() вместо более общего write().

jmcnamara 08.08.2024 15:35

@MarkRansom Пробовал использовать только формат, устанавливая границу ячейки, т. е. 'num_format: '@' удаляя, но апостроф все равно отображается.

phunsoft 08.08.2024 20:43

@jmcnamara Вот оно! Спасибо. Я не знал о методе write_string(). Отлично работает. Если бы вы добавили свой комментарий в качестве ответа, я мог бы принять его.

phunsoft 08.08.2024 20:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
9
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я запустил тест с вашим кодом, и результат такой, как показано.

import xlsxwriter

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

WS_TX_BORDERCOLOR = 'blue'
WS_TX_BORDERSYTLE = 1

WSFMT_TX_REFINFO = workbook.add_format({'num_format': '@',
                                  'align': 'right',
                                  'border_color': WS_TX_BORDERCOLOR,
                                  'right': WS_TX_BORDERSYTLE
                                  })

wsRow = 5
wsCol = 3
refdata = '001022002024080400002400105'
worksheet.write(wsRow, wsCol, refdata, WSFMT_TX_REFINFO)

workbook.close()

Результат

Это работает и для меня. Не вижу разницы с моим (более обширным) кодом. Требует дальнейшего расследования.

phunsoft 08.08.2024 14:38
Ответ принят как подходящий

Возможно, в этом случае лучше использовать write_string() вместо более общего write().

Другие вопросы по теме