Как создать гиперссылку на другой лист Excel в одной книге

Я использую модуль openpyxl для Python и пытаюсь создать гиперссылку, которая приведет меня к другой вкладке в той же книге Excel. Выполнение чего-то похожего на следующее создает гиперссылку; однако, когда я нажимаю на нее, он говорит мне, что не может открыть файл.

from openpyxl import Workbook

wb = Workbook()
first_sheet = wb.create_sheet(title='first')
second_sheet = wb.create_sheet(title='second')

first_sheet['A1'] = "hello"
second_sheet['B2'] = "goodbye"

link_from = first_sheet['A1']
link_to = second_sheet['B2'].value

link_from.hyperlink = link_to

wb.save("C:/somepath/workbook.xlsx")

Я предполагаю, что проблема заключается в значении 'link_to'; однако я не знаю, что нужно было бы изменить или какой путь мне пришлось бы написать.

Я использую Python 2.7.6 и Excel 2013.

4 ответов


поддержка гиперссылок в openpyxl в настоящее время чрезвычайно рудиментарна и в значительной степени ограничена чтением ссылок в существующих файлах.


Я нашел способ сделать это.

предполагая, что одна .XLSX файл с именем 'workbookEx.XLSX-файл' С двумя листами с именем 'лист1' и 'sheet2 ' и требуется ссылка из одной ячейки (A1) в 'лист1 в другую ячейку(E5) в 'sheet2':

from openpyxl import load_workbook

wb = load_workbook(workbookEx.xlsx) 
ws = wb.get_sheet_by_name("sheet1")

link = "workbookEx.xlsx#sheet2!E5"

ws.cell(row=1, column=1).hyperlink = (link)

секрет был"#", Excel не показывает вам, но он использует " # " для тех же ссылок на файлы, мне просто нужно было скопировать ту же ссылку на файл создан в Excel для документа Word, чтобы увидеть"#".

также можно опустить имя файла, т. е. для ссылки на лист активного документа просто используйте:_cell.hyperlink = '#sheetName!A1'.

чтобы назвать только что созданную ссылку, просто установите значение ячейки в нужную строку:_cell.value = 'Linkname'.


другое рабочее решение - использовать excels, встроенные в функцию гиперссылка. Он не делает значение в ячейке гиперссылкой, а помещает формулу в ячейку и действует как гиперссылка.

ws.cell('A1').value = '=HYPERLINK("#sheet2!E5","Link name")'

как дополнение к Маркусу.Ответ удачи, если вы хотите использовать встроенную функцию гиперссылки Excel напрямую, вам может потребоваться Форматировать как:

'=HYPERLINK("{}", "{}")'.format(link, "Link Name")

без этого форматирования файл не открывался для меня без необходимости восстановления, что удалило значения ячеек при нажатии на ссылки.

например ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")