Openpyxl - 我无法以时间格式 (h:mm) 正确设置单元格格式和总和值

问题描述 投票:0回答:2

openpyxl版本3.0.7,python版本3.8.8

我正在尝试将单元格格式设置为小时:分钟。通过阅读 openpyxl 文档的重新格式化数字: https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html

FORMAT_DATE_TIME3应该满足我的需要。它使用 BUILTIN_FORMATS(20),即 'h:mm'。但是,我的代码实现在电子表格上没有达到预期的结果。值按预期显示,但格式不正确。 我希望单元格格式为 h:mm,因此当我添加 1:02 和 1:58 时,我得到 3:00(3 小时)。我尝试了 2 种不同的方法来格式化单元格(meth 1 和 meth 2),并使用 meth 1 列的求和公式,但我还不太清楚。

如有任何帮助,我们将不胜感激,谢谢。

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import numbers

wb = Workbook()
ws =  wb.active

ws['A3'] = "Meth 1"
ws['A4'] = "1:02"
ws['A5'] = "1:58"
ws['A4'].number_format = numbers.FORMAT_DATE_TIME3
ws['A5'].number_format = numbers.FORMAT_DATE_TIME3
print('A4 number format = ', ws['A4'].number_format)
print('A5 number format = ', ws['A5'].number_format)

cell = ws.cell(row=7, column=1, value='= SUM(A{}:A{})'.format(4, 5))
cell.number_format = numbers.FORMAT_DATE_TIME3

ws['C3'] = "Meth 2"
cell = ws.cell(row=4, column=3, value="1:02".format(numbers.FORMAT_DATE_TIME3))
cell.number_format = numbers.FORMAT_DATE_TIME3
cell = ws.cell(row=5, column=3, value="1:58")
cell.number_format = numbers.FORMAT_DATE_TIME3

wb.save(filename = 'hours_mins.xlsx')

我已经打印了数字格式以验证它是否是所需的格式

A4 number format =  h:mm
A5 number format =  h:mm

生成excel输出

excel openpyxl time-format
2个回答
0
投票

您已将时间作为字符串输入。因此,数字的格式没有任何影响。您需要输入 datetime.time 对象或 datetime.timedelta 对象才能使格式生效,尽管默认情况下 openpyxl 会尝试正确设置它。

例如。

ws["A4"] = datetime.time(hours=1, minutes=2)

0
投票

time_style = NamedStyle(name="time_style", number_format="[$-F400]h:mm:ss AM/PM")

这对我使用 NamedStyle 有用

© www.soinside.com 2019 - 2024. All rights reserved.