Python--openpyxl合并多个Excel文件并保留超链接格式

网上搜的方法,大多都是在一个excel中对每个表来新建另一个工作表保存来实现合并,而不是在一个工作表中合并所有表

1、准备工作

首先我们需要准备3样东西

(1)需要用到的库,缺少的手动pip下载下

  

          (2)需要合并的表

                    Python--openpyxl合并多个Excel文件并保留超链接格式_第1张图片

                    表1 的数据

                     表2 的数据

          (3)最后生成的总表

                    Python--openpyxl合并多个Excel文件并保留超链接格式_第2张图片

2、大致思路

1、需要先获取到目标文件夹下的所有xlsx文件

2、打开/新建一个xlsx总表用于写入(合并)所有表数据

3、打开每个目标xlsx表,开始写入数据

4、对写入的数据作判断

        --如果是超链接,需要保留其格式并写入

        --如果不是超链接,正常写入

5、当前表写完数据后记住最后的行数,便于下个表续写追加内容

6、需要对后续表的首行作判断,用于删除多余的表头

3、代码实现

#!/usr/bin/python3
# --*-- coding: utf-8 --*--

import os

from openpyxl import load_workbook
from openpyxl.styles import Font

"""
1、需要先获取到目标文件夹下的所有xlsx文件
2、打开/新建一个xlsx总表用于写入(合并)所有表数据
3、打开每个目标xlsx表,开始写入数据
4、对数据判断,
--如果是超链接,需要保留其格式并写入
--如果不是超链接,正常写入
5、当前表写完数据后记住最后的行数,便于下个表续写追加内容
6、需要对后续表的首行作判断,用于删除多余的表头
7、保存表
"""


def form_merge():
    """文件合并"""
    result_path = os.getcwd().split('common')[0] + '\\excel_file\\'   # 获取目标文件夹
    file_list, start_row = [], 0
    for i, j, k in os.walk(result_path):  # 1、遍历获取目标文件夹下的所有xlsx文件
        file_list = k
    file_list = filter(lambda x: 'xlsx' in x, file_list)  # 过滤掉不是xlsx格式的文件
    lb = load_workbook('./test.xlsx')
    sheet = lb['Sheet1']   # 2、打开/新建一个xlsx总表用于写入(合并)所有表数据
    for file in file_list:
        lb1 = load_workbook(result_path + file)
        sheet1 = lb1['Sheet1']  # 3、打开每个目标xlsx表,开始写入数据
        for row in range(1, sheet1.max_row + 1):
            for column in range(1, sheet1.max_column + 1):
                value = sheet1.cell(row, column).value  # 数据的文本
                link = sheet1.cell(row, column).hyperlink  # 数据的hyperlink对象
                if row == 1 and start_row != 0:  # 6、需要对后续表的首行作判断,用于删除多余的表头
                    row += 1
                    start_row -= 1
                if link is not None:  # 4、对数据判断
                    sheet.cell(row + start_row, column, value).hyperlink = sheet1.cell(row, column).hyperlink  # --如果是超链接,需要保留其格式并写入
                    font_blue = Font(color='0072E3', underline="single")
                    sheet.cell(row + start_row, column, value).font = font_blue
                else:  # --如果不是超链接,正常写入
                    sheet.cell(row + start_row, column, value)
        start_row += sheet1.max_row  # 5、当前表写完数据后记住最后的行数,便于下个表续写追加内容
    lb.save('result_file.xlsx')  # 7、保存表




if __name__ == '__main__':
    form_merge()

4、注意事项

在执行代码之前一定要将excel关闭,否则会报错

确认工作表名是否为Sheet1,不是就改

5、拓展延伸

(1)使用爬虫(scrapy、selenium、request...),下载目标报表,实现自动生成excel表。就不用自己手动生成/导出报表

(2)通过邮件发送、企业群机器人(smtp、request)消息推送来发送合并后的excel文件。就不用自己发送合并后的报表给领导

(3)走通CI/CD(云效、jenkins),定时执行代码。就不用每次自己去执行代码来生成报表

(4)....

当所有技术成熟后,让定时任务去帮我们完成所有事情,领导就不用每次都找我们要报表了,我们到时候就可以干其他事了

当然了,具体需要实现成什么效果,使用什么手段,那就看个人需求了

你可能感兴趣的:(python,开发语言,自动化)