如何创建指向同一工作簿中的其他Excel工作表的超链接

时间:2015-05-07 19:55:12

标签: python excel hyperlink openpyxl

我正在使用模块openpyxl for 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&#39 ;;但是,我不知道需要改变什么或者我必须写什么样的路径。

我正在使用Python 2.7.6和Excel 2013。

6 个答案:

答案 0 :(得分:10)

我找到了办法。

假设一个.xlsx文件命名为' workbookEx.xlsx '有两张名为' sheet1 '和' sheet2 '并且需要来自 sheet1 ' sheet1 的一个单元格( A1 )的链接到' sheet2的另一个单元格( 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'

答案 1 :(得分:3)

另一个有效的解决方案是使用内置函数HYPERLINK的excel。 它不会将单元格中的值转换为超链接,而是将公式放在单元格中,并像超链接一样运行。

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

答案 2 :(得分:3)

作为Marcus.Luck的答案的附录,如果想直接使用Excel的内置超链接功能,您可能需要格式化为:

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

如果没有这种格式化,文件就不会打开而不需要修复,这会在点击链接时删除单元格值。

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

答案 3 :(得分:1)

对openpyxl中的超链接的支持目前非常简陋,主要限于阅读现有文件中的链接。

答案 4 :(得分:0)

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()

答案 5 :(得分:0)

除了前面的答案外,格式化单元格以使其看起来像在Excel中创建的超链接也很有用。为此,请使用名为“ Hyperlink”的Excel样式,如下例所示,该样式还包括在工作表名称周围使用单引号的情况(如果它们包含空格)(如Neofish所述)。

cell(row, col).value = '=HYPERLINK("#\'{}\'!A1", "{}")'.format(sheet_name_with_spaces, "Link Name")
cell(row, col).style = 'Hyperlink'