![](/img/trans.png)
[英]Python - openpyxl read xlsx data after writing on existing xlsx with formula
[英]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.