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

如何使用gspread一次性更新多个Google Sheets表格

问题说明

需要通过Python实现单次输入数据,自动同步填充到多个Google Sheets电子表格的效果,目前尝试的所有实现方案均无法正常生效,已编写的代码见截图:
当前已编写的代码截图

可直接落地的实现方案

前置检查(90%的写入失效都是这步漏做)

  • 前往Google Cloud控制台启用Google Sheets API、Google Drive API
  • 为服务账号生成JSON格式的密钥文件
  • 打开每一个需要同步数据的目标Google表格,点击右上角「共享」,把服务账号的邮箱添加为协作者,权限设置为编辑者,缺这步任何写入操作都会被权限拦截

依赖安装

使用封装更完善的gspread库操作表格,比原生API客户端少踩很多参数坑,先安装依赖:
pip install gspread oauth2client

可直接运行的同步代码

import gspread
from oauth2client.service_account import ServiceAccountCredentials

# 接口权限范围配置,不要随意修改
AUTH_SCOPE = [
    "https://spreadsheets.google.com/feeds",
    "https://www.googleapis.com/auth/drive"
]
# 替换为你自己下载的服务账号密钥文件本地路径
KEY_FILE_PATH = "your_service_account_secret.json"

def batch_sync_sheets(write_data, sheet_id_list, worksheet_name="Sheet1", start_cell="A1"):
    """
    将同一份数据批量写入多个Google表格
    :param write_data: 待写入内容,支持单个值(字符串/数字)、二维列表(批量写入多行列)
    :param sheet_id_list: 所有目标表格的ID列表,ID可从表格URL的/d/字段后提取
    :param worksheet_name: 要写入的工作表名称,默认为初始创建的Sheet1
    :param start_cell: 写入起始单元格位置,默认为A1
    """
    # 初始化认证客户端
    creds = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE_PATH, AUTH_SCOPE)
    gc = gspread.authorize(creds)

    for sheet_id in sheet_id_list:
        try:
            # 打开目标表格、定位工作表
            spreadsheet = gc.open_by_key(sheet_id)
            worksheet = spreadsheet.worksheet(worksheet_name)
            # 根据数据类型选择写入方法
            if isinstance(write_data, list):
                # 批量写入多单元格时,指定USER_ENTERED参数和手动输入效果一致,会自动识别公式、日期格式
                worksheet.update(start_cell, write_data, value_input_option="USER_ENTERED")
            else:
                # 单个值写入
                worksheet.update_acell(start_cell, write_data)
            print(f"表格ID:{sheet_id} 写入完成")
        except Exception as e:
            print(f"表格ID:{sheet_id} 写入失败,错误:{str(e)}")

if __name__ == "__main__":
    # 示例:写入单个值
    content = "这是要同步的测试内容"
    # 示例:批量写入多行列,传二维列表即可
    # content = [
    #     ["序号", "名称", "数值"],
    #     [1, "测试项1", 100],
    #     [2, "测试项2", 200]
    # ]
    # 替换为你所有需要同步的目标表格ID
    target_sheet_ids = [
        "替换为第一个表格的ID",
        "替换为第二个表格的ID",
        "替换为第三个表格的ID"
    ]
    batch_sync_sheets(content, target_sheet_ids)

之前代码失效的常见排查点

  • 如果用原生Google API客户端写入,必须传入valueInputOption="USER_ENTERED"参数,否则默认参数会导致内容识别异常,看起来像没写入成功
  • 不要混用认证方式:服务账号认证不需要弹浏览器授权,OAuth个人号认证第一次运行必须走完授权流程,且要勾选编辑权限
  • 批量写入时传入的数据必须是二维列表结构,行列维度和目标写入区域匹配,否则API会直接返回参数错误
  • 确认目标表格ID填写正确,不要把整个URL当成ID传入,ID是URL中/d/和/edit之间的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:39:07