@toc[1]
需求excel文件內存在多個sheet頁,想要將總表中的信息進行關聯和對應的sheet頁進行關聯,可以通過總表部分,快速調到特定的sheet頁。一看excel裡邊要為好幾百個sheet頁加超連結,看著都頭大。有問題,相應的就有解決問題的對策。
解決辦法網上其實有很多辦法,就不一一說明了。直接總結下自己的處理辦法。
最基本的原理就是對 **HYPERLINK函數**的使用。
HYPERLINK函數的語法^1[2]如下:
HYPERLINK(link_location,friendly_name). 說明:HYPERLINK 為函數名 link_location 為連結位置 friendly_name 為顯示文本
舉例:
比如A1單元格,輸入公式:=HYPERLINK("#B8","跳轉到B8") 意思是單擊A1單元格,將跳轉到B8單元格。
因此,就是對我們想要進行添加超連結的單元格,賦值為:**"=HYPERLINK(link_location,friendly_name)"** ,主要是對參數link_location和參數friendly_name 的迭代更新。
看一個具體的表格信息:針對這一表格,對應的python實現如下:
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
filename = r'超連結測試文件.xls'
data = pd.read_excel(filename,sheet_name=None) # sheet_name參數,很重要,在這裡
with pd.ExcelWriter('添加超連結後的文件.xls',engine='xlsxwriter') as writer:
sheet_names = list(data.keys())
for s_name in sheet_names[1:]:
# 生成超連結字符串
hypre_link = r'=HYPERLINK("#'+s_name+'!a1' + '\",\"'+s_name+ '")'
flag = data['總表']['table_comment']==s_name
print(hypre_link)
data['總表'].ix[flag,1] = hypre_link
data[s_name].to_excel(writer,sheet_name=s_name,index=False)
data['總表'].to_excel(writer,sheet_name='總表',index=False)列印出來的超連結函數值:
=HYPERLINK("#行政許可信息!a1","行政許可信息")
=HYPERLINK("#問題臺帳!a1","問題臺帳")
=HYPERLINK("#公告信息!a1","公告信息")
=HYPERLINK("#公告記錄!a1","公告記錄")
=HYPERLINK("#更正公告信息!a1","更正公告信息")完美可以跳轉,結果文件如下圖所示:
上述源碼和測試文件結果,想全部獲取的可以掃碼關注微信公眾號,回復關鍵字【超連結】,來獲取下載。
舉一反三
上述案例說明的是對excel內部的sheet頁進行添加超連結。其實,對於想要超連結其他的文件處理的思路都是一樣的,就是對 HYPERLINK(link_location,friendly_name) 函數的參數賦予相應的位置信息而已。
下述的代碼案例,相對來說比較複雜,主要是我的個人工作內容的一個備份。看到此處的博友可以忽略。
import pandas as pd
import re
import warnings
warnings.filterwarnings('ignore')
idc_filename = r'C:\Users\14369\Desktop\20210222 idc信息處理\idc同步數據統計表20201231.xlsx'
datamulu_filename = r'C:\Users\14369\Desktop\20210222 idc信息處理\數據20201215.xlsx'
idc_data = pd.read_excel(idc_filename)
# datamulu = pd.read_excel(datamulu_filename)
datamulu = pd.read_excel(datamulu_filename,sheet_name=None)
idc_data_copy = idc_data.copy(deep=True)
#聲明一個讀寫對象
counts = 0 # 記錄處理了幾個文件
with pd.ExcelWriter('result.xls',engine='xlsxwriter') as writer:
# 插入對應的表欄位
for comment in idc_data['table_comment']:
for sheetname in datamulu.keys():
try:
name = re.split(r'[-_]',comment)[1]
except:
print(comment)
continue
flags = [name in m for m in datamulu[sheetname]['數據資源名稱']]
if sum(flags)>0:
counts +=1
# print(counts,comment)
temp_data = datamulu[sheetname].ix[flags,:]
temp_data.to_excel(writer,sheet_name=name,index=False)
# 生成超連結字符串並修改對應的表格位置內容
hypre_link = r'=HYPERLINK("#'+name+'!a1' + '\",\"'+comment+ '")'
idc_data_copy.ix[idc_data['table_comment']==comment,1] = hypre_link
break
idc_hyp_true = ['HYPERLINK' in com for com in idc_data_copy['table_comment']]
idc_hyp_false = [not i for i in idc_hyp_true]
idc_data_copy.ix[idc_hyp_true,:].to_excel(writer,sheet_name='tab20201231_有超連結',index=False) # 總表
idc_data_copy.ix[idc_hyp_false,:].to_excel(writer,sheet_name='tab20201231_無超連結',index=False) # 總表常有問題是一種好現象,說明你是在走上坡路!
References[1] toc: 目錄
[2] ^1: [hyperlink函數用法介紹](http://www.ittribalwo.com/article/1215.html)