Извлечение Гиперссылок Из 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 7

7 ответов:

По моему опыту становится хорошо .взаимодействие 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

К вашему сведению, проблема с 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".гиперссылка " на объект ячейки до этого.