我正在尝试从sharepoint读取excel文件到python。
Q1:文件有两个URL。如果我直接复制文件的链接,我会得到:
https://company.sharepoint.com/:x:/s/project/letters-numbers?e=lettersnumbers
如果我一个接一个地从网页中单击“进入文件夹”,直到单击并打开excel文件,URL现在为:
https://company.sharepoint.com/:x:/r/sites/project/_layouts/15/Doc.aspx?sourcedoc=letters-numbers&file=Table.xlsx&action=default&mobileredirect=true
我应该用哪一种?
Q2:下面是我的代码:
import pandas as pd from office365.runtime.auth.authentication_context import AuthenticationContext from office365.sharepoint.client_context import ClientContext from office365.sharepoint.files.file import File URL = "https://company.sharepoint.com/:x:/s/project/letters-numbers?e=lettersnumbers" USERNAME = "abc@a.com" PASSWORD = "abcd" ctx_auth = AuthenticationContext(URL) if ctx_auth.acquire_token_for_user(USERNAME, PASSWORD): ctx = ClientContext(URL, ctx_auth) web = ctx.web ctx.load(web) ctx.execute_query() print("Authentication successful") else: print(ctx_auth.get_last_error()) response = File.open_binary(ctx, URL) bytes_file_obj = io.BytesIO() bytes_file_obj.write(response.content) bytes_file_obj.seek(0) df = pd.read_excel(bytes_file_obj, sheet_name="Sheet2")
它的工作直到 pd.read_excel() ,在那里我得到了ValueError。
pd.read_excel()
ValueError: Excel file format cannot be determined, you must specify an engine manually.
我不知道哪里出了问题,装船是否会有进一步的问题。如果有人能提醒我这些问题或者留下一个例子,那将是非常感激的。
发布于 2022-07-14 13:17:06
我尝试过不同的URL(以及如何获得它们),并接收了不同的二进制文件。它们要么是一行代码状态(比如403),要么是警告,或者是看起来像头的东西。所以我认为问题在于URL格式。
这里 (github.com/vgrem)我找到了答案。
它基本上是说对于 ClientContext ,你需要一个绝对的网址,
ClientContext
URL = "https://company.sharepoint.com/:x:/r/sites/project"
对于 File ,您需要一个相对路径,但需要与URL重叠:
File
RELATIVE_PATH = "/sites/project/Shared%20Documents/Folder/Table.xlsx"
可以找到这样的 RELATIVE_PATH :
RELATIVE_PATH
Open in app
Property
Space
"%20"
ctx_auth = AuthenticationContext(URL) if ctx_auth.acquire_token_for_user(USERNAME, PASSWORD): ctx = ClientContext(URL, ctx_auth) web = ctx.web ctx.load(web) ctx.execute_query() print("Authentication successful") else: print(ctx_auth.get_last_error())