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

Google Service Account无法识别Drive中.xlsx文件的问题求助

问题原因分析
  1. gspread仅识别Google Sheets原生格式:list_spreadsheet_files()方法只能抓取Google Drive中已转换为Google Sheets格式(.gsheet后缀)的文件,你上传的.xlsx是本地Excel格式,不属于该方法的识别范围,这是核心问题。
  2. 权限同步延迟:Google Drive的权限变更可能存在5-10分钟的同步周期,刚设置完权限就运行代码,可能还未生效。
  3. 文件夹权限继承异常:若子文件夹是在共享主文件夹之后创建的,可能存在权限未自动继承的情况,需确认每个子文件夹和文件都直接赋予了服务账号编辑权限。
可行解决方案

方案1:将Excel文件转换为Google Sheets格式

手动转换

在Google Drive中打开.xlsx文件,系统会自动提示转换为Sheets格式,保存后即可被list_spreadsheet_files()识别。

代码批量转换

使用Google Drive API自动转换指定文件夹下的所有.xlsx文件:

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

# 加载服务账号凭据
creds = Credentials.from_service_account_file(
    'credentials.json',
    scopes=['https://www.googleapis.com/auth/drive']
)
drive_service = build('drive', 'v3', credentials=creds)

# 替换为你的主文件夹ID
folder_id = "YOUR_MAIN_FOLDER_ID"
# 查找文件夹下所有xlsx文件
results = drive_service.files().list(
    q=f"'{folder_id}' in parents and mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'",
    fields="files(id, name)"
).execute()
xlsx_files = results.get('files', [])

# 批量转换为Google Sheets格式
for file in xlsx_files:
    converted_file = drive_service.files().copy(
        fileId=file['id'],
        body={
            'name': f"{file['name']}_converted",
            'mimeType': 'application/vnd.google-apps.spreadsheet'
        }
    ).execute()
    print(f"已转换:{converted_file['name']} (ID: {converted_file['id']})")

方案2:直接读取Excel格式文件(无需转换)

如果不需要转为Sheets格式,可结合pandas直接读取Drive中的.xlsx文件:

  1. 安装依赖:
pip install pandas openpyxl google-api-python-client
  1. 读取代码:
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials
import pandas as pd

# 加载凭据
creds = Credentials.from_service_account_file(
    'credentials.json',
    scopes=['https://www.googleapis.com/auth/drive']
)
drive_service = build('drive', 'v3', credentials=creds)

# 替换为目标xlsx文件ID
file_id = "YOUR_XLSX_FILE_ID"
# 获取文件二进制内容
file_content = drive_service.files().get_media(fileId=file_id).execute()

# 读取为DataFrame
df = pd.read_excel(file_content, engine='openpyxl')
print(df.head())

方案3:验证权限并等待同步

  • 逐一检查每个.xlsx文件的共享设置,确认服务账号邮箱已被添加为编辑者(避免仅共享文件夹导致的权限遗漏)。
  • 等待10-15分钟,让Google Drive完成权限同步后再运行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:55:34