python操作excel:批量为多个sheet页生成超链接

python操作excel:批量为多个sheet页生成超链接


需求

excel文件内存在多个sheet页,想要将总表中的信息进行关联和对应的sheet页进行关联,可以通过总表部分,快速调到特定的sheet页。一看excel里边要为好几百个sheet页加超链接,看着都头大。
在这里插入图片描述
有问题,相应的就有解决问题的对策。

解决办法

网上其实有很多办法,就不一一说明了。直接总结下自己的处理办法。

最基本的原理就是对 **HYPERLINK函数**的使用。

HYPERLINK函数的语法1如下:

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) # 总表
    

常有问题是一种好现象,说明你是在走上坡路!


  1. hyperlink函数用法介绍 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_42521211/article/details/113958073