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

Openpyxl - I can't set cell format and sum values correctly in time format (h:mm)

openpyxl 版本 3.0.7,python 版本 3.8.8

我正在尝试将单元格格式化为 hours:minutes。通过阅读 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 种不同的方法来格式化单元格(方法 1 和方法 2),使用方法 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 output produced:

您已将时间输入为字符串。因此,数字格式无效。您需要输入 datetime.time 对象或 datetime.timedelta 对象以使格式生效,但默认情况下 openpyxl 会尝试正确设置它。

例如

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