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

如何使用Python将本地CSV文件内容追加至现有Google Sheet

错误根因

当前报错是因为你直接将Pandas DataFrame对象传递给了Google Sheets API的请求体,API无法将DataFrame序列化为JSON格式;同时你使用了错误的请求体字段结构,values.append接口要求的是values字段而非data字段。

最简实现方案(复用已导入的gspread库,代码更简洁)

你已经导入了gspread库,不需要直接调用底层的googleapiclient接口,用gspread封装好的追加方法更不易出错,完整修正代码如下:

import pandas as pd
from oauth2client.service_account import ServiceAccountCredentials
import gspread as gs

scope = ["https://spreadsheets.google.com/feeds", 'https://www.googleapis.com/auth/spreadsheets',
         "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
# 配置路径
imp_dir = "C:\\Users\\SRevelle\\Google Drive"
credentials = ServiceAccountCredentials.from_json_keyfile_name(f'{imp_dir}\\client_secret.json', scope)
client = gs.authorize(credentials)

# 读取本地CSV
df = pd.read_csv(f'{imp_dir}\\data.csv')

# 打开目标Google Sheet
spreadsheet_id = '1_XXXXXXXXXXXdwEOkETjEI0HrdP5M5Jh4XXXXXXXXXX'
sheet = client.open_by_key(spreadsheet_id).worksheet('Test')

# DataFrame转二维列表:不需要追加表头就用当前写法,需要加表头就改为 values = [df.columns.tolist()] + df.values.tolist()
values = df.values.tolist()

# 追加到表格末尾,保留原有数据
sheet.append_rows(values, value_input_option='USER_ENTERED', insert_data_option='INSERT_ROWS')

若要保留原有googleapiclient调用逻辑,仅需修改请求体构造部分即可

# 将DataFrame转为API可识别的二维列表
values = df.values.tolist()

request = service.spreadsheets().values().append(
    spreadsheetId=spreadsheet_id, 
    range=rangeval, 
    valueInputOption=value_input_option, 
    insertDataOption=insert_data_option, 
    body={'values': values} # 替换原有的错误写法'data':df
)
response = request.execute()

注意事项

  • 请提前将服务账号JSON文件中的client_email对应的邮箱,添加到目标Google Sheet的共享列表中,授予编辑权限,否则会触发权限不足报错
  • 如果需要同时追加CSV表头,只需要将转列表的代码调整为values = [df.columns.tolist()] + df.values.tolist()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:57:00