可以请某人展示将数字格式应用于单元格的示例。例如,我需要科学的格式,形式就像'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'
我见过这个问题:Setting styles in Openpyxl 但它没有帮助,因为我不必更改任何其他格式设置。
答案 0 :(得分:39)
这个答案适用于openpyxl 2.0。 (previously accepted answer没有。)
number_format
可以直接更改。
给定的例子变为:
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet(title='testSheet')
_cell = ws.cell('A1')
_cell.number_format = '0.00E+00'
答案 1 :(得分:7)
注意:此答案适用于早期版本的openpyxl,但不适用于openpyxl 2.0
这是怎么做的:
_cell.style.number_format.format_code = '0.00E+00'
答案 2 :(得分:0)
对于openpyxl版本2.6.2: 请注意,浮动显示取决于在python shell,闲置或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()
但是请不要惊慌,因为当您使用MS-Excel或LibreOffice-Calc或Gnumeric重新打开电子表格时,将正确显示'0.000E + 00'格式。只要记得保存工作簿即可。