我一直在寻找用于Excel文件操作的xlrd和openpyxl库。但是,xlrd当前不支持。{xlsx文件的formatting_info=True
,因此我无法使用xlrd hyperlink_map
函数。所以我转向openpyxl,但也没有运气从excel文件中提取超链接。下面的测试代码(测试文件包含一个简单的谷歌超链接,超链接文本设置为“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)文件中提取超链接信息?
答案 0 :(得分:4)
现在应该可以使用openpyxl:
import openpyxl
wb = openpyxl.load_workbook('yourfile.xlsm')
ws = wb['Sheet1']
print(ws.cell(row=2, column=1).hyperlink.target) #This will fail if there is no
#hyperlink to target
答案 1 :(得分:3)
仅供参考,openpyxl
的问题是实际的bug。
并且,是的,xlrd
无法在没有formatting_info
的情况下阅读超链接,xlsx
目前不支持该超链接。
答案 2 :(得分:2)
根据我的经验,获得良好的.xlsx互动需要转向IronPython。这使您可以使用公共语言运行时(clr)并直接与excel'
进行交互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
答案 3 :(得分:2)
从至少版本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
答案 4 :(得分:1)
我使用的一个成功的解决方案是在服务器上安装unoconv并实现一个 通过subprocess模块调用此命令行工具以将文件从xlsx转换为xls的方法,因为hyperlink_map.get()与xls一起使用。
答案 5 :(得分:1)
对于直接操作Excel文件,还值得查看优秀的XlWings库。
答案 6 :(得分:0)
如果不是 .hyperlink ,那么 .hyperlink.target 应该有效。我得到了一个没有'只使用" .hyperlink"在此之前的单元格对象上。
答案 7 :(得分: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 块中使用它。因此,即使给定单元格中没有可用的超链接,它也会打印单元格中包含的内容。