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

如何通过Office365-REST-Python-Client获取指定SharePoint文件

问题:通过Office365-REST-Python-Client获取SharePoint共享Excel文件失败

背景信息

  • 浏览器打开目标Excel文件的URL:https://mysite.sharepoint.com/:x:/r/_layouts/15/Doc.aspx?sourcedoc=%7Bxxxxxx-xxxxx-xxxx%7D&file=filename.xlsx&action=default&mobileredirect=true
  • 右键文档复制的URL:https://mysite.sharepoint.com/:x:/g/XXXXXXXXX-sXXXXXXXX?e=yyyyy
  • 已通过Office365-REST-Python-Client(2.5.2版本)完成用户名密码认证,可正常获取客户端上下文,也能列出所有文档库及其中项目,但多数项目无标题,无法定位目标文件。

尝试过的代码

1. 获取客户端上下文

import os

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext

def get_ctx():
    sharepoint_url = os.environ["SP_URL"]
    username = os.environ["SP_USER"]
    password = os.environ["SP_PASSWORD"]
    auth_ctx = AuthenticationContext(url=sharepoint_url)
    auth_ctx.acquire_token_for_user(username, password)
    ctx = ClientContext(sharepoint_url, auth_ctx)
    return ctx

2. 列出文档库及项目

def get_doc_libraries(ctx):
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()

    lists = web.lists
    ctx.load(lists)
    ctx.execute_query()
    for sp_list in lists:
        props = sp_list.properties
        if props['BaseTemplate'] == 101:  # Document libraries
            library_name = props["Title"]
            doc_library = ctx.web.lists.get_by_title(library_name)
            ctx.load(doc_library)
            ctx.execute_query()

            items = doc_library.get_items()
            ctx.load(items)
            ctx.execute_query()

            paged_items = doc_library.items.paged(500, page_loaded=print_progress).get().execute_query()
            for item in paged_items:
              # do_something_with_item

3. 通过复制的URL获取文件(执行失败)

def get_file_with_rel_url(ctx, url, sharepoint_url):
    sharepoint_url = sharepoint_url.rstrip("/")
    rel_url = url.replace(sharepoint_url, "")

    response = File.open_binary(ctx, rel_url)

    with open("bla.xls", 'wb') as output_file:
        output_file.write(response.content)

报错信息

{"error":{"code":"-2130575338, Microsoft.SharePoint.SPException","message":{"lang":"fr-FR","value":"Le fichier /:x:/g/XXXXXX-XXXXXX n'existe pas."}}}

英文含义:The file /:x:/g/XXXXXX-XXXXXX doesn't exist

核心需求

浏览器复制的URL无法直接用于API调用,需找到正确的方式获取该共享文件的唯一标识或API可用路径,完成文件的获取操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:15:33