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

gspread list_spreadsheet_files无法获取子文件夹文件问题求助

问题:gspread读取子文件夹中Google Sheets返回空列表

原本通过指定顶级文件夹ID,使用以下代码可获取所有子文件夹中的Google Sheets,但目前代码返回空列表,此前可正常返回该文件夹下所有Google Sheet名称。涉事文件夹仅包含存有Google Sheets的子文件夹,使用版本:

  • gspread 5.7.2
  • Python 3.10

原代码:

import gspread
scope = ['https://spreadsheets.google.com/feeds',
          'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
          'creds_path/creds.json', scope)
gc = gspread.authorize(credentials)
folderID = 'a_folder_id_here'
existing_sheets = gc.list_spreadsheet_files(folder_id = folderID)

解决思路与方案

1. 排查权限问题

  • 确认服务账号邮箱已被添加为顶级文件夹的编辑者/查看者,若子文件夹单独设置了权限,需同步添加服务账号权限(子文件夹默认继承父级权限,但手动修改后需单独配置)。
  • 检查creds.json文件是否对应正确的服务账号,未被替换或过期。

2. 修复方法的递归缺失问题

gspread的list_spreadsheet_files方法仅读取直接位于指定文件夹下的表格,不会递归遍历子文件夹。若之前表格直接存于顶级文件夹,后来移至子文件夹,就会出现返回空列表的情况。需自行实现递归遍历逻辑:

import gspread
from google.oauth2.service_account import Credentials

# 定义权限范围
SCOPES = [
    'https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive.readonly'
]

# 加载凭证
creds = Credentials.from_service_account_file('creds_path/creds.json', scopes=SCOPES)
gc = gspread.authorize(creds)

def get_all_sheets_in_folder(folder_id):
    all_sheets = []
    # 调用Drive API获取当前文件夹下所有内容
    results = gc.auth.service.files().list(
        q=f"'{folder_id}' in parents and trashed=false",
        fields="files(id, name, mimeType)",
        pageSize=1000
    ).execute()
    items = results.get('files', [])
    
    for item in items:
        # 识别Google Sheet类型文件
        if item['mimeType'] == 'application/vnd.google-apps.spreadsheet':
            all_sheets.append({'name': item['name'], 'id': item['id']})
        # 递归遍历子文件夹
        elif item['mimeType'] == 'application/vnd.google-apps.folder':
            all_sheets.extend(get_all_sheets_in_folder(item['id']))
    return all_sheets

# 调用示例
folderID = 'a_folder_id_here'
existing_sheets = get_all_sheets_in_folder(folderID)
print(existing_sheets)

3. 其他排查点

  • 确认子文件夹中的表格未被移入回收站或设置隐藏。
  • 检查顶级文件夹ID是否输入正确,无拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:58