如何批量结构化分汇多工作表sheet?

目录

    • 一、如遇合并表格,注意结构化
    • 二、确认主键,合并所有文件数据
    • 三、sheet2同理
    • 四、案例总结

如果遇到这样情形,多文件夹多文件,多工作表的分汇场景;可以参考以下方法解决。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、如遇合并表格,注意结构化

首先在汇总以前,保证第一列表,合并列结构化为基本单元格。
(一)定义函数,遍历文件
定义函数ycl1(),先遍历B文件夹下C文件夹路径即“1月数据”“2月数据”“3月数据”

def ycl1(): #结构化数据sheet1# 设置文件夹路径folder_pathss = r"C:\Users\Desktop\A\B"    ## 第一处要改!!!!!!!!!folder_paths = [os.path.join(folder_pathss, file) for file in os.listdir(folder_pathss)] # os.listdir(folder_pathss)遍历folder_pathss下所有文件

(二)结构化工作表sheet1
再遍历filename的工作表1
filname是以“1月数据”为例下所有.xlsx文件
file_pathfilename的路径
结构化遍历所有文件后,注意自定义一个空文件夹(例如“test”)保存

 for folder_path in folder_paths:	//遍历例如“1月数据”“2月数据”“3月数据”文件夹# 创建一个新的工作簿用于合并数据merged_workbook = Workbook()  # Create a new workbook# 遍历文件夹中的所有文件for filename in os.listdir(folder_path):if filename.endswith(".xlsx"):  # 只处理Excel文件!!!!!!!file_path = os.path.join(folder_path, filename)# 1.加载数据work_book = load_workbook(filename=file_path, data_only=True) # 控制带有公式的单元格是否具有公式(默认值)sheet = work_book["Sheet1"]  # 假设所有文件的工作表名称相同## 第二处要改!!!!!!可以根据自己表格名字修改 定义Sheet_name = filename[:-5] sheet = work_book[Sheet_name]# 2. 找出所有的合并单元格的索引信息mc_range_list = [str(item) for item in sheet.merged_cells.ranges]# 3. 批量取消合并单元格,填充数据for mc_range in mc_range_list:# 取得左上角值的坐标top_left, bot_right = mc_range.split(":")  # ["A1", "A12"]top_left_col, top_left_row = sheet[top_left].column, sheet[top_left].row  # (1, 1,)bot_right_col, bot_right_row = sheet[bot_right].column, sheet[bot_right].row  # (1, 12,)# 记下该合并单元格的值cell_value = sheet[top_left].value # 取消合并单元格sheet.unmerge_cells(mc_range)# 批量给子单元格赋值# 遍历列for col_idx in range(top_left_col, bot_right_col + 1):# 遍历行for row_idx in range(top_left_row + 1, bot_right_row + 1):sheet[f"{chr(col_idx + 64)}{row_idx}"] = cell_value# 4. 删除前三行和最后一行  根据表格情况修剪行!!!!!sheet.delete_rows(1, 2)sheet.delete_rows(sheet.max_row)# 保存更改file_paths = file_path[:22] + '\\test\\' + filename  ## 第三处要改 自定义保存路径!!!!!!!print(file_paths)work_book.save(file_paths)#将数据合并到新的工作簿中for row in sheet.iter_rows(values_only=True):merged_workbook.active.append(row)

在这里插入图片描述
我这保存在"~/A/test"路径下

二、确认主键,合并所有文件数据

新起一列“时间”作为主键区分,这里的时间直接应用文件名
定义函数merge_excel(folder_paths,output_file),合并test路径下所有文件
这里 folder_paths = "/A/test"main()定义

def merge_excel(folder_paths, output_file): #合并数据# 创建一个空的 DataFrame 用于存储合并后的数据merged_data = pd.DataFrame()# 遍历每个Excelfor excel_files in os.listdir(folder_paths):# # 遍历每个 Excel 文件并处理file_path = os.path.join(folder_paths, excel_files)# 打开 Excel 文件df = pd.read_excel(file_path,sheet_name='Sheet1')# 添加文件名作为新列file_name = os.path.splitext(excel_files)[0]df.insert(0,'时间',file_name)# 将数据添加到 merged_data 中merged_data = pd.concat([merged_data, df], ignore_index=True)merged_data.to_excel(output_file,index=False)

