Openpyxl设置数字格式(Openpyxl setting number format)

2019-06-28 06:33发布

请能有人告诉应用数字格式的单元格的一个例子。 例如,我需要科学的格式,形式是像“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风格 ,但它并没有帮助,因为我没有更改任何其他格式设置。

Answer 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'


Answer 2:

注意:这个答案与早期版本的openpyxl的工作,但不与openpyxl 2.0工作

这是如何做到这一点:

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


Answer 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的电子表格。 只记得保存工作簿。



文章来源: Openpyxl setting number format