在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
可以用来使下载的数据显示为文件界面。