17

我一直在研究用于 Excel 文件操作的 xlrd 和 openpyxl 库。但是,xlrd 目前不支持formatting_info=True.xlsx 文件,所以我不能使用 xlrdhyperlink_map功能。所以我转向openpyxl,但也没有运气从excel文件中提取超链接。下面的测试代码(测试文件包含一个简单的 google 超链接,超链接文本设置为“test”):

import openpyxl

wb = openpyxl.load_workbook('testFile.xlsx')

ws = wb.get_sheet_by_name('Sheet1')

r = 0
c = 0

print ws.cell(row = r, column = c). value
print ws.cell(row = r, column = c). hyperlink
print ws.cell(row = r, column = c). hyperlink_rel_id

输出:

test

None

我猜openpyxl目前也不完全支持格式化?是否有其他库可以用来从 Excel (.xlsx) 文件中提取超链接信息?

4

8 回答 8

24

这可以通过 openpyxl 实现:

import openpyxl

wb = openpyxl.load_workbook('yourfile.xlsm')
ws = wb['Sheet1']
# This will fail if there is no hyperlink to target
print(ws.cell(row=2, column=1).hyperlink.target)
于 2017-08-01T20:11:33.007 回答
4

从至少版本 openpyxl-2.4.0b1 开始,此错误https://bitbucket.org/openpyxl/openpyxl/issue/152/hyperlink-returns-empty-string-instead-of已修复。现在它返回单元格超链接对象:

hl_obj = ws.row(col).hyperlink  # getting Hyperlink object for Cell
#hl_obj = ws.cell(row = r, column = c).hyperlink This could be used as well.
if hl_obj:
    print(hl_obj.display)
    print(hl_obj.target)
    print(hl_obj.tooltip) # you can see it when hovering mouse on hyperlink in Excel
    print(hl_obj) # to see other stuff if you need
于 2016-07-11T00:19:59.470 回答
3

仅供参考,问题openpyxl是一个实际的错误

而且,是的,如果没有 ,xlrd则无法读取超链接formatting_info,目前不支持xlsx.

于 2013-05-22T20:35:18.017 回答
1

对于 Excel 文件的直接操作,还值得一看优秀的XlWings库。

于 2015-01-09T14:28:09.990 回答
1

根据我的经验,获得良好的 .xlsx 交互需要迁移到 IronPython。这使您可以使用公共语言运行时 (clr) 并直接与 excel 交互'

http://ironpython.net/

import clr
clr.AddReference("Microsoft.Office.Interop.Excel")
import Microsoft.Office.Interop.Excel as Excel
excel = Excel.ApplicationClass()

wb = excel.Workbooks.Open('testFile.xlsx')
ws = wb.Worksheets['Sheet1']

address = ws.Cells(row, col).Hyperlinks.Item(1).Address
于 2013-05-21T18:33:17.650 回答
1

我使用过的一个成功的解决方案是在服务器上安装unoconv并实现一种方法,该方法通过subprocess模块调用此命令行工具以将文件从 xlsx 转换为 xls,因为hyperlink_map.get()xls一起使用。

于 2015-01-09T00:11:27.187 回答
0
import openpyxl

wb = openpyxl.load_workbook('yourfile.xlsx')
ws = wb['Sheet1']

try:
    print(ws.cell(row=2, column=1).hyperlink.target)

#This fail if their is no hyperlink
except:
    print(ws.cell(row=2, column=1).value)

为了处理异常'message': "'NoneType' object has no attribute 'target'",我们可以在 try/except 块中使用它。因此,即使给定单元格中没有可用的超链接,它也会打印单元格中包含的内容。

于 2021-06-18T07:57:40.027 回答
0

如果不仅仅是.hyperlink那么 .hyperlink.target应该可以工作。在此之前,我在单元格对象上仅使用“.hyperlink”也得到了“无”。

于 2017-07-18T03:35:57.007 回答