三、sheet2同理

(一)结构化
定义函数ycl2(), 注意修改工作表名,根据表情况修剪非结构化行。

def ycl2(): #结构化sheet2# 设置文件夹路径folder_pathss = r"C:\Users\Desktop\A\B"folder_paths = [os.path.join(folder_pathss, file) for file in os.listdir(folder_pathss)]for folder_path in folder_paths:# 创建一个新的工作簿用于合并数据merged_workbook = Workbook()  # Create a new workbook# 遍历文件夹中的所有文件for filename in os.listdir(folder_path):if filename.endswith(".xlsx"):  # 只处理Excel文件file_path = os.path.join(folder_path, filename)# 1.加载数据work_book = load_workbook(filename=file_path, data_only=True)sheet = work_book["Sheet2"]  # 假设所有文件的工作表名称相同# 2. 找出所有的合并单元格的索引信息mc_range_list = [str(item) for item in sheet.merged_cells.ranges]# 3. 批量取消合并单元格,填充数据for mc_range in mc_range_list:# 取得左上角值的坐标top_left, bot_right = mc_range.split(":")  # ["A1", "A12"]top_left_col, top_left_row = sheet[top_left].column, sheet[top_left].row  # (1, 1,)bot_right_col, bot_right_row = sheet[bot_right].column, sheet[bot_right].row  # (1, 12,)# 记下该合并单元格的值cell_value = sheet[top_left].value # 取消合并单元格sheet.unmerge_cells(mc_range)# 批量给子单元格赋值# 遍历列for col_idx in range(top_left_col, bot_right_col + 1):# 遍历行for row_idx in range(top_left_row + 1, bot_right_row + 1):sheet[f"{chr(col_idx + 64)}{row_idx}"] = cell_value# 4. 删除前三行和最后一行sheet.delete_rows(1, 3)# 保存更改file_paths = file_path[:22] + '\\test\\' + filenamework_book.save(file_paths)# 将数据合并到新的工作簿中for row in sheet.iter_rows(values_only=True):merged_workbook.active.append(row)

(二)汇总
修正sheet_name = Sheet2,合并数据

def merge_excel(folder_paths, output_file): #合并数据# 创建一个空的 DataFrame 用于存储合并后的数据merged_data = pd.DataFrame()# 遍历每个Excelfor excel_files in os.listdir(folder_paths):# # 遍历每个 Excel 文件并处理file_path = os.path.join(folder_paths, excel_files)# 打开 Excel 文件df = pd.read_excel(file_path,sheet_name='Sheet2')# 添加文件名作为新列file_name = os.path.splitext(excel_files)[0]df.insert(0,'时间',file_name)# 将数据添加到 merged_data 中merged_data = pd.concat([merged_data, df], ignore_index=True)merged_data.to_excel(output_file,index=False)

四、案例总结

总体,分为两步骤,一是结构化遍历保存,二是汇总。整理的代码放在末尾了!!!

