Как получить Excel DateTime в виде числа FLOAT, а не «datetime.datetime» в xlwings? - PullRequest
2 голосов
/ 15 января 2020

Мой код, как показано ниже, и файл text.xlsx выглядит так: text.xlsx file screenshot.

import xlwings as xw
import datetime

app = xw.App(visible=False,add_book=False)
file_path = r'D:\test.xlsx'
wb = app.books.open(file_path)
sht = wb.sheets[0]
cell = sht.range((1, 1)).value
print(cell)

wb.close()
app.quit()

В тестовом файле дата и время в «А1» составляют (1895, 10, 24, 23, 2, 24) , что в Excel хранится как - 1528.96 , но мне сейчас наплевать на эту дату и время, я просто хочу получить номер Excel -1528.96 в моем коде, но это не удалось.

Печать сообщения is:

1895-10-24 23:02:24

Ожидаемое значение:

-1528.96

Также пробовали: { ссылка }, но результат равен -1527.04

Большое спасибо за любую подсказку!

1 Ответ

2 голосов
/ 16 января 2020

Каноническим способом получения основного числа с плавающей точкой из даты в Excel будет вызов свойства value2. К сожалению, мы еще не реализовали это в xlwings, поэтому вам нужно перейти на pywin32, если вы используете Windows:

sht.range((1, 1)).api.Value2

Подробнее о том, как обрабатывать недостающие функции, читайте здесь : http://docs.xlwings.org/en/stable/missing_features.html

Синтаксис Windows для .api на самом деле является синтаксисом pywin32, который, опять же, почти такой же, как официальный способ VBA. В вашем конкретном случае c вы можете обратиться к официальным документам Microsoft для Value2: https://docs.microsoft.com/en-us/office/vba/api/excel.range.value2

...