python給excel單元格批次生成超連結(pandas+openpyxl)

水天需發表於2024-12-10

最近做些資料處理,要給Excel表單元格根據規則批次生成超連結,選了一圈發現pandas+openpyxl能較好滿足需求。

我需要根據表格1的【程式碼】【名稱】列,呼叫函式生成連結到新表格的【連結1】【連結2】列:

原始檔: image 目標檔案(含有連結):image

直接上程式碼。要先裝好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

相關文章