Извлечение Гиперссылок Из Excel (.xlsx) с Python
Я смотрел в основном библиотеки xlrd и openpyxl для работы с файлами Excel. Однако xlrd в настоящее время не поддерживает formatting_info=True
for .xlsx файлы, поэтому я не могу использовать функцию xlrd hyperlink_map
. Поэтому я обратился к openpyxl, но также не смог извлечь гиперссылку из файла excel с его помощью. Тестовый код ниже (тестовый файл содержит простую гиперссылку на google с текстом гиперссылки, установленным в "тест"):
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) файлы?
7 ответов:
По моему опыту становится хорошо .взаимодействие 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
Теперь это должно быть возможно с openpyxl:
import openpyxl wb = openpyxl.load_workbook('yourfile.xlsm') ws = wb.get_sheet_by_name('Sheet1') print(ws.cell(row=2, column=1).hyperlink.target)
Начиная как минимум с версии 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
Успешное решение, с которым я работал, состоит в том, чтобы установить unoconv на сервере и реализовать метод, который вызывает этот инструмент командной строки через модульподпроцесса для преобразования файла из xlsx в xls, начиная с hyperlink_map.get() работает с xls.
Для непосредственного манипулирования файлами Excel также стоит посмотреть на отличную библиотекуXlWings .