如何使用 gspread 获取正确的日期

问题描述 投票:0回答:1

如何使用 Python 的 gspread 获取电子表格值?

假设有一个单元格,因为指定了m/d作为单元格显示格式,所以看起来像1/1,但实际上包含2024/1/1。使用 get_all_values() 检索此单元格会返回“1/1”。 我想要实际值“2024/1/1”,而不是工作表上显示的值。 我该怎么办?

我将省略表单获取部分。

values = workbook.worksheet(sheet_name).get_all_values()

value =values[1][0] # 得到1/1

python google-sheets google-sheets-api gspread
1个回答
1
投票

问题和解决方法:

从您显示的图像、脚本和当前值中,我了解到您将

2024/01/01
的值作为日期对象放入单元格“A2”中。并且,单元格值以数字格式显示为
1/1

在当前阶段,当通过 Sheets API 检索该单元格值时,会检索

1/1
作为
valueRenderOption: FORMATTED_VALUE
的默认请求。当
valueRenderOption
更改为
UNFORMATTED_VALUE
时,检索
45292
的序列号。不幸的是,在现阶段,
2024/01/01
的输入值无法直接检索。因此,以下流程需要它。

  1. 使用
    valueRenderOption: UNFORMATTED_VALUE
    从单元格中检索序列号。
  2. 将序列号转换为日期对象。
  3. 转换日期格式。

当这个流程反映在你的展示脚本中时,下面的修改如何?

修改后的脚本:

values = workbook.worksheet(sheet_name).get_all_values(value_render_option="UNFORMATTED_VALUE")
value = values[1][0]
date = datetime.fromtimestamp((int(value) - 25569) * 86400) # Ref: https://stackoverflow.com/a/6154953
formatted = date.strftime('%Y/%m/%d') # or date.strftime('%Y/%-m/%-d')  # or date.strftime('%Y/%#m/%#d')
print(formatted)
  • 如果单元格“A2”有日期对象的

    2024/01/01
    1/1
    以数字格式显示,则运行此脚本时,
    formatted
    2024/01/01

  • 使用
  • from datetime import datetime

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.