我在Linux中开发的python脚本在Linux中运行良好。它使用openpyxl迭代Excel文件中的单元格,将值与列表进行比较,并计算添加不同timedelta对象所花费的总时间(以秒为单位)。到目前为止还不错
但是这个脚本在我工作时使用的Windows笔记本电脑上不起作用。安装的是Python 3.8.5。我得到的错误是:
File "Worktypes", line 54, in <module>
ndcluren += int(f.total_seconds())
AttributeError: 'datetime.datetime' object has no attribute 'total_seconds
脚本中的原始代码是:
for j in range(6):
facturen = 0
decluren = 0
ndcluren = 0
resturen = 0
for i in range(5,30):
e = sheet2.cell(row = i, column = 1).value
f = sheet2.cell(row = i, column = j+5).value
if f:
if e in fact:
facturen += int(f.total_seconds())
elif e in decl:
decluren += int(f.total_seconds())
elif e in ndcl:
ndcluren += int(f.total_seconds())
else:
resturen += int(f.total_seconds())
sheet4.cell(row = 2, column = j+3).value = facturen / 3600
sheet4.cell(row = 3, column = j+3).value = decluren / 3600
sheet4.cell(row = 4, column = j+3).value = ndcluren / 3600
sheet4.cell(row = 5, column = j+3).value = resturen / 3600
有点令人惊讶的是,对于“facturen”和“decluren”,脚本可以处理总的_seconds(),但是对于ndcluren则失败了。这使我认为错误在excel电子表格中。但我找不到任何奇怪或特别的东西。更改单元格格式也不起作用
我已经在这上面花了好几个小时了。谷歌的迹象表明,该脚本使用python2而不是python3。但在强制使用python3之后,我在Windows上也出现了这个错误
已解决
结果有两个问题在起作用
for j in range(6):
facturen = 0
decluren = 0
ndcluren = 0
resturen = 0
for i in range(5,30):
naam = sheet2.cell(row = i, column = 1).value
cell = sheet2.cell(row = i, column = j+5)
if cell.value:
if isinstance(cell.value, datetime.time):
date = datetime.datetime.strptime('1899-12-31', '%Y-%m-%d').date()
s = datetime.datetime.combine(date, cell.value)
s = s-datetime.datetime(1899,12,31)
else:
s = cell.value-datetime.datetime(1899,12,31)
if naam in fact:
facturen += int(s.total_seconds())
elif naam in decl:
decluren += int(s.total_seconds())
elif naam in ndcl:
ndcluren += int(s.total_seconds())
else:
resturen += int(s.total_seconds())
sheet4.cell(row = 2, column = j+3).value = facturen / 3600
sheet4.cell(row = 3, column = j+3).value = decluren / 3600
sheet4.cell(row = 4, column = j+3).value = ndcluren / 3600
sheet4.cell(row = 5, column = j+3).value = resturen / 3600
仍然不明白为什么Windows需要额外的代码行,而Linux上的python却不需要。但至少我的问题解决了
^{} is an instance method of ^{} objects ,而不是
datetime
对象。这可能是因为您的电子表格“ndcluren”持续时间单元格没有正确设置openpyxl
来处理它们;有关更多信息,请参阅openpyxl
文档的Handling timedelta values部分相关问题 更多 >
编程相关推荐