import pandas as pd
import os
from openpyxl import load_workbook, Workbook
import openpyxl# def change(): #xls转化为xlsxdef ycl1(): #结构化数据sheet1# 设置文件夹路径folder_pathss = r"C:\Users\Desktop\A\B"folder_paths = [os.path.join(folder_pathss, file) for file in os.listdir(folder_pathss)]for folder_path in folder_paths:# 创建一个新的工作簿用于合并数据merged_workbook = Workbook()  # Create a new workbook# 遍历文件夹中的所有文件for filename in os.listdir(folder_path):if filename.endswith(".xlsx"):  # 只处理Excel文件file_path = os.path.join(folder_path, filename)# 1.加载数据work_book = load_workbook(filename=file_path, data_only=True) #控制带有公式的单元格是否具有公式(默认值)sheet = work_book["Sheet1"]  # 假设所有文件的工作表名称相同# 2. 找出所有的合并单元格的索引信息mc_range_list = [str(item) for item in sheet.merged_cells.ranges]# 3. 批量取消合并单元格,填充数据for mc_range in mc_range_list:# 取得左上角值的坐标top_left, bot_right = mc_range.split(":")  # ["A1", "A12"]top_left_col, top_left_row = sheet[top_left].column, sheet[top_left].row  # (1, 1,)bot_right_col, bot_right_row = sheet[bot_right].column, sheet[bot_right].row  # (1, 12,)# 记下该合并单元格的值cell_value = sheet[top_left].value  # 取消合并单元格sheet.unmerge_cells(mc_range)# 批量给子单元格赋值# 遍历列for col_idx in range(top_left_col, bot_right_col + 1):# 遍历行for row_idx in range(top_left_row + 1, bot_right_row + 1):sheet[f"{chr(col_idx + 64)}{row_idx}"] = cell_value# 4. 删除前三行和最后一行sheet.delete_rows(1, 2)sheet.delete_rows(sheet.max_row)# 保存更改file_paths = file_path[:22] + '\\test\\' + filenameprint(file_paths)work_book.save(file_paths)#将数据合并到新的工作簿中for row in sheet.iter_rows(values_only=True):merged_workbook.active.append(row)def ycl2(): #结构化sheet2# 设置文件夹路径folder_pathss = r"C:\Users\Desktop\A\B"folder_paths = [os.path.join(folder_pathss, file) for file in os.listdir(folder_pathss)]for folder_path in folder_paths:# 创建一个新的工作簿用于合并数据merged_workbook = Workbook()  # Create a new workbook# 遍历文件夹中的所有文件for filename in os.listdir(folder_path):if filename.endswith(".xlsx"):  # 只处理Excel文件file_path = os.path.join(folder_path, filename)# 1.加载数据work_book = load_workbook(filename=file_path, data_only=True)sheet = work_book["Sheet2"]  # 假设所有文件的工作表名称相同# 2. 找出所有的合并单元格的索引信息mc_range_list = [str(item) for item in sheet.merged_cells.ranges]# 3. 批量取消合并单元格,填充数据for mc_range in mc_range_list:# 取得左上角值的坐标top_left, bot_right = mc_range.split(":")  # ["A1", "A12"]top_left_col, top_left_row = sheet[top_left].column, sheet[top_left].row  # (1, 1,)bot_right_col, bot_right_row = sheet[bot_right].column, sheet[bot_right].row  # (1, 12,)# 记下该合并单元格的值cell_value = sheet[top_left].value  # 取消合并单元格sheet.unmerge_cells(mc_range)# 批量给子单元格赋值# 遍历列for col_idx in range(top_left_col, bot_right_col + 1):# 遍历行for row_idx in range(top_left_row + 1, bot_right_row + 1):sheet[f"{chr(col_idx + 64)}{row_idx}"] = cell_value# 4. 删除前三行和最后一行sheet.delete_rows(1, 3)# 保存更改file_paths = file_path[:22] + '\\test\\' + filenamework_book.save(file_paths)# 将数据合并到新的工作簿中for row in sheet.iter_rows(values_only=True):merged_workbook.active.append(row)def merge_excel(folder_paths, output_file): #合并数据# 创建一个空的 DataFrame 用于存储合并后的数据merged_data = pd.DataFrame()# 遍历每个Excelfor excel_files in os.listdir(folder_paths):# # 遍历每个 Excel 文件并处理file_path = os.path.join(folder_paths, excel_files)# 打开 Excel 文件df = pd.read_excel(file_path,sheet_name='Sheet1')# 添加文件名作为新列file_name = os.path.splitext(excel_files)[0]df.insert(0,'时间',file_name)# 将数据添加到 merged_data 中merged_data = pd.concat([merged_data, df], ignore_index=True)merged_data.to_excel(output_file,index=False)def merge_excel_sheets(folder_paths, output_file): #合并数据# 创建一个空的 DataFrame 用于存储合并后的数据merged_data = pd.DataFrame()# 遍历每个Excelfor excel_files in os.listdir(folder_paths):# # 遍历每个 Excel 文件并处理file_path = os.path.join(folder_paths, excel_files)df = pd.read_excel(file_path,sheet_name='Sheet2')# 添加文件名作为新列file_name = os.path.splitext(excel_files)[0]df.insert(0,'时间',file_name)# 将数据添加到 merged_data 中merged_data = pd.concat([merged_data, df], ignore_index=True)merged_data.to_excel(output_file,index=False)def main1():# 输入多个文件夹的路径和输出文件的路径# folder_pathss = [r"C:\Users\Desktop\A\B\1月数据", r"C:\Users\Desktop\A\B\2月数据"]  # 修改为实际的文件夹路径ycl1()folder_paths = r"C:\Users\Desktop\A\test"output_file = r"C:\Users\Desktop\A\XXX1.xlsx"  # 输出文件路径# 调用函数进行合并merge_excel(folder_paths, output_file)def main2():ycl2()folder_paths = r"C:\Users\Desktop\A\test"output_file = r"C:\Users\Desktop\A\XXX2.xlsx"  # 输出文件路径# 调用函数进行合并merge_excel_sheets(folder_paths, output_file)if __name__ == '__main__':main1()if __name__ == '__main__':main2()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脑机接口:是现代医学的外挂,更是瘫痪病人的豪赌

