如何在openpyxl单元格中写入指向本地图片的超链接?

2 投票
3 回答
4977 浏览
提问于 2025-04-17 16:14

我使用的是 Python 2.7.3。我需要通过 openpyxl 库在单元格中写入指向本地图片的超链接。

当我需要添加指向网站的超链接时,我会这样写:

from openpyxl import Workbook

wb = Workbook()

dest_filename = r'empty_book.xlsx'

ws = wb.worksheets[0]

ws.title = 'Name'

hyperlink to local picture

ws.cell('B1').hyperlink = ('http://pythonhosted.org/openpyxl/api.html')

hyperlink to local picture

ws.cell('B2').hyperlink = ('1.png') # It doesn't work! 

wb.save(filename = dest_filename)

我有三个问题:

  1. 我们怎么能像 VBA 中那样写超链接的函数: ActiveCell.FormulaR1C1 = _ "=HYPERLINK(""http://stackoverflow.com/questions/ask"",""site"")" 这样可以同时包含超链接和它的名称。
  2. 我们怎么能写指向本地图片的超链接? ws.cell('B2').hyperlink = ('1.png') # 这不管用!我不知道该怎么办 ) 请帮帮我 )
  3. 我们能用 Unicode 超链接指向图片吗?比如当我使用 ws.cell('B1').hyperlink = (u'http://pythonhosted.org/openpyxl/api.html') 这样会出错! 假设我们有一张图片 'russian_language_name.png',我们在 Excel 中创建超链接没有问题。我们点击单元格,然后打印 '=Hyperlink("http://stackoverflow.com/questions/ask";"site_by_russian_language")

保存文档,解压它。然后我们去它的目录,找到 xl->worksheets->sheet1.xml,看到标题

<?xml version="1.0" encoding="UTF-8" standalone="true"?>

然后 ...

row r="2" x14ac:dyDescent="0.25" spans="2:6">-<c r="B2" t="str" s="1"><f>HYPERLINK("http://stackoverflow.com/questions/ask","site_by_russian_language")</f><v>site_by_russian_language</v></c>

一切都很好 =) Excel 支持 Unicode,但 Python 的 openpyxl 库呢?它支持超链接中的 Unicode 吗?

3 个回答

-1

我之前回答过一个类似的问题。希望这能帮到你。

其实,虽然没有直接的方法来创建一个超链接,但在你的情况下,我们可以这样做。我用下面的代码成功创建了一个指向现有文件的超链接。

wb=openpyxl.Workbook() s = wb.get_sheet_by_name('Sheet') s['B4'].value = '=HYPERLINK("C:\\Users\\Manoj.Waghmare\\Desktop\\script.txt", "newfile")' s['B4'].style = 'Hyperlink' wb.save('trial.xlsx') 关键在于把样式属性设置为'Hyperlink'。其他的代码对你来说可能没什么重要性。样式属性如果不设置的话,默认值是'Normal'。奇怪的是,即使没有样式属性,超链接还是能工作,只是看起来没有样式而已!当然,这种情况也挺奇怪的,我见过更奇怪的事情。希望这能帮到你。

0

关于问题2,你需要把文件链接的完整路径都写上,我觉得。 如果你在Excel文件中无法访问这个文件链接,那是因为Excel的安全策略不允许这样做。

0

因为.xlsx文件里的内容其实是用UTF-8编码的XML文件,所以使用Unicode超链接是没有问题的。

撰写回答