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

使用Python调用Microsoft Graph API访问个人账号OneDrive中Excel文件时出现'ItemNotFound'错误

使用Python调用Microsoft Graph API访问个人账号OneDrive中Excel文件时出现'ItemNotFound'错误

问题描述

我尝试使用Microsoft Graph API读取和更新存储在OneDrive中的Excel文件,但持续遇到以下错误:

ERROR:root:Request failed: {"error":{"code":"ItemNotFound","message":"The requested resource doesn't exist.","innerError":{"code":"itemNotFound","message":"The requested resource doesn't exist.","date":"2025-01-18T22:20:58","request-id":"d908b11c-edcc-4a73-9383-2ca4328c3f4a","client-request-id":"d908b11c-edcc-4a73-9383-2ca4328c3f4a"}}}

已执行的步骤

  • 通过Microsoft Graph API的/drive/root/children端点获取了文件ID:
    • 返回的文件ID:1555B702B0C2A00A!s86e7ed45f177405ba089286bc4cc00af
  • 验证了该文件在我的OneDrive账号中存在且可访问
  • 使用了正确的API端点来访问工作簿,例如:
    https://graph.microsoft.com/v1.0/me/drive/items/1555B702B0C2A00A!s86e7ed45f177405ba089286bc4cc00af/workbook/worksheets/Sheet1/range(address='A1:B2')
    
  • 确保Microsoft Graph权限配置正确:
    • 权限范围:Files.ReadWrite、offline_access、Sites.ReadWrite.All
    • 检查了文件已同步且可从我的OneDrive文件夹访问

疑问

为什么一个存在且可通过OneDrive访问的文件会触发ItemNotFound错误?

问题排查与解决方案

结合你的操作步骤和错误信息,我整理了几个最可能的原因及对应的解决办法:

1. 文件ID格式不正确

你获取到的文件ID结构有点异常——个人OneDrive的文件ID通常是[存储ID]![文件标识]的简洁格式(比如123ABC!4567),但你的ID里额外附带了一段s86e7ed45f177405ba089286bc4cc00af,这大概率不是正确的文件唯一ID。建议你重新调用GET /me/drive/root/children接口,仔细查看返回结果中的id字段,确保复制的是完整且正确的文件ID,不要混入其他无关字符或参数。

2. 授权账号与文件所属账号不匹配

你使用的/me/drive/items/{file-id}端点是针对当前授权用户的个人OneDrive的,如果你的API授权账号和存放Excel文件的OneDrive账号不是同一个,自然会找不到目标文件。可以先调用GET /me/drive/root接口,确认当前访问的OneDrive所属账号是否和你存放文件的账号一致。

另外,即使权限范围配置正确,也要确认离线访问的刷新令牌是否有效,有没有过期或者被账号管理员撤销权限。

3. 工作表名称或范围地址错误

有时候文件ID正确,但工作表名称大小写不匹配、拼写错误,或者范围地址格式有误,也会触发ItemNotFound错误。你可以先调用GET /me/drive/items/{正确文件ID}/workbook/worksheets接口,列出目标Excel里的所有工作表名称,确认Sheet1是真实存在的(注意区分大小写,比如实际是sheet1或者Sheet 1都会导致失败),再调整请求中的工作表名称和范围地址。

4. OneDrive云端同步延迟或文件状态异常

虽然你确认文件已同步,但OneDrive本地与云端的同步偶尔会有延迟,或者文件在云端处于临时处理状态(比如上传未完成、后台正在解析文件)。建议你直接登录OneDrive网页版,确认文件能正常打开,且修改时间是最新的,等待几分钟后再重试API请求。

5. 请求URL编码问题

如果你的请求URL中包含特殊字符(比如空格、中文等),没有正确编码也可能导致资源找不到。不过你使用文件ID访问的情况下这个概率较低,但还是可以检查下请求URL是否存在未转义的特殊字符,确保格式完全正确。

备注:内容来源于stack exchange,提问作者Rui Sousa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:23:07