5 月 17 日,马斯克公开表示,继今年年初首次成功将大脑芯片植入患者大脑后,Neuralink 正在寻找第二位受试者接受这项手术。 5 月 20 日,美国食品药品监督管理局 (FDA) 批准了马斯克的 Neuralink 公司为第二位患者植入脑芯片&#…

若依新增页面,在左侧显示菜单栏的页面,可点击

选择指定的某个目录下 菜单名称,路由地址,组件路径这几个是必填的,其他的暂时就不用管了。 菜单名称:就是显示到左侧目录中的名称。 路由地址:自定义,一般写页面名称就可以。 组件路径:根据前端…

PDF打印技巧:如何跳过不需要的页面?如何关闭打印权限?

作为打工人,经常需要打印各种文档,比如PDF文件。今天分享一下PDF文件的两个打印技巧,如果你还不知道,就一起来看看吧! 技巧1:打印PDF如何跳过不需要的页面 有时候,一个PDF文件有很多页&#xf…

基于GIS地理信息技术的智慧巡检平台建设方案(Word原件)

传统的巡检采取人工记录的方式,该工作模式在生产中存在很大弊端,可能造成巡检不到位、操作失误、观察不仔细、历史问题难以追溯等现象,使得巡检数据不准确,设备故障隐患得不到及时发现和处理。因此建立一套完善的巡检管理系统是企…

DiffIR论文阅读笔记

ICCV2023的一篇用diffusion模型做Image Restoration的论文,一作是清华的教授,还在NIPS2023上一作发表了Hierarchical Integration Diffusion Model for Realistic Image Deblurring,作者里甚至有Luc Van Gool大佬。模型分三个部分&#xff0c…

ChatGPT实现法语口语练习APP

使用ChatGPT实现一个法语口语练习APP可以提供一个强大的工具,帮助学习者提高他们的口语能力。以下是一个详细的实现流程,包括需求分析、技术选型、开发、测试和部署。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

VUE3 学习笔记(7):如何简单的理解VUE 组件,并手把手实现一个嵌套组件

基本概念 VUE 最大的特点就是组件化&#xff0c;理解组件化可视为积木模块&#xff0c;其特点就是增加了复用性。把一个个.vue文件就是组件&#xff08;又作SFC&#xff09;&#xff0c;组件的组合就是一个功能页。 组成部分说明 <!--内容控制&#xff08;必要&#xff09;…

Ubuntu 离线下载安装 Tmux(亲测有效)

昨晚跑NER模型中断了&#xff0c;今天就考虑安装下Tmux&#xff0c;但是一直安装不上&#xff0c;在尝试了好几次之后&#xff0c;终于不报错了&#xff01;&#xff01;特记录一下下载安装过程。&#xff08;我这里是离线下载安装的&#xff09; 1. 下载安装包 tmux wget ht…

微信小程序上架,AI类目审核(AI问答、AI绘画、AI换脸)

小程序对于生成式AI类目的产品上架审核较为严格&#xff0c;这也是近两年新增了几个类目&#xff0c;一旦小程序中涉及生成式AI相关的内容&#xff0c;如果你选择相应类目&#xff0c;但审核被划归为这一类&#xff0c;都需要准备此类目的审核&#xff0c;才能正常上架。 如果…

