首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从sharepoint到python读取excel时的ValueError

从sharepoint到python读取excel时的ValueError
EN

Stack Overflow用户
提问于 2022-07-13 10:54:31
回答 2查看 238关注 0票数 0

我正在尝试从sharepoint读取excel文件到python。

Q1:文件有两个URL。如果我直接复制文件的链接,我会得到:

代码语言:javascript
运行
复制
https://company.sharepoint.com/:x:/s/project/letters-numbers?e=lettersnumbers

如果我一个接一个地从网页中单击“进入文件夹”,直到单击并打开excel文件,URL现在为:

代码语言:javascript
运行
复制
https://company.sharepoint.com/:x:/r/sites/project/_layouts/15/Doc.aspx?sourcedoc=letters-numbers&file=Table.xlsx&action=default&mobileredirect=true

我应该用哪一种?

Q2:下面是我的代码:

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
ValueError: Excel file format cannot be determined, you must specify an engine manually.

我不知道哪里出了问题,装船是否会有进一步的问题。如果有人能提醒我这些问题或者留下一个例子,那将是非常感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-14 13:17:06

我尝试过不同的URL(以及如何获得它们),并接收了不同的二进制文件。它们要么是一行代码状态(比如403),要么是警告,或者是看起来像头的东西。所以我认为问题在于URL格式。

这里 (github.com/vgrem)我找到了答案。

它基本上是说对于ClientContext,你需要一个绝对的网址,

代码语言:javascript
运行
复制
URL = "https://company.sharepoint.com/:x:/r/sites/project"

对于File,您需要一个相对路径,但需要与URL重叠:

代码语言:javascript
运行
复制
RELATIVE_PATH = "/sites/project/Shared%20Documents/Folder/Table.xlsx"

可以找到这样的RELATIVE_PATH

  1. 以小组形式转到文件的文件夹(或在网页上)。
  2. 选择文件,Open in app (Excel)。
  3. 在Excel中,File -> Property复制路径,适应上述格式
  4. Space替换为"%20"
代码语言:javascript
运行
复制
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, RELATIVE_PATH)
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')

如果未指定sheet_name,并且原始.xlsx有多个工作表,则pd.read_excel()将生成警告,而此处的df实际上是一个dict

票数 0
EN

Stack Overflow用户

发布于 2022-07-13 11:09:02

如果您查看“read_excel”(excel.html)的熊猫文档,您将看到有一个“engine”参数。

尝试不同的选项,看看哪个可以工作,因为您的错误是说引擎必须手动指定。

如果这是正确的,那么在将来,从字面上看错误信息并检查文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72965110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档