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

wswtfjt7  于 2023-02-05  发布在  其他
关注(0)|答案(7)|浏览(208)

我正在使用Python的openpyxl模块,并试图创建一个超链接,它将把我带到同一个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。

jecbmhm3

jecbmhm31#

我找到了一个办法。
假设一个名为"workbookEx. xlsx"的. xlsx文件具有两个名为"sheet1"和"sheet2"的工作表,并且需要从"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'.

vybvopom

vybvopom2#

作为Marcus.Luck答案的补充,如果想直接使用Excel内置的超链接功能,可能需要将格式设置为:
'=HYPERLINK("{}", "{}")'.format(link, "Link Name")
如果没有这种格式,文件不需要修复就不会打开,这会在单击链接时删除单元格值。
例如ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")

niknxzdl

niknxzdl3#

另一个可行的解决方案是使用excel内置的HYPERLINK函数,它不是将单元格中的值设置为超链接,而是在单元格中放置一个公式,使其起到超链接的作用。

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

nqwrtyyt4#

openpyxl中对超链接的支持目前还非常初级,很大程度上局限于阅读现有文件中的链接。

fhity93d

fhity93d5#

除了前面的答案,格式化单元格使其看起来像在Excel中创建的超链接也很有用。要做到这一点,请使用名为“超链接”的Excel样式,如下例所示,其中还包括在工作表名称周围使用单引号,以防它们包含空格(如Neofish所提到的)。

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

guz6ccqo6#

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

vltsax257#

有些答案并不真正适合我的情况(我没有说错:)我的excel文件只是奇怪),所以我做了一个小实验,这段代码对我来说工作得很完美。
建议在单击工作表“第一个”单元格“A1”时移动到工作表“第二个”单元格“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}"

相关问题