python操作excel:批量為多個sheet頁生成超連結

2021-03-06 數據分析修煉記
python操作excel:批量為多個sheet頁生成超連結

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

相關焦點

  • python操作excel:批量生成超連結
    excel設置超連結的函數是HYPERLINK,這裡用python批量生成超連結的思想其實很簡單,就是將公式寫入excel就行。
  • 如何將EXCEL中多個sheet頁的數據合併到一個sheet頁?
    有時候我們會遇到這樣的問題,想要將Excel中多個sheet頁的數據放到一個sheet頁展示,因為數據太多,複製粘貼操作就會是一件非常麻煩的事情,那
  • Python操作Excel,將匯總數據分到不同sheet
    方法一:讀取原Excel,根據country列將不同的內容放到不同的sheet,並根據國家名稱命名,將結果放到新的輸出文件中。import pandas as pdinput_file = "F://python入門//數據2//appname_test.xlsx"output_file = "F://python入門//數據2//output.xlsx"data_frame = pd.read_excel(input_file,sheet_name='sum1'
  • 【答疑】VBA批量自動生成Sheet超連結
    有超連結的Sheet目錄?目的是把所有的Sheet在目錄表中製作成超連結的形式,點擊跳轉。這裡我先不給出答案,我給出我來做這個思路:我想到要做目錄,首先要對所有的Sheet進行循環遍歷,獲取Sheet的名字,然後在目錄表中列出來每個Sheet的名字,並且添加超連結
  • 用Excel批量生成超連結與提取URL網址(附練習數據)
    非結構化數據分析處理時,有時會遇到大量的超連結數據,主要有兩方面的處理需求,一個是如何將文本和URL網址批量生成超連結,另一個是則恰好相反,如何將大量超連結分解為文本和URL。A列是文本標題,B列是URL網址,現在需要在C列生成超連結。此時需要使用excel的HYPERLINK()超連結函數。
  • python生成excel文件的三種方式
    來源:經授權轉自 AI碼科技(ID:eleven_bmw)作者 :臭榴槤在我們做平常工作中都會遇到操作excel,那麼今天寫一篇,如何通過python操作excel當然python操作excel的庫有很多,比如pandas,xlwt/xlrd,openpyxl等,每個庫都有不同的區別,具體的區別,大家一起來看看吧~xlrd是對於Excel進行讀取,xlrd 操作的是
  • python批量生成合同
    對於批量操作合同文件,逐個去比對替換文件
  • 詳解Python操作Excel文件
    前言本篇文章主要總結了一下利用python操作Excel文件的第三方庫和方法。常見庫簡介1.xlrdxlrd是一個從Excel文件讀取數據和格式化信息的庫,支持.xls以及.xlsx文件。支持Excel操作。4.xlwingsxlwings是一個可以實現從Excel調用Python,也可在python中調用Excel的庫。
  • excel超連結應用:快速生成目錄的幾個方法-上
    目錄的設置方法有很多種,但大多數人使用的方法還是基本的手動插入超連結的操作。雖然這個方法也行,但是將大大降低你的工作效率,那麼今天,我們將給大家分享在excel中生成目錄的6種方法,保證招招精彩,趕緊來看看吧!(由於篇幅原因,文章將分為上下兩篇,本篇為上篇。)
  • Python辦公自動化 | 批量word報告生成工具
    有時候我們需要按照某種規則生成一種固定模板的word報告,python能夠很好的完成這項工作。
  • 文職美女上班手動用Excel表格太麻煩,當學會python後easy操作
    通過程序操作excel表格是編程中比較常見的操作,python本身不能直接操作excel,需要安裝第三方的模塊來實現excel的操作。Python中可以操作excel模塊主要有:1、xlrd 模塊實現exlcel表格讀取2、xlwd 模塊實現excel表格創建和寫入3、pandas模塊也可以實現excel常規操作
  • 氣象編程 | 使用python操作Excel文件
    今天使用Python來操作Excel。python操作Excel的庫有很多,大概有xlrd、xlwt、openpyxl、XlsxWriter、xlutils、pandas等。這些庫的操作對xls和xlsx的支持不同,有個只可以操作xls,有的只可以進行讀操作。
  • excel超連結應用:快速生成目錄的幾個方法-下
    在上篇文章中,我們說到了基本的製作目錄的方法,以及用宏表函數和超連結函數製作目錄、用快捷鍵CTRL+F製作目錄的方法。今天我們要分享的另外三種方法,保證小夥伴們聞所未聞見所未見,一個公式都不用,就能完成目錄的製作,是不是有點好奇呢?趕緊來看看吧!
  • excel超連結應用:快速生成目錄的幾個方法-下
    ② 自動生成「超連結列表」 點擊「文件」-「信息」,在「檢查工作簿」的左側,「檢查問題」的下拉選項中,點擊「檢查兼容性」。 在彈出的「兼容性檢查器」窗口中,點擊「複製到新表」,生成「兼容性報表」。此時,大家可以發現,在剛剛生成的「兼容性報表」中,E列已經自動生成了帶連結的工作表名稱。原理:「=xfd1」表示等於excel中第16384列單元格的數據,由於03版本的excel僅支持256列*65536行的工作表格式,因此無法兼容該公式。使用檢查功能就可以列出03版本的excel不能兼容的數據所在的工作表名。
  • Python文件操作實例:將Dataframe寫入到Excel的多個sheet中
    大家日常會經常操作Excel,本期介紹下Python如何將Dataframe數據寫入到Excel的多個sheet中。
  • python+xlrd+xlwt操作excel
    小強python全棧自動化測試培訓班招生中,預計開課時間為18年3月份在2017年10月之前報名並繳納全部費用的童鞋優惠
  • 【他山之石】Python和Excel終於可以互通了,自動化辦公實操寶典速來下載!
    《Python自動化辦公寶典》 共包含六個章節97頁,不僅有詳細的代碼解釋,而且還有詳細的圖文說明,通俗易懂,讓你輕鬆完成辦公自動化。使用PyPDF2和pdfplumber操作pdf;章節一:python使用openpyxl操作excel1、openpyxl庫介紹2、python怎麼打開及讀取表格內容?sheet.cell(row=, column=)方式3、python如何向excel中寫入某些內容?
  • 14-用Python 讀寫 Excel 文件
    僅在 Windows 中使用XlsxWriter[9]Xlsx是python用來構造xlsx文件的模塊,可以向excel2007+中寫text,numbers,formulas 公式以及hyperlinks超連結。
  • 【Python技術進階-7】使用Python的xlrd操作Excel文檔詳細指南
    這個Excel文檔有33個sheet頁,除了第一個sheet頁的名稱是「綜合」外,其它每個sheet頁的名稱是中國每個省份的名稱,每個省的sheet頁中記錄了這個省所有市以及區縣的記錄。總之,數據量雖然不是很多,但也不少,人工提取的話,這工作量可不少。
  • SpringBoot動態生成多個Excel文件以壓縮包.zip格式下載
    ,就是用戶選擇文件內容,伺服器端根據選擇的數據生成某個格式的文件然後下載到客戶端。單個嘛直接下載,多個打包下載咯!項目場景項目中有個數據導出excel的需求,而且是批量,那麼就要打包咯解決步驟基本實現如下:我不想廢話了,上代碼:直接把文件輸出流放到壓縮流ZipOutputStream