如何使用Python从Excel导出中的超链接下载文件

如何使用Python从Excel导出中的超链接下载文件,python,excel,Python,Excel,我有一个项目,我想迭代Excel共享点导出,该导出在其中一列中有一个指向另一个Excel表单的超链接。我想使用Python迭代导出,从每一行下载作为超链接的文件,并将这些文件保存到另一个位置。下面是我得到的那种1/4的方式,但我希望驻留在打印的超链接中的文件保存在另一个文件夹中,并且我希望Python遍历整个文档 import openpyxl wb = openpyxl.load_workbook(r'O:\Procurement Planning\QA\VSAF_test.

我有一个项目,我想迭代Excel共享点导出,该导出在其中一列中有一个指向另一个Excel表单的超链接。我想使用Python迭代导出,从每一行下载作为超链接的文件,并将这些文件保存到另一个位置。下面是我得到的那种1/4的方式,但我希望驻留在打印的超链接中的文件保存在另一个文件夹中,并且我希望Python遍历整个文档

    import openpyxl

    wb = openpyxl.load_workbook(r'O:\Procurement Planning\QA\VSAF_test.xlsx')

    ws = wb['owssvr']

    print(ws.cell(row=2, column=4).hyperlink.target)
更新:

我有下面的块,但我得到一个错误

  import requests
  import pandas as pd

def download_file(url):

    # this will grab the filename from the url
    filename = url.split('/')[-1]

print(f'Downloading {filename}')

r = requests.get(url)

with open(filename, 'wb') as output_file:
    output_file.write(r.content)

print('ok')

df = pd.read_excel(r'O:\Procurement Planning\QA\VSAF_test.xlsx')
df['Name'] = 'http://' + df['Name'].astype(str)
file = df['Name']

for url in file:
    download_file(url)
然后我得到这个错误:

HTTPConnectionPool(host='a2consulting_tech_5650_vsaf.xlsm', port=80): Max 
retries exceeded with url: / (Caused by 
NewConnectionError('<urllib3.connection.HTTPConnection object at 
0x0000019C39FDBFC8>: Failed to establish a new connection: [Errno 11001] 
getaddrinfo failed'))
HTTPConnectionPool(主机=a2consulting\u tech\u 5650\u vsaf.xlsm',端口=80):最大值
已超过url:/(由以下原因导致)的重试次数
NewConnectionError(':未能建立新连接:[错误号11001]
getaddrinfo失败('))
更新2:


我已经得到了下载的链接,但他们似乎没有下载任何东西。我完成了文件路径,当我在Jupyter笔记本中打印并单击它时,链接可以工作,但是下载的文件似乎是空白的,Excel表示文件格式或文件扩展名无效。请帮忙

您只需导入请求即可下载文件

为了方便起见,我将其包装在一个函数中:

import requests

def download_file(url):

    # this will grab the filename from the url
    filename = url.split('/')[-1]

    print(f'Downloading {filename}')

    r = requests.get(url)

    with open(filename, 'wb') as output_file:
        output_file.write(r.content)

    print('ok')
download_file('https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_10.xlsx')
现在可以调用函数为您保存文件。下面是传递给此函数的url的工作示例:

import requests

def download_file(url):

    # this will grab the filename from the url
    filename = url.split('/')[-1]

    print(f'Downloading {filename}')

    r = requests.get(url)

    with open(filename, 'wb') as output_file:
        output_file.write(r.content)

    print('ok')
download_file('https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_10.xlsx')
最后,使用“for循环”迭代URL列表,将每个URL发送到此函数

urls = ['http://example.com/file1.xlsx', 'http://example.com/file2.xlsx']    

for url in urls:
    download_file(url)

@AlexDowd只要缩进是正确的(在您的编辑中不是这样),我怀疑没有URL被传递给函数。请添加print(url)以便在for_循环之后进行检查---for url in url:print(url)download_file(url)@tudopropoganda它仍然不工作,文件是否为.xlsm类型是否重要?@AlexDowd不,不重要。我要求您放置print语句,以查看它传递给函数的url。你能告诉我吗?当然可以。我也试着从列表中调用它,但得到了相同的错误。如果我在没有“http://”的情况下尝试它,我会收到一个错误,建议我添加它。当我这样做的时候,我得到了最初的错误。非常感谢。该链接实际上指向一个内部共享点站点,当我在Jupyter笔记本中单击它时,它会将我带到一个空白网页,这就是为什么我问文件类型是否重要的原因。你对解决这个问题有什么建议吗?