Openpyxl设置数字格式

Ren*_*sis 26 python 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'
Run Code Online (Sandbox Code Playgroud)

或者这(我在这里尝试使用一些预定义的数字格式,我也看到内置工程格式,但不知道如何访问它:

    nf = oxl.style.NumberFormat.FORMAT_NUMBER_00
    _cell.style.number_format = nf
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都得到同样的错误:

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'
Run Code Online (Sandbox Code Playgroud)

我已经看到了这个问题:在Openpyxl中设置样式 但它没有帮助,因为我不必更改任何其他格式设置.

qry*_*sch 45

这个答案适用于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'
Run Code Online (Sandbox Code Playgroud)

  • 实际上,以下对我有用:`_ cell.number_format ='0'``_cell.value = int(x)` (4认同)

Ren*_*sis 7

注意:此答案适用于早期版本的openpyxl,但不适用于openpyxl 2.0

这是怎么做的:

    _cell.style.number_format.format_code = '0.00E+00' 
Run Code Online (Sandbox Code Playgroud)


Bra*_*len 7

要使用 openpyxl 版本 3 (v3.0.9) 直接格式化单元格,需要以下代码:

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet(title='testSheet')

_cell = ws['A1']
_cell.number_format = '0.00E+00'
Run Code Online (Sandbox Code Playgroud)

单元格可以直接格式化,如下所示:

ws['A1'].number_format = '0.00E+00'
Run Code Online (Sandbox Code Playgroud)

该文档显示了各种可用的数字格式,并且有很多: https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html