2

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

当我需要向网站添加超链接时,我会写如下内容:

从 openpyxl 导入工作簿

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)

我有3个问题:

  1. 我们如何像 VBA 的样式函数那样编写超链接: ActiveCell.FormulaR1C1 = _ "=HYPERLINK(""http://stackoverflow.com/questions/ask"",""site"")" 使用 hyherlink 和她的名字
  2. 我们如何编写本地图像的超链接? ws.cell('B2').hyperlink = ('1.png') # It doesn't work! And I don't now what to do ) Plese, help me )
  3. 我们可以使用 unicode 超链接来图像吗?例如当我使用 ws.cell('B1').hyperlink = (u'http://pythonhosted.org/openpyxl/api.html') It fail with error! for example we have picture 'russian_language_name.png' and we create hyperlink in exel without any problem. We click to the cell, and then print '=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>

一切正常 =) Exel 支持 unicode,但是 python 的库 openpyxl 呢?它支持超链接中的 unicode 吗?

4

3 回答 3

0

由于文件中的.xlsx文件是带有UTF-8编码的 XML 文件,因此 Unicode 超链接不是问题。

于 2013-03-19T07:37:42.283 回答
0

关于问题 2,我认为您需要包含文件链接的完整路径。如果您无法访问 Excel 文件中的文件链接,则是 Excel 的安全策略禁止此类操作。

于 2013-10-06T03:15:31.527 回答
-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') 通过将样式属性提及为“超链接”是关键。我拥有的所有其他代码对您来说可能并不重要。否则样式属性将具有“正常”值 奇怪的是,即使没有样式属性,我们工作的超链接也只是缺少样式!当然。虽然很奇怪,但我见过更奇怪的事情。希望这可以帮助。

于 2016-12-29T07:15:34.363 回答