【Python】excel多个sheet数据合并实例

这篇具有很好参考价值的文章主要介绍了【Python】excel多个sheet数据合并实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

因为,每天都会有的大量excel报表汇总处理任务,所以写了一个脚本来处理。

就是找出每一个excel中特定的sheet,把这些sheet的特定列读取出来合并到一个sheet中。

因为每一个sheet的数据都不太一样,所以稍微麻烦一点,下面使用openpyxl方式和pandas两种方式来处理。

一、openpyxl方式

使用openpyxl方式要自己实现合并逻辑,要麻烦一些。值得注意的是,在excel中可能有公式,读取excel的时候可以使用下面的方式:

load_workbook(data_file_path, data_only=True)

使用data_only=True,就可以得到公式计算之后的值,而不是公式本身,因为公式本身合并在另一个sheet中,公式可能就无效,甚至不对了。

下面给一个示例代码,仅供参考:

"""
 pip install openpyxl
"""
from openpyxl import load_workbook
from openpyxl import Workbook
import os
import re

# 模板文件
TEMPLATE_FILE = r'H:\合并\合并模板.xlsx'
# 合并结果文件
RESULT_FILE = r'H:\合并\结果.xlsx'
# 数据文件目录
DATA_ROOT_DIR = r"H:\合并"

# 文件名称正则
DATA_FILE_REG = r"(.*?)-合同导入台账\d{8}.xlsx"


# 获取要处理的文件
def get_deal_file_map():
    file_sn_map = {}
    fs = os.listdir(DATA_ROOT_DIR)
    for f in fs:
        match = re.match(DATA_FILE_REG, f)
        if match:
            city = match.group(1)
            sn = 2
            if city == '成都':
                sn = 4
            elif city == '杭州':
                sn = 3
            file_sn_map[os.path.join(DATA_ROOT_DIR, f)] = sn
    return file_sn_map


# 规范化列名
def get_normal_column_name(origin_col_name):
    if origin_col_name:
        start = origin_col_name.find("(")
        if start == -1:
            return origin_col_name.strip()
        else:
            return origin_col_name[0:start].strip()


# 获取列名与列坐标的映射
def get_col_name_coordinate_map(sheet_row):
    name_coor_map = {}
    for cell in sheet_row:
        # name_coor_map[get_normal_column_name(cell.value)] = cell.column_letter
        name_coor_map[get_normal_column_name(cell.value)] = cell.column
    return name_coor_map


# 获取模板文件的列名与列坐标映射
def get_template_name_coordinate_map(template_file_path):
    template_wbook = load_workbook(template_file_path)
    table = template_wbook[template_wbook.sheetnames[0]]
    row = table[1:1]
    return get_col_name_coordinate_map(row)


def deal_data_content():
    """
        合并文件内容
    """
    dfile_sn_map = get_deal_file_map()
    save_book = Workbook()
    wsheet = save_book.active
    wsheet.title = 'merge-data'
    tmp_col_coor_map = get_template_name_coordinate_map(TEMPLATE_FILE)
    wsheet.append(list(tmp_col_coor_map.keys()))
    line = 2
    for data_file_path in dfile_sn_map.keys():
        sheet_num = dfile_sn_map[data_file_path]
        wbook = load_workbook(data_file_path, data_only=True)

        names = wbook.sheetnames

        for i in range(0, sheet_num):
            table = wbook[names[i]]
            row = table[1:1]
            data_col_coor_map = get_col_name_coordinate_map(row)
            use_col = data_col_coor_map.keys() & tmp_col_coor_map.keys()
            for row in table.iter_rows(min_row=2, values_only=True):
                rcol_index = data_col_coor_map['城市']
                city = row[rcol_index - 1]
                if (city is None) or len(city.strip()) == 0:
                    continue
                for col_name in use_col:
                    rcol_index = data_col_coor_map[col_name]
                    wcol_index = tmp_col_coor_map[col_name]
                    wsheet.cell(line, wcol_index, row[rcol_index - 1])
                line += 1
    save_book.save(RESULT_FILE)


if __name__ == '__main__':
    deal_data_content()

二、pandas方式

  • 相比于直接使用openpyxl的方式,使用pandas就方便多了,直接使用concat方法就可以了。

    pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None,verify_integrity=False,copy=True)
    
  • 参数含义

    参数 含义
    objs kist,Series、DataFrame、Panel
    axis 默认为0,按行连接
    join inner、outer,默认为"outer"
    keys list,最外层构建层次索引,如果为多索引,使用元组
    levels list,用于构建MultiIndex的特定级别
    names list,结果层次索引中的级别的名称
    copy boolean,默认True。如果为False,请勿不必要地复制数据
    join_axes 将要废弃,推荐在结果集上使用reindex
    ignore_index boolean,默认False。如果为True,忽略索引
    verify_integrity boolean,默认False。检查新连接的轴是否包含重复项
  • 案例

    import pandas as pd   #合并多个sheet
    data = pd.read_excel('C:\\Users\\Rose\\Desktop\\财务费用.xlsx',None)
    cols = list(data.keys())
    newdata =pd.DataFrame()
    for i in cols:
        df= data[i]
        newdata=pd.concat([newdata,df])
    newdata.to_excel('C:\\Users\\Rose\\Desktop\\财务合并数据.xlsx',index=False)
    

    除了使用concat方法,还可以使用append方法,append方式是一个特殊的concat方法,就是concat的参数axis=0的情况,也是concat方法的axis的默认值。

    既然使用了pandas,当然也可以顺便完成一些数据过滤、填充、转换之类的操作。

