pygsheets无法修改谷歌表格日期格式的问题排查
解决pygsheets修改谷歌表格日期格式不生效的问题
我尝试用pygsheets将谷歌表格某列的日期格式从3/3/2023修改为Friday March 3, 2023,执行以下代码后,字号和垂直对齐属性生效,但日期格式完全没变化:
client = pygsheets.authorize(service_account_file="credentials.json") test_sheet = client.open(titles[0]) test_worksheets = test_sheet.worksheets() active = test_worksheets[0] model_cell = pygsheets.Cell("A1") model_cell.set_text_format("fontSize",18) model_cell.set_vertical_alignment(pygsheets.VerticalAlignment.MIDDLE) model_cell.set_number_format(pygsheets.FormatType.DATE, 'dddd+ mmmm yyy') pygsheets.DataRange('A2', 'A', worksheet=active).apply_format(model_cell)
排查出的问题原因
- 格式字符串错误:原代码中使用的
'dddd+ mmmm yyy'格式不符合谷歌表格的日期格式规则,正确的格式应为'dddd, mmmm d, yyyy'。 - 日期被识别为文本:日期转移列后开头带有单引号(比如
'3/3/2023'),导致谷歌表格将其识别为文本而非日期类型,格式规则无法作用于文本值。推测是pygsheets为保留原格式给非数值型日期自动添加了单引号,但批量更新时未自动移除。
解决方案
- 修正日期格式字符串:将
set_number_format的格式参数改为正确的'dddd, mmmm d, yyyy'。 - 批量转换文本日期为日期类型:先移除日期值前的单引号,将文本转换为可识别的日期格式后再写回表格,最后应用格式。
修正后的完整代码:
client = pygsheets.authorize(service_account_file="credentials.json") test_sheet = client.open(titles[0]) active = test_sheet.worksheets()[0] # 配置格式模板 model_cell = pygsheets.Cell("A1") model_cell.set_text_format("fontSize", 18) model_cell.set_vertical_alignment(pygsheets.VerticalAlignment.MIDDLE) # 使用正确的日期格式字符串 model_cell.set_number_format(pygsheets.FormatType.DATE, 'dddd, mmmm d, yyyy') # 处理A列的文本日期:移除前置单引号 date_values = active.get_values('A2', 'A', include_tailing_empty=False) processed_values = [] for row in date_values: if row and row[0].startswith("'"): # 去掉开头的单引号,让表格识别为日期 processed_values.append([row[0][1:]]) else: processed_values.append(row) # 将处理后的日期写回表格 active.update_values('A2', processed_values) # 给目标列应用格式 pygsheets.DataRange('A2', 'A', worksheet=active).apply_format(model_cell)
说明
- 先处理文本日期转为可识别的日期类型,再应用格式,确保格式规则能作用于日期值而非文本。
- 如果日期原本就是数值型日期(无单引号),只需要修正格式字符串即可生效。
内容的提问来源于stack exchange,提问作者Ramy
相关产品推荐
相关产品推荐

