使用openpyxl修改现有文件时丢失超链接
奇怪的是,当我用openpyxl打开一个已经存在的Excel文件并保存时,文件里的超链接就消失了。
无论是openpyxl的1.7.2版本还是最新的1.8.5版本都有这个问题。
有没有人能帮我解决这个问题呢?
或者有没有比openpyxl更好的选择呢?
我知道有xlrd/xlwt和XlsxWriter这几个库,但xlwt不支持.xlsx格式的文件,而XlsxWriter又不能读取已经存在的文件。我需要在我的应用程序中多次修改一个文件。
[更新]: 可以查看 这里。看起来这是一个还没有修复的bug?
下面的代码可能对你的测试有帮助。
#-*- coding: utf-8 -*-
import openpyxl
def create():
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
ws.cell('A1').value = 'Click Me'
ws.cell('A1').hyperlink = 'http://www.google.com'
wb.save('test1.xlsx')
def rewrite():
wb = openpyxl.load_workbook('test1.xlsx')
ws = wb.worksheets[0]
wb.save('test2.xlsx')
if __name__ == '__main__':
create()
rewrite()
[2017-03-07 更新]: 这个 bug 已经修复了,现在这个问题不再存在了。
2 个回答
1
作为对Cedric回答的补充,如果你想直接使用Excel自带的超链接功能,可以用下面的方式来格式化链接:
'=HYPERLINK("{}", "{}")'.format(link, "链接名称")
如果不这样格式化,文件在我这边打不开,还需要修复,这样会导致尝试添加的超链接的单元格内容丢失。
比如说,ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "链接名称")
7
试着在Excel中使用HYPERLINK
函数。这样做会在单元格中生成一个公式,而不是一个具体的数值,但从用户的角度来看,这两者之间可能没有太大区别:
ws.cell('A1').value = '=HYPERLINK("http://www.google.com","Click Me")'