总结

本文主要讲解excel多个sheet数据合并的两种方式,大家可以亲自尝试下,如有问题欢迎评论区讨论。文章来源地址https://www.toymoban.com/news/detail-430634.html

到了这里,关于【Python】excel多个sheet数据合并实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python合并EXCEL数据(按行、按列、按sheet)

    1.按行合并多个excel文件 2.按列合并多个excel文件(多个excel文件行数需一致) 改进版:把需要合并的excel表格放在一个文件夹,运行代码把该文件夹中的表格合并 这个代码直接粘过去用就行,改绿色的部分即可,注意要把文件都放一个文件夹里。 3.按sheet合并,把一个文件里

    2024年02月15日
    浏览(32)
  • java中用SXSSFWorkbook把多个字段的list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?

    要使用SXSSFWorkbook将多个字段的List数据和单个实体DTO导出到多个Sheet页,你可以按照以下步骤进行操作: 创建一个SXSSFWorkbook对象作为工作簿。 针对每个字段的List数据,创建一个新的Sheet页,并将数据写入该Sheet页。 创建一个新的Sheet页,用于单个实体DTO的数据。 将单个实体

    2024年02月11日
    浏览(28)
  • 【Python】Excel多sheet逐行合并为一个sheet

    我有一个excel,内含多个sheet,我要将不同sheet合并在一个sheet中,依然保存在这个excel文件中,命名为合并,要求列名依次对应,逐行合并,请为我写出python代码

    2024年01月21日
    浏览(45)
  • [python]问题:pandas处理excel里的多个sheet

    Pandas 可以很容易地处理 Excel 文件中的多个工作表。首先,你需要安装 pandas 和 openpyxl(用于读取 .xlsx 文件)库。你可以使用以下命令安装这两个库: 接下来,你可以使用以下代码来处理 Excel 文件中的多个工作表:

    2024年02月10日
    浏览(42)
  • Python批处理excel文件多个sheet汇总脚本

    假设有10个excle表,每个excel包含sheet1,sheet2,sheet3,sheet4,每个excel中sheet1的列名是一样的,sheet2的列名是一样的,现在要做的是将这10个excel中的sheet1合并汇总,sheet2合并汇总,将汇总后的sheet1和sheet2放在汇总表.xlsx里面,补充条件:每个excel的sheet1名字和汇总表的sheet1名字一样,

    2024年02月03日
    浏览(46)
  • excel(wps)之vlookup函数合并sheet数据

    VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应的值;与之对应的HLOOKUP是按行查找的。 VLOOKUP函数

    2024年01月24日
    浏览(30)
  • 【Python数据分析】利用Python将多个EXCEL表格合并为一个EXCEL表格

            如何将EXCEL的多个表格合并成一个表格呢?比如每月销售额是一个单独的表格,我想把它们合并成一个表格,今天就与大家分享如何利用Python数据分析3分钟搞定,不管你要合并多少个文件,代码总是那么几行。不多说了,上案例。          现在有3个月的销售额,需

    2023年04月24日
    浏览(34)
  • 4种方法用Python批量实现多Excel多Sheet合并

    目录 方法一:使用pandas库 方法二:使用openpyxl库 方法三:使用xlrd和xlwt库 方法四:使用os和glob库 在数据处理中,经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法,使用Python批量实现多Excel多Sheet的合并。 Pandas是Python中常用的数据处理库,提供了简便的

    2024年01月19日
    浏览(41)
  • Java利用POI导入Excel数据(多个sheet、模板)

    需求:根据excel模板导入数据            sheet1:1-6行为固定格式,且需要取值({xxx});7行开始为数据集合(list)            sheet2:都为固定格式,取值地方:{xxx}         1、数据格式(两个Sheet)   2、代码

    2024年02月16日
    浏览(35)
  • Springboot基于easyexcel实现一个excel文件包含多个sheet表格的数据导出

    EasyExcel 是一款基于Java的开源Excel操作工具,它提供了简单且强大的 API,使开发人员可以轻松地读写、操作和生成Excel文件。 EasyExcel 支持 Excel 文件的导入和导出,可以处理大量数据,具有高性能和低内存占用。它可以读取 Excel 文件中的数据,并将数据转换为 Java 对象,也可

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包