【问题标题】:Append xlsx files retaining hyperlinks through python通过python附加xlsx文件保留超链接
【发布时间】:2020-01-31 00:03:11
【问题描述】:

我有大约 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)

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

【问题讨论】:

  • 也许this 对保留超链接很有用。

标签: python excel pandas xlsx


【解决方案1】:

这取决于原始 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')


this answer 中显示了使用 openpyxl 的没有 pandas 的通用解决方案到您从中获取 pandas 解决方案的同一个 SO 问题。为了也复制超链接,您只需将以下行添加到 copySheet 函数:
        if cell.hyperlink is not None:
            newCell.hyperlink = copy(cell.hyperlink)

【讨论】:

  • 是的,显示文本不是链接而是另一个名称。正如您所说,它只提供显示文本,而我的数据框中没有链接。所以用 pandas 就不行了,你知道有没有其他的库可以做这个工作吗?
  • 在我的回答末尾查看我的更新“A universal ...”。使用 openpyxl 3.0.0 版测试。
猜你喜欢
  • 2020-08-05
  • 2023-03-31
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
相关资源
最近更新 更多