Как создать гиперссылку на другой лист 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")