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

在Jupyter中将Google Drive的XLSX转换为Google Sheets的问题

将Google Drive中的XLSX文件转换为Google Sheets并读取

你当前已有读取Google Sheets数据的Python脚本,但需要处理Drive中的XLSX文件并转换为Sheets格式,之前找到的files().copy方法无法正常工作,以下是修正后的有效方案:

关键修正点

  • 补充权限范围:原脚本仅请求了Sheets的访问权限,操作Drive文件需要添加Drive相关权限
  • 完善转换逻辑:确保转换时的参数正确,同时获取转换后的Sheets文件ID用于后续读取

完整实现代码

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

# 1. 更新权限范围,添加Drive操作权限
SERVICE_ACCOUNT_FILE = 'gs_credentials.json'
SCOPES = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'  # 新增Drive操作权限
]

creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)

# 2. 转换XLSX为Google Sheets
drive_service = build('drive', 'v3', credentials=creds)
XLSX_FILE_ID = '你的XLSX文件ID'  # 替换为Drive中XLSX文件的ID

# 执行转换,可指定转换后文件的名称
convert_request = drive_service.files().copy(
    fileId=XLSX_FILE_ID,
    body={
        'name': '转换后的Sheets文件',  # 可选:自定义转换后的文件名
        'mimeType': 'application/vnd.google-apps.spreadsheet'
    }
).execute()

# 获取转换后的Sheets文件ID
converted_sheet_id = convert_request['id']
print(f"转换完成,Sheets文件ID:{converted_sheet_id}")

# 3. 读取转换后的Sheets数据(复用你原有的读取逻辑)
sheets_service = build('sheets', 'v4', credentials=creds)
RANGE = '要读取的范围'  # 比如'Sheet1!A1:Z100'

result = sheets_service.spreadsheets().values().get(
    spreadsheetId=converted_sheet_id,
    range=RANGE
).execute()
values = result.get('values', [])

# 输出读取到的数据
if not values:
    print('未找到数据。')
else:
    print('读取到的数据:')
    for row in values:
        print(row)

注意事项

  • 确保服务账号拥有目标XLSX文件的读取权限:需在Google Drive中把XLSX文件共享给服务账号的邮箱(在gs_credentials.json的client_email字段中)
  • 转换后的文件会保存在与原XLSX文件相同的目录下(除非在body中指定parents参数修改保存位置)
  • 如果不需要保留原XLSX文件,也可以使用files().update方法直接将原文件转换为Sheets格式(会覆盖原文件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:45:29