Итак, я все понял. @stovfl спасибо за ваши подсказки, это привело меня к мысли, что искать и, как следствие, как решить мою проблему.
Оригинальный поток в StackOverflow доступен здесь: https://stackoverflow.com/a/29387450/5210159
Ниже приведен рабочий код:
def sanitizeDates(self):
for i in range(3, self.fileLength - 1):
# Check which cells should be sanitized and proceed
if isinstance(self.mainWs.cell(i, 4).value, float) and isinstance(self.mainWs.cell(i, 16).value, float):
print(str(self.mainWs.cell(i, 4).value) + " / " + str(self.mainWs.cell(i, 16).value) + " -> " + str(self.convertDate(self.mainWs.cell(i, 4).value)) + " / " + self.convertDate(self.mainWs.cell(i, 16).value))
self.mainWs.cell(i, 4).value = self.convertDate(self.mainWs.cell(i, 4).value)
self.mainWs.cell(i, 16).value = self.convertDate(self.mainWs.cell(i, 16).value)
elif isinstance(self.mainWs.cell(i, 4).value, float):
print(str(self.mainWs.cell(i, 4).value) + " -> " + str(self.convertDate(self.mainWs.cell(i, 4).value)))
self.mainWs.cell(i, 4).value = self.convertDate(self.mainWs.cell(i, 4).value)
elif isinstance(self.mainWs.cell(i, 16).value, float):
print(str(self.mainWs.cell(i, 16).value) + " -> " + str(self.convertDate(self.mainWs.cell(i, 16).value)))
self.mainWs.cell(i, 16).value = self.convertDate(self.mainWs.cell(i, 16).value)
def convertDate(self, dateToConvert):
# Thank you, StackOverflow <3
# https://stackoverflow.com/questions/29387137/how-to-convert-a-given-ordinal-number-from-excel-to-a-date
epochStart = datetime(1899, 12, 31)
if dateToConvert >= 60:
dateToConvert -= 1 # Excel leap year bug, 1900 is not a leap year
return epochStart + timedelta(days=dateToConvert)
После выполнения я получаю следующие результаты:
43899.89134259259 -> 2020-03-09 21:23:32
43900.9475 -> 2020-03-10 22:44:24