簡體   English   中英

使用python中的openpyxl讀取存儲在共享點位置的xlsx?

[英]Read xlsx stored on sharepoint location with openpyxl in python?

快一個。

我的 XLSX 文件位於共享點驅動器上,無法在 python 中使用 openpyxl 打開它,如果它存儲在我的本地驅動器上,它運行良好。

我試過這個。

from openpyxl import load_workbook
wb = load_workbook('https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx')

拋出這個異常:

C:\Anaconda\lib\site-packages\openpyxl\reader\excel.py in load_workbook(filename, use_iterators, keep_vba, guess_types, data_only)
    123     except (BadZipfile, RuntimeError, IOError, ValueError):
    124         e = exc_info()[1]
--> 125         raise InvalidFileException(unicode(e))
    126     wb = Workbook(guess_types=guess_types, data_only=data_only)
    127 

InvalidFileException: [Errno 22] invalid mode ('rb') or filename: 'https://...

我錯過了什么嗎? 我需要在 python 中閱讀其中一張工作表的內容。


編輯:

使用 crussell 的建議,我收到401 UNAUTHORIZED :

import requests
import urllib
from openpyxl import load_workbook
from requests.auth import HTTPBasicAuth

file = "https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx"

username = 'PotatoUser'
password = 'PotatoPassword'

resp=requests.get(file, auth=HTTPBasicAuth(username, password))
print(resp.content)

似乎共享點和請求不兼容,同時使用摘要式身份驗證和基本身份驗證http://docs.python-requests.org/en/latest/user/authentication/

不要嘗試直接從 Web 地址加載,而是嘗試使用 urllib。

import urllib
file = "https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx"
urllib.urlretrieve(file,"test.xlsx")

從進一步的研究來看,urllib 顯然被 請求避開了。試試這個:

import requests
from requests.auth import HTTPBasicAuth
file = "https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx"

username = 'myUsername'
password = 'myPassword'

resp=requests.get(file, auth=HTTPBasicAuth(username, password))
output = open('test.xlsx', 'wb')
output.write(resp.content)
output.close()

要安裝請求:

pip install requests

您可能首先需要先下載它,而不是直接打開它。 以下方法應該有效:

import urllib2
from openpyxl import load_workbook
import StringIO

data = urllib2.urlopen("https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx")
xlsx = data.read()
wb = load_workbook(StringIO.StringIO(xlsx))

Python 的StringIO可用於使下載的數據顯示為文件接口。

如果 SP 是內部的,它可以通過刪除您在load_workbook()中輸入的名稱中的“https:”來工作。

from openpyxl import load_workbook
file = '//content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx'
wb = load_workbook(file)

如果您的工作帳戶直接連接到 SP,則無需身份驗證。 否則,在我的工作中,我們使用 NTML 身份驗證,您可以使用庫request_ntml HttpNtlmAuth來完成。

讓我知道它是否有效或者你是否仍然對這個問題感興趣,我可以用request_ntml給你舉例

我在網絡瀏覽器中從SharePoint打開電子表格沒有問題,但是嘗試從python腳本中這樣做會給我一個403禁止錯誤。 我想念什么?

import requests_ntlm
import requests
file = "https://ourcompany.sharepoint.com/abcd/5UJJPA3D/FILE"
u=r"domain\username"
p="password"
resp = requests.get(file, auth=requests_ntlm.HttpNtlmAuth(u,p))
print(resp.content)
b'403 FORBIDDEN'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM