如何在同一工作簿中创建指向不同 Excel sheet 的超链接
How to create a hyperlink to a different Excel sheet in the same workbook
我正在为 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。
openpyxl 中对超链接的支持目前非常简陋,主要限于读取现有文件中的链接。
我找到了一种方法。
假设一个名为“workbookEx.xlsx”的 .xlsx 文件有两个名为“sheet1[的 sheet” =30=]' 和 'sheet2' 并且需要来自一个单元格 (A1) 的 link 'sheet1' 到 'sheet2[= 的另一个单元格 (E5) 30=]':
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 没有显示,但它对同一个文件使用“#”links,我只需要复制同一个文件link 在 Excel 中创建到 Word 文档以查看“#”。
也可以省略文件名,即 link 针对活动文档的 sheet 只需使用:_cell.hyperlink = '#sheetName!A1'
.
要命名您刚刚创建的 link,只需将单元格值设置为所需的字符串:_cell.value = 'Linkname'
.
另一个可行的解决方案是使用 excel 内置函数 HYPERLINK。
它不会将单元格中的值变成超链接,而是将公式放入单元格中并充当超链接。
ws.cell('A1').value = '=HYPERLINK("#sheet2!E5","Link name")'
补充Marcus.Luck的回答,如果想直接使用Excel内置的超链接功能,可能需要格式化为:
'=HYPERLINK("{}", "{}")'.format(link, "Link Name")
如果没有这种格式,我无法在不需要修复的情况下打开文件,这会在单击链接时删除单元格值。
例如ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")
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 中创建的超链接也很有用。为此,请使用名为 "Hyperlink" 的 Excel 样式,如下例所示,其中还包括在 sheet 名称周围使用单引号,以防它们包含空格(如 Neofish 所述)。
cell(row, col).value = '=HYPERLINK("#\'{}\'!A1", "{}")'.format(sheet_name_with_spaces, "Link Name")
cell(row, col).style = 'Hyperlink'
我正在为 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。
openpyxl 中对超链接的支持目前非常简陋,主要限于读取现有文件中的链接。
我找到了一种方法。
假设一个名为“workbookEx.xlsx”的 .xlsx 文件有两个名为“sheet1[的 sheet” =30=]' 和 'sheet2' 并且需要来自一个单元格 (A1) 的 link 'sheet1' 到 'sheet2[= 的另一个单元格 (E5) 30=]':
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 没有显示,但它对同一个文件使用“#”links,我只需要复制同一个文件link 在 Excel 中创建到 Word 文档以查看“#”。
也可以省略文件名,即 link 针对活动文档的 sheet 只需使用:_cell.hyperlink = '#sheetName!A1'
.
要命名您刚刚创建的 link,只需将单元格值设置为所需的字符串:_cell.value = 'Linkname'
.
另一个可行的解决方案是使用 excel 内置函数 HYPERLINK。 它不会将单元格中的值变成超链接,而是将公式放入单元格中并充当超链接。
ws.cell('A1').value = '=HYPERLINK("#sheet2!E5","Link name")'
补充Marcus.Luck的回答,如果想直接使用Excel内置的超链接功能,可能需要格式化为:
'=HYPERLINK("{}", "{}")'.format(link, "Link Name")
如果没有这种格式,我无法在不需要修复的情况下打开文件,这会在单击链接时删除单元格值。
例如ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")
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 中创建的超链接也很有用。为此,请使用名为 "Hyperlink" 的 Excel 样式,如下例所示,其中还包括在 sheet 名称周围使用单引号,以防它们包含空格(如 Neofish 所述)。
cell(row, col).value = '=HYPERLINK("#\'{}\'!A1", "{}")'.format(sheet_name_with_spaces, "Link Name")
cell(row, col).style = 'Hyperlink'