Извлечение Гиперссылок Из Excel (.xlsx) с Python
Я смотрел в основном библиотеки xlrd и openpyxl для обработки файлов Excel. Однако, xlrd в настоящее время не поддерживает formatting_info=True
for .xlsx файлы, поэтому я не могу использовать xlrd . Поэтому я обратился к 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
FYI, проблема с openpyxl
фактический ошибка.
и, да, xlrd
невозможно прочитать гиперссылку без formatting_info
, который в настоящее время не поддерживается xlsx
.
это должно быть возможно с 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 библиотека.
Если вместо того, чтобы просто .гиперссылка, занимался .гиперссылка.цель должны работать. Я также получал " нет "от использования just".ссылка" на объект ячейки до этого.