如何将获取的单元格数据的值读取为日期Google Sheets API
问题内容:
我有一个电子表格,其日期格式设置为“ Jan 30”等,但具有实际的日期值。
我使用python
Google表格API
提取数据,如下所示:
def get_spreadsheet_sheets(service, spreadsheetId):
spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute()
dateCell = "C15"
for sheet in spreadsheet['sheets']:
sheetTitle = sheet['properties']['title']
rangeName = "%s!%s" % (sheetTitle, dateCell)
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheetId, range=rangeName).execute()
values = result.get('values',[])
值给我“ 1月30日”,我想实际读成1/30/2017
..我该怎么做?
更新
深入研究电子表格sheets.value.get
http文档
(与此处的python
api客户端方法参考相对应,我了解到可以将valueRenderOption
as设置为UNFORMATTED_VALUE
..
但是当我运行时,我得到了这个奇怪的数字Jan 30
:42765
这个数字到底是什么格式?我知道这不是unix时间戳b / c转换,返回的日期不合理
更新2:解决方法
此代码有效,但使用python日期格式(它还假定年份为当前年份。但是显然并非总是如此):
def get_spreadsheet_sheets(service, spreadsheetId):
spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute()
dateCell = "C15"
for sheet in spreadsheet['sheets']:
sheetTitle = sheet['properties']['title']
rangeName = "%s!%s" % (sheetTitle, dateCell)
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheetId, range=rangeName).execute()
values = result.get('values',[])
dateStr = "%s %s" % (values[0][0], datetime.date.today().year)
cellDate = datetime.datetime.strptime(dateStr, '%b %d %Y')
print(cellDate)
问题答案:
“怪异数字”被称为“序列化日期时间值”或“日期序列值”。显示为日期(yyyy-mm-dd)的0值为 1899-12-30
。整数是天,小数是小时,分钟等。
参考文献:
- TO_DATE,Google Spreadsheet内置函数
- Google表格> API v4指南中的DateTime序列号,文章部分
- Google Sheet API V4(Java)在单元格中附加日期,堆栈溢出问答
h / t山姆·柏林