在同一工作簿中与其他Excel表的超链接创建超链接



我正在使用Python的模块OpenPyXl,并试图创建一个超链接,将我带到同一Excel Workbook中的其他选项卡。做类似以下操作会创建超链接;但是,当我单击它时,它告诉我它无法打开文件。

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和Excel2013。

我找到了一种方法。

假设一个.xlsx文件名为' workbookex.xlsx ',有两个名为' sheet1 '和' sheet2 '的图纸,并且需要一个链接从' e5 )的一个单元格( a1 )到另一个单元格( e5 )。:

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'

作为marcus.luck答案的附录,如果要直接使用Excel的内置超链接函数,则可能需要格式化为:

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

没有这种格式,该文件没有为我打开而无需维修,这在单击链接时删除了单元格值。

例如。ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")

另一个工作解决方案是使用函数超链接中内置的Excels。它不会使单元格中的值进入超链接,而是将一个公式放在单元格中并像超链接一样。

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

对OpenPyXl中超链接的支持目前极为基本,并且在很大程度上仅限于读取现有文件中的链接。

除了先前的答案外,格式化单元格以使其看起来像Excel中创建的超链接一样有用。为此,请按照下面的示例使用excel样式"超链接",其中还包括使用单上语名,以防其包含空格(如Neofish提到)。

cell(row, col).value = '=HYPERLINK("#'{}'!A1", "{}")'.format(sheet_name_with_spaces, "Link Name")
cell(row, col).style = 'Hyperlink'
import openpyxl as opxl
import pandas as pd
def hyperlinking(New_file_path):
    xls = pd.ExcelFile(New_file_path)
    sheets = xls.sheet_names
    wb = opxl.load_workbook(New_file_path)
    ws = wb.create_sheet("Consolitated_Sheet")
    ws['A1'] = "Sheet_Name"; ws['B1'] = "Active_link"
    for i, j in enumerate(sheets):
        # print('A'+str(i+2) + ' value is: ' + j)
        ws['A' + str(i + 2)] = j
        ws['B' + str(i + 2)].value = '=HYPERLINK("%s", "%s")' % ('#' + str(j) + '!A1', 'Clickhere')
    wb.save(New_file_path)
    wb.close()

一些答案真的不符合我的案子(我没有说错了:)我的excel文件很奇怪),所以我做了一些实验,并且此代码正常工作对我。

建议何时"首先"单元" A1"单击我们移动到Sheet&quot'单元格" a1"

sheet_to_move= 'second'
cell_to_move= 'A1'
first_sheet['A1'].hyperlink.location= f"'{sheet_to_move}'!{cell_to_move}"
first_sheet['A1'].hyperlink.display= f"'{sheet_to_move}'!{cell_to_move}"

最新更新