python - 通过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)
有什么方法可以在保留超链接的同时附加我的文件?是否有特定的图书馆可以做到这一点?
解决方案
这取决于超链接在原始 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)
推荐阅读
- python - 我的简单平台游戏角色向左漂移但不向右漂移,我找不到导致它的错误
- c++ - strcpy_s 参数无效时是否可以返回?
- linux - 如何通过 AT+CMGS 发送短信?
- javascript - JavaScript - 不是 的子节点吗?
- python - JST 时间转换在 Python 3.8 中花费了令人难以置信的时间
- flutter - 如果开始溢出,如何将行转换为列?
- python - 如何在不传递引用的情况下在 Python 中使用 SyncManager 跨进程共享列表
- mysql - MySQL拒绝用户与特定IP主机的连接
- java - Jar Runtime 中带有 Selenium webdriver 的 Java Gradle 错误
- php - 如何检查/查找字符串中是否有多个字母 | PHP