最近做些資料處理,要給Excel表單元格根據規則批次生成超連結,選了一圈發現pandas+openpyxl能較好滿足需求。
我需要根據表格1的【程式碼】【名稱】列,呼叫函式生成連結到新表格的【連結1】【連結2】列:
原始檔: 目標檔案(含有連結):
直接上程式碼。要先裝好pandas和openpyxl。pip install pandas openpyxl
import pandas as pd
def process_urls(filename='data\\20241209.xlsx'): # 傳入原始檔路徑
# pandas用openpyxl引擎讀取Excel檔案,獲取原始檔的第1、2列
df = pd.read_excel(filename,engine = 'openpyxl',usecols = [0,1])
'''
【連結1】生成邏輯:
1. HYPERLINK函式格式: =HYPERLINK(link_location, [friendly_name])
2. Series.apply(),對df['程式碼']這個序列的所有元素,執行str()和url_gen()函式,生成 link_location
3. Series.apply(),對df['程式碼']這個序列的所有元素,執行str()rjust()函式,生成 friendly_name
'''
df['連結1'] = '=HYPERLINK("' + df['程式碼'].apply(url_gen,args=(0,)) + '","' + df['程式碼'].apply(str).apply(str.rjust,args=(6,'0')) + '")'
'''
【連結2】生成邏輯:
1. HYPERLINK函式格式: =HYPERLINK(link_location, [friendly_name])
2. Series.apply(),對df['程式碼']這個序列的所有元素,執行str()和url_gen()函式,生成 link_location
3. 直接使用df['名稱']列生成 friendly_name
'''
df['連結2'] = '=HYPERLINK("' + df['程式碼'].apply(url_gen, args=(1,)) + '","' + df['名稱'] + '")'
# 在原始檔名後加上_out生成新檔名
file_out= insert_string(filename,-5,'_out')
'''
df.to_excel():
index=False 不寫入DataFrame索引,
header=True 寫入欄位名,
startrow=0, startcol=0 從Excel的1行A列開始寫入
'''
df.to_excel(file_out, index=False, header=True, startrow=0, startcol=0)
def insert_string(string, index, insert_str):
# 在字串特定位置插入新字串
return string[:index] + insert_str + string[index:]
def url_gen(code,type):
scode = str(code).strip()
if len(scode) < 6:
scode = scode.rjust(6, '0')
if type == 0:
pass # 具體邏輯不展示了
elif type == 1:
pass
else:
pass