在Python中使用openpyxl读取存储在sharepoint位置的xlsx?

快一个。

我有XLSX文件位于SharePoint的驱动器,并不能打开它在python中使用openpyxl,它运作良好,如果它存储在我的本地驱动器。

我试过这个。

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

抛出这个exception:

 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的build议,我收到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) 

看起来像共享点和请求是不兼容的,具有摘要式身份validation和基本身份validationhttp://docs.python-requests.org/en/latest/user/authentication/

而不是试图直接从url加载,请尝试使用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 file = "https://content.potatocompany.com/workspaces/PotatoTeam/Shared Documents/XYZ errors/XYZ Errors_Confirm.xlsx" username = 'myUsername' password = 'myPassword' r=requests.get(file, auth=HTTPBasicAuth(myUsername, myPassword)) 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可以用来使下载的数据显示为文件界面。