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

如何将Python字典写入Google Sheets,表头置首行且不覆盖重复

将AdSense报表数据写入Google Sheets的实现方案

现有代码基础

当前已有生成result字典的脚本,原用于打印表头和数据的代码如下:

# 打印表头
for header in result['headers']:
    print('%25s' % header['name'], end=''),
print()

# 打印数据
if 'rows' in result:
    for row in result['rows']:
        for cell in row['cells']:
            print('%25s' % cell['value'], end='')
print()

需求目标

已完成GCP身份验证,需实现:

  • 将result['headers']中的表头写入Google Sheets首行
  • 将result['rows']中的数据追加写入,且保证数据不重复、不覆盖原有内容

实现步骤与代码

1. 依赖安装

先安装必要的Python包:

pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib

2. 核心实现代码

替换原打印代码部分,整合报表数据获取与Sheets写入逻辑:

from googleapiclient.discovery import build
from google.oauth2 import service_account

# 替换为你的实际配置
SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-key.json'
SPREADSHEET_ID = 'your-spreadsheet-id'
RANGE_NAME = 'Sheet1'

# 初始化Sheets API客户端
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

def get_existing_data():
    """获取表格现有数据,用于去重"""
    result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()
    return result.get('values', [])

def write_headers(headers):
    """仅当表格为空时写入表头"""
    existing_data = get_existing_data()
    if not existing_data:
        header_names = [header['name'] for header in headers]
        body = {'values': [header_names]}
        sheet.values().update(
            spreadsheetId=SPREADSHEET_ID,
            range=f'{RANGE_NAME}!A1',
            valueInputOption='RAW',
            body=body
        ).execute()

def append_unique_data(rows):
    """追加不重复的数据行"""
    existing_data = get_existing_data()
    # 跳过表头行(如果存在)
    existing_rows = existing_data[1:] if existing_data else []
    
    # 转换新数据格式,提取单元格值
    new_rows = []
    for row in rows:
        row_values = [cell['value'] for cell in row['cells']]
        if row_values not in existing_rows:
            new_rows.append(row_values)
    
    # 有新数据则追加
    if new_rows:
        body = {'values': new_rows}
        sheet.values().append(
            spreadsheetId=SPREADSHEET_ID,
            range=RANGE_NAME,
            valueInputOption='RAW',
            insertDataOption='INSERT_ROWS',
            body=body
        ).execute()

# 执行写入操作
write_headers(result['headers'])
if 'rows' in result:
    append_unique_data(result['rows'])

3. 关键逻辑说明

  • 表头写入:先检查表格是否为空,仅空表时写入表头,避免重复
  • 数据去重:读取现有数据并跳过表头,将新数据转换为统一格式后对比,仅追加未存在的行
  • 追加模式:使用INSERT_ROWS选项,确保新数据添加到现有数据下方,完全不覆盖原有内容

注意事项

  • 需给GCP服务账号授予目标Google Sheets的编辑权限
  • 替换代码中的配置参数为你的实际文件路径和文档ID
  • 若报表有唯一标识列(如日期+广告单元ID),可优化去重逻辑,仅对比唯一列提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:50:26