python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下,关于基础课程项目也可以私聊我!

视频+源码:

链接:https://pan.quark.cn/s/2055653f735b

之前我们已经学习了如何读取和写入Execl数据,今天我们来用一个实例来进行表格的合并。如下是

2021年4个季度的销售数据明细。我们把它放在了D盘2021年销售明细的文件夹下。

每一个季度销售数据里又包含三个月的具体明细,每个月的销售记录都有1000多条,现在需要批量合

并4个工作簿,共计12张表,使用Ctrl+C、Ctrl+V功能已经不能很好的解决这里的问题,这里我们就可以用

代码解决。

上代码:

python 复制代码
import time
from openpyxl import Workbook, load_workbook
import os

def 合并表格(file_dir, save_dir):
    files_name = os.listdir(file_dir)
    # 创建新表格
    new_wb = Workbook()
    new_ws = new_wb.active
    header = ['销售日期', '员工工号', '销售员', '货号', '销售单号', '销量', '销售额']
    new_ws.append(header)

    # 向新的表格写入数据
    for file_name in files_name:
        wb = load_workbook(file_dir + "\\" + file_name)
        for sheet in wb.sheetnames:
            ws = wb[sheet]
            # 设置values_only=True 则可以直接得到单元格中的值
            for row in ws.iter_rows(min_row=2, values_only=True):
                new_ws.append(row)
    print('全年销售数据为 %s 行' % (new_ws.max_row - 1)) # 去除第一行标题剩下的则为全年销
售数据总行数
    # 数据保存
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    new_wb.save(save_dir + "\\" + "全年数据.xlsx")

if __name__ == '__main__':
    开始时间 = time.time()
    合并表格(r"D:\2021年销售明细", r"D:\2021年销售分析")
    print('合并完成耗时:', time.time() - 开始时间, "秒")

运行结果:

全年销售数据为 13065 行

合并完成耗时: 6.565231084823608 秒

代码很简单,首先使用os库,循环遍历D:\2021年销售明细 目录下所有文件,然后再使用openpyxl库循环遍历单元格中的数据,并且导入,合并结果保存到【全年数据,xsx】文档下。从结果可以看出总共合并了13065行数据,只花了不到7秒钟。

我们打开看下【全年数据.xlsx】可以看到行数计数是跟代码统计的行数相吻合的。

自我演示如下:

python 复制代码
import time  #导入 time 模块,以便使用时间相关的功能,比如测量程序运行时间。
from openpyxl import Workbook, load_workbook  #从 openpyxl 库导入 Workbook 和 load_workbook 类。这两个类用于创建和加载 Excel 工作簿。
import os  #导入 os 模块,用于处理文件和目录路径等操作。

def 合并表格(file_dir, save_dir):  #定义一个名为 合并表格 的函数,它接受两个参数:file_dir(包含要合并的 Excel 文件的目录路径)和 save_dir(保存合并结果的目录路径)。
    files_name = os.listdir(file_dir)  #使用 os.listdir 函数列出 file_dir 目录下的所有文件和目录的名称,并将这些名称存储在 files_name 列表中。
    print(files_name)  #打印 files_name 列表的内容,这样你可以看到 file_dir 目录中的所有文件和目录名称。

    new_wb = Workbook()     #这里新建一个工作铺,相当新建一个文件夹
    new_ws = new_wb.active  #新建一个Excel表格
    header = ['销售日期', '员工工号', '销售员', '货号', '销售单号', '销量', '销售额']  #表格的头部
    new_ws.append(header)   #将表格的头部加入到新建的表格中去

    for file_name in files_name:   #利用for循环遍历将几个旧表格内容添加到新表格中
        if file_name.endswith('.xlsx'):  #检查文件名是否以 .xlsx 结尾,以确定它是否是一个 Excel 文件。
            file_path = os.path.join(file_dir, file_name)#构建 Excel 文件的完整路径,file_dir 是文件夹路径,file_name 是文件名。
            wb = load_workbook(file_path)#使用 openpyxl 库的 load_workbook 函数加载 Excel 文件,以便在代码中进一步处理这个工作簿。

            for sheet in wb.sheetnames:  #遍历工作簿中的所有工作表名称。
                ws = wb[sheet]  #获取当前工作表对象 ws。
                for row in ws.iter_rows(min_row=2, values_only=True):  #遍历当前工作表中的所有数据行,从第二行开始(跳过表头),并且只获取单元格的值,不包括单元格格式。
                    new_ws.append(row)  #将遍历到的数据行 row 添加到新工作表 new_ws 中

    if not os.path.exists(save_dir):  #检查保存目录 save_dir 是否存在。如果不存在,则创建这个目录。
        os.makedirs(save_dir)  #创建最终保存文件的完整路径,save_dir 是保存目录,"全年数据.xlsx" 是文件名。

    save_path = os.path.join(save_dir, "全年数据.xlsx")  #创建最终保存文件的完整路径,save_dir 是保存目录,"全年数据.xlsx" 是文件名。
    new_wb.save(save_path)  #将新创建的工作簿 new_wb 保存到上述路径。

if __name__ == '__main__':  #确保只有在脚本被直接运行时,才会执行以下代码块。
    开始时间 = time.time()  #记录脚本开始运行的时间。
    合并表格(r"D:\2021年销售明细", r"D:\2021年销售汇总")  #调用 合并表格 函数,传入输入和输出目录。
    print('合并完成耗时:', time.time() - 开始时间, "秒")  #打印合并过程的耗时。

以上是我演示有什么不懂的地方可以私信我!谢谢阅读!可以技术交流!

相关推荐
和鲸社区12 分钟前
《斯坦福CS336》作业1开源,从0手搓大模型|代码复现+免环境配置
人工智能·python·深度学习·计算机视觉·语言模型·自然语言处理·nlp
F2E_Zhangmo18 分钟前
基于cornerstone3D的dicom影像浏览器 第二章 加载本地文件夹中的dicom文件并归档
前端·javascript·css
用户214118326360234 分钟前
Nano Banana免费方案来了!Docker 一键部署 + 魔搭即开即用,小白也能玩转 AI 图像编辑
前端
豌豆花下猫44 分钟前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai
THMAIL1 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
Zacks_xdc1 小时前
【前端】使用Vercel部署前端项目,api转发到后端服务器
运维·服务器·前端·安全·react.js
给月亮点灯|1 小时前
Vue基础知识-脚手架开发-使用Axios发送异步请求+代理服务器解决前后端分离项目的跨域问题
前端·javascript·vue.js
wheeldown1 小时前
【数学建模】数据预处理入门:从理论到动手操作
python·数学建模·matlab·python3.11
多打代码2 小时前
2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
python·算法
张迅之2 小时前
【React】Ant Design 5.x 实现tabs圆角及反圆角效果
前端·react.js·ant-design