Формат номера параметра Openpyxl - программирование
Подтвердить что ты не робот

Формат номера параметра Openpyxl

Может, кто-нибудь покажет пример применения числового формата к ячейке. Например, мне нужен научный формат, форма будет похожа на '2.45E + 05', но я не могу понять, как это сделать в openpyxl.

Я пытался несколькими способами, но все они сообщают об ошибках при сохранении книги.

например:

    import openpyxl as oxl

    wb = oxl.Workbook()
    ws = wb.create_sheet(title='testSheet')
    _cell = ws.cell('A1')
    _cell.style.number_format = '0.00E+00'

или это (здесь я пытаюсь использовать некоторые из предопределенных числовых форматов, я также видел, что во встроенных программах есть инженерный формат, но я не знаю, как получить к нему доступ:

    nf = oxl.style.NumberFormat.FORMAT_NUMBER_00
    _cell.style.number_format = nf

В обоих случаях я получаю одну и ту же ошибку:

C:\Python27\openpyxl\cell.pyc in is_date(self)
    408         """
    409         return (self.has_style
--> 410                 and self.style.number_format.is_date_format()
    411                 and isinstance(self._value, NUMERIC_TYPES))

AttributeError: 'str' object has no attribute 'is_date_format'

Я видел этот вопрос: установка стилей в Openpyxl, но это не помогает, потому что мне не нужно изменять какие-либо другие параметры форматирования.

4b9b3361

Ответ 1

Этот ответ работает с openpyxl 2.0. (Ранее принятого ответа нет.)

number_format может быть изменено напрямую.

Данный пример становится:

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet(title='testSheet')
_cell = ws.cell('A1')
_cell.number_format = '0.00E+00'

Ответ 2

Примечание: этот ответ работал с более ранними версиями openpyxl, но не работает с openpyxl 2.0

Вот как это сделать:

    _cell.style.number_format.format_code = '0.00E+00' 

Ответ 3

Для openpyxl версии 2.6.2: обратите внимание, что отображение с плавающей запятой зависит от величины, когда в оболочке Python, или в режиме ожидания, или в сеансе ipython,

>>> wb = load_workbook('tmp.xlsx')
>>> ws = wb[wb.sheetnames[0]]
>>> c21 = ws.cell(2,1)
>>> c21.value
'43546'
>>> c21.value = int(c21.value)
>>> c21.value
43546
>>> c21.value = 134352345235253235.235235
>>> c21.number_format = '0.000E+00'
>>> c21.value
1.3435234523525323e+17
>>> c21.value = 534164134.6643
>>> c21.value
534164134.6643
>>> wb.save('tmp_a.xlsx')
>>> wb.close()

Но не расстраивайтесь, потому что формат "0,000E + 00" будет отображаться правильно, когда вы снова откроете электронную таблицу в MS-Excel или LibreOffice-Calc или Gnumeric. Просто не забудьте сохранить рабочую книгу.