You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的gspread获取表格实际日期值而非显示值

解决gspread获取单元格实际存储日期值的问题

默认情况下,get_all_values()方法返回的是单元格格式化后的显示值(比如设置m/d格式后显示的"1/1")。要获取单元格存储的实际日期值,需要通过指定渲染选项或直接调用Sheets API来实现,以下是两种可行方案:

方案一:获取原始序列号并转换为日期

通过指定value_render_option='UNFORMATTED_VALUE'获取单元格的原始存储值(日期会以Excel/Sheets的序列号形式返回,代表从1899年12月30日起的天数),再将序列号转换为目标格式的日期字符串:

import datetime

# 获取未格式化的原始值(日期返回序列号)
values = workbook.worksheet(sheet_name).get_all_values(value_render_option='UNFORMATTED_VALUE')
serial_number = values[1][0]

# 将序列号转换为日期对象
# Sheets日期基准为1899-12-30(兼容Excel的历史bug)
date_obj = datetime.datetime(1899, 12, 30) + datetime.timedelta(days=serial_number)

# 格式化为"YYYY/M/D"格式(Windows用%#m,Linux/macOS用%-m去除前导零)
actual_value = date_obj.strftime("%Y/%#m/%#d")
print(actual_value)  # 输出:2024/1/1

方案二:直接调用Sheets API获取日期格式值

利用gspread底层的API调用能力,指定valueRenderOption='DATE_TIME'直接获取标准日期格式,再转换为所需的字符串格式:

import datetime

# 定义目标单元格范围(示例为第2行第1列,对应A2)
spreadsheet_id = workbook.id
range_name = f"{sheet_name}!A2"

# 调用Sheets API获取日期格式数据
response = workbook.client.request(
    "get",
    f"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_id}/values/{range_name}",
    params={"valueRenderOption": "DATE_TIME"}
)

# 提取日期并格式化为目标样式
date_str = response.json()['values'][0][0]
date_obj = datetime.datetime.fromisoformat(date_str)
actual_value = date_obj.strftime("%Y/%#m/%#d")
print(actual_value)  # 输出:2024/1/1

补充:单个单元格的快速获取

如果仅需获取单个单元格的实际值,也可以使用cell()方法指定渲染选项:

import datetime

cell = workbook.worksheet(sheet_name).cell(2, 1, value_render_option='UNFORMATTED_VALUE')
serial_number = cell.value
date_obj = datetime.datetime(1899, 12, 30) + datetime.timedelta(days=serial_number)
actual_value = date_obj.strftime("%Y/%#m/%#d")

内容的提问来源于stack exchange,提问作者apricot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:00:18