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

为何通过Apps Script设置的Google Sheets时区未在表格设置中同步?

Google Sheets 编程设置时区显示异常问题

问题描述

我通过Google Apps Script编程设置Google Sheets时区,代码如下:

function setTimezone() {
  const name = 'test';
  const file = getFileByName(name);
  const ss = SpreadsheetApp.open(file);
  const timeZone = 'Europe/Berlin';
  ss.setSpreadsheetTimeZone(timeZone);
  Logger.log(ss.getSpreadsheetTimeZone());
}

function getFileByName(filename) {
  const files = DriveApp.getFilesByName(filename);
  while (files.hasNext()) {
    let file = files.next();
    if (file.getName() === filename && file.getMimeType() == MimeType.GOOGLE_SHEETS) {  
      return file;
    }
  }
  return null; 
}

出现以下异常:

  • 设置timeZone = 'Europe/Berlin'时,日志输出显示时区已正确设置,但表格「文件>设置」界面中时区显示为空字符串。
  • 设置timeZone = 'Arctic/Longyearbyen'时,「文件>设置」界面显示为柏林时区,而非预期的Longyearbyen时区。

已知官方文档要求使用Joda.org指定的长格式时区,预期编程设置的时区与表格设置界面显示一致。

问题原因

  1. 前端显示兼容性问题:部分符合Joda格式的时区ID,后台能正确生效,但Google Sheets前端界面无法匹配对应的本地化显示名称,导致显示为空。Europe/Berlin属于这类ID。
  2. 时区偏移合并显示:Arctic/Longyearbyen与柏林时区的UTC偏移完全一致(UTC+1/UTC+2),前端界面会优先显示该偏移对应的通用时区名称(柏林),但后台实际时区仍为Arctic/Longyearbyen。

解决方法

1. 使用界面兼容的时区ID

手动在表格「文件>设置」中选择目标时区,然后运行以下脚本获取界面支持的时区ID:

function getValidTimezoneId() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  Logger.log(ss.getSpreadsheetTimeZone());
}

用这个获取到的ID进行编程设置,即可保证前端界面显示与后台设置一致。

2. 刷新页面清除缓存

设置完成后,刷新Google Sheets页面,避免界面缓存导致显示不更新。

3. 接受偏移一致时区的显示逻辑

对于与通用时区偏移一致的小众时区,前端会显示通用时区名称,这是Google Sheets的默认显示逻辑,后台实际时区设置仍生效,不影响时间计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:43:10