MT3049 区间按位与

思路&#xff1a; 使用ST表。ST表模板可参考MT3024 maxmin 注意点&#xff1a;此题范围较大&#xff0c;所以要避免超时。 ①使用 ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 加快输入输出速度。 ②换行使用\n而不是endl 代码&#xff1a; 1.暴力6/8 #…

YOLOv10最详细全面讲解2- 目标检测-环境搭建、训练自己的数据集

YOLOv10没想到出来的如此之快&#xff0c;作为一名YOLO的爱好者&#xff0c;以YOLOv5和YOLOv8的经验&#xff0c;打算出一套从数据集装备->环境配置->训练->验证->目标追踪全系列教程。请大家多多点赞和收藏&#xff01;&#xff01;&#xff01; 系列文章&#xf…

睿联技术对亚马逊既依赖又竞争:递表前大额分红,资金充裕又补流?

《港湾商业观察》施子夫 王璐 今年3月29日&#xff0c;冲刺创业板IPO的深圳市睿联技术股份有限公司&#xff08;以下简称&#xff0c;睿联技术&#xff09;提交了注册&#xff0c;不出意外的话&#xff0c;公司离挂牌上市已经近在咫尺。 然而&#xff0c;在目前资本市场尤其…

asammdf 运行报错 “ldf is not supported”导致打不开页面解决办法

asammdf简介 asammdf 是一个用于处理和分析测量数据格式&#xff08;MDF&#xff09;文件的 Python 库。MDF 文件通常用于汽车行业&#xff0c;记录车辆中各种传感器和控制单元的数据。asammdf 提供了读取、写入和操作这些文件的工具&#xff0c;能够高效地处理大量数据。 as…

二叉树——基础知识详解

前言&#xff1a; 经过前面的学习&#xff0c;我们接下来要开始二叉树的学习&#xff0c;因二叉树有难度&#xff0c;为了方便讲解以及各位的理解&#xff0c;本节知识会分成不同的小节进行学习&#xff0c;在本阶段只学习初阶的二叉树&#xff08;堆&#xff0c;二叉数基本知识…

基于FMEA保证汽车电控系统的可靠性

随着汽车技术的飞速发展&#xff0c;电控系统已成为现代汽车的“大脑”&#xff0c;掌控着车辆的方方面面。然而&#xff0c;这一复杂的系统也面临着诸多潜在失效风险&#xff0c;如何确保汽车电控系统的可靠性&#xff0c;成为汽车制造业亟待解决的问题。幸运的是&#xff0c;…

在PyCharm中,不希望新建Python文件自动打开Python控制台

很久没更新水一下 第一步编辑配置 第二步编辑配置模板 第三步取消勾选 第四步确定

老年人健康管理系统项目部署【linux】

老年人健康管理系统项目部署【linux】 前言版权推荐老年人健康管理系统项目部署购买阿里云服务器开发票连接开放端口 安装软件查看状态1更新yum源2安装jdk83安装mysql4上传Mysql数据5安装redis6安装kakfa7安装nginx8运行命令 命令汇总1更新yum源2Jdk8安装3Mysql安装4Mysql数据5…

[JAVASE] String类 StringBuffer类 StringBuilder类

目录 一.String类 1.1 String字符串不可变的原因 1.2 字符串中的比较方法 1.2.1 equals 1.2.2 compareTo 与 compareToIgnoreCase 1.3 字符串中的查找方法 1.3.1 charAt 1.3.2 indexOf 与 lastIndexOf 1.4 字符串中的转换方法 1.4.1 valueOf 1.4.2 toUpperCase 与 to…

Anaconda虚拟环境安装Pybullet

Anaconda虚拟环境安装Pybullet 当直接使用pip install Pybullet的时候出现以下问题&#xff1a; 查看报错信息和CSDN上的许多博客教程&#xff0c;基本都在说与缺少C的依赖有关需要安装几个G的microsoft visual 我尝试使用Conda 包管理器从 conda-forge 通道安装名为 pybulle…

神经网络不确定性综述(Part V)——Uncertainty measures and quality

相关链接&#xff1a; 神经网络不确定性综述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神经网络不确定性综述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神经网络不确定性综述(Part III)——Uncertainty est…