2014-04-16 41 views
4

奇怪的是,当用openpyxl加载已存在的excel并再次保存时,文件中的超链接就会消失。修改已有文件时,Python openpyxl会丢失超链接

无论是openpyxl 1.7.2还是最新的1.8.5都有这个问题。

任何人都可以帮助解决这个问题吗?

还是比openpyxl有更好的选择吗?

我知道xlrd/xlwt和XlsxWriter,但xlwt不支持.xlsx文件,并且XlsxWriter无法读取已存在的文件。我需要在应用程序中多次修改文件。

[已更新]:查看here。看起来这是错误尚未解决?

以下代码可能对您的测试有帮助。

#-*- 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年3月7日更新]:本bug已固定的,并且不存在问题了。

+1

不幸的是,openpyxl是迄今为止编辑Excel文件的最佳Python模块。 –

回答

7

尝试在Excel中使用HYPERLINK函数。这导致在该单元格的公式,而不是价值,而是从用户的角度来看它最可能没有什么区别:

1

作为附录塞德里克的回答,如果想使用Excel的直接内置于超链接功能,您可以使用下面的链接的格式:

'=HYPERLINK("{}", "{}")'.format(link, "Link Name")

没有这种格式,而无需维修,可以除去与已尝试超链接的单元格值的文件并没有对我开放。

例如ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")