首页 > 解决方案 > 通过python附加xlsx文件保留超链接

问题描述

我有大约 20 个 xlsx 文件,我想使用 python 附加它们。我可以很容易地用 pandas 做到这一点,问题是在第一列中,我有超链接,当我使用 pandas 附加我的 xlsx 文件时,我丢失了超链接并且只获得了列中的文本。这是使用熊猫的代码。

excels = [pd.ExcelFile(name) for name in files]
frames = [x.parse(x.sheet_names[0], header=None,index_col=None) for x in excels]
frames[1:] = [df[1:] for df in frames[1:]]
combined = pd.concat(frames)
combined.to_excel("c.xlsx", header=False, index=False)

有什么方法可以在保留超链接的同时附加我的文件?是否有特定的图书馆可以做到这一点?

标签: pythonexcelpandasxlsx

解决方案


这取决于超链接在原始 Excel 文件中的写入方式以及您使用的 Excel 编写器。read_excel将返回显示文本,例如,如果您有一个超链接,https://www.google.com并且显示文本只是google,那么就无法保留与 pandas 的链接,因为您只会google在数据框中保留链接。

如果没有给出单独的显示名称(或显示名称与超链接相同)并且您使用xlsxwriter( engine='xlsxwriter'),则 的输出将to_excel自动转换为超链接(因为它以 'http://' 或任何其他方案开头)(从 xlsxwriter 版本 1.1.5 开始)。

如果您知道所有超链接都是没有权限的“http://”链接,并且显示名称(如果与链接不同)只是 url 路径,那么您可以在前面加上“http://”后缀将在 Excel 文件中获取超链接:

combined.iloc[combined[~combined.iloc[:,0].str.startswith('http')].index,0] = 'http://' + combined.iloc[combined[~combined.iloc[:,0].str.startswith('http')].index,0]
combined.to_excel("c.xlsx", header=False, index=False, engine='xlsxwriter')


此答案openpyxl中显示了 不使用 pandas 的通用解决方案,您从中获取 pandas 解决方案的同一个 SO 问题。为了也复制超链接,您只需将以下行添加到函数中:copySheet

        if cell.hyperlink is not None:
            newCell.hyperlink = copy(cell.hyperlink)

推荐阅读