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

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

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".ссылка" на объект ячейки до этого.