使用 Python 合并多个格式一致的 Excel 文件
使用 Python 合并多个格式一致的 Excel 文件
一 问题描述
最近朋友在工作中遇到这样一个问题,她每天都要处理如下一批 Excel 表格:每个表格的都只有一个 sheet,表格的前两行为表格标题及表头,表格的最后一行是相关人员签字。最终目标是将每个表格的内容合并到一个 Excel 表格中,使之成为一张表格。在她未咨询我之前,每天复制粘贴这一类操作占用了她绝大部分时间。表格样式如下:
二 需求分析
根据她的描述,最终需求应该是这样的:在这一批表格中选取任意一个表格的前两行作为新表格的标题与表头,将这两行内容以嵌套列表的形式插入一个名为 data 空列表中。取每张表格的第3至倒数第二行,剔除空白行的内容。并将所有表格的内容以子列表的方式依次插入 data 列表中。任取一表格的最后一行以子列表的方式插入 data 列表中。最后将 data 列表的内容写入一个新的 Excel 表格中。
三 查阅资料
通过几分钟的上网查询,得出以下结论:
- 3.1 通过 xlrd 和 xlsxwriter 模块即可解决次需求;
- 3.2 之所以使用 xlrd 和 xlsxwriter 是因为: xlrd擅长读取 Excel 文件,不适合写入,用 xlsxwriter 来进行大规模写入 Excel 表格不会出现报错。
四 编码
一切以解决当前问题为向导,说干就干。 coding ... ...
# -*- coding:utf-8 -*- import os, xlrd, xlsxwriter source_dir = r'input' new_execl = "All in one.xlsx" raw_excels = os.listdir(source_dir) keyword = "油站经理" # 除包括此关键字的行均插入 data = [] filename = os.path.join(source_dir, raw_excels[0]) wb = xlrd.open_workbook(filename) sheet = wb.sheets()[0] data.append(sheet.row_values(0)) data.append(sheet.row_values(1)) for excel in raw_excels: filename = os.path.join(source_dir, excel) wb = xlrd.open_workbook(filename) sheet = wb.sheets()[0] for row_num in range(2, sheet.nrows): row_values = [str(i) for i in sheet.row_values(row_num)] if len(''.join(row_values)) and (keyword not in ''.join(row_values)): data.append(sheet.row_values(row_num)) data.append(sheet.row_values(sheet.nrows-1)) new_wb = xlsxwriter.Workbook(new_execl) worksheet = new_wb.add_worksheet() font = new_wb.add_format({"font_size":11}) for i in range(len(data)): for j in range(len(data[i])): worksheet.write(i, j, data[i][j], font) new_wb.close()
半小时后,大功告成!
五 使用说明
- 5.1 下载安装 Python3.X(具体安装步骤自己查一下);
- 5.2 安装 xlrd 和 xlsxwriter 模块,参考命令:
pip install xlrd xlsxwriter
。开始此步骤之前可能需要先升级pip,具体升级命令系统会提示,复制粘贴即可; - 5.3 新建一个名为 input 的文件夹,将需要合并的文件复制到这个文件夹下;
- 5.4 把以上代码复制以 excels_merge.py 的文件名保存在与 input 文件夹同级别的文件夹中,双击鼠标稍后即可。如果没有关联打开方式,那么就在资源管理器的地址栏输入“cmd”,在打开的命令窗口输入:
python excels_merge.py
。生成的 All in one.xlsx 即为合并后的新 Excel 文件。
六 总结
- 6.1
[str(i) for i in sheet.row_values(row_num)]
这一部分代码实现了将列表内的元素统一转化为字符串,主要是为了下一行代码实现将列表转换为字符串; - 6.3 此的脚本不对源 Excel 文件进行任何操作,可是放心使用;
- 6.4 以上脚本就是随手一写,都没有优化,以后如果数据量太大估计会考虑优化,希望大家多提意见或建议;
- 6.5 源代码可以访问我的同名 CSDN 博客及 GitHub 获取。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云物联网平台设备数据转发到消息队列RocketMQ全链路测试
概述 您可以使用规则引擎,将物联网平台数据转发到消息队列(RocketMQ)中存储。从而实现消息从设备、物联网平台、RocketMQ到应用服务器之间的全链路高可靠传输能力。文本从物联网平台的产品及设备的创建开始,逐步介绍整个链路的完整实现。 操作步骤 1、创建物联网产品及设备 参考 阿里云物联网平台Qucik Start 快速创建产品和设备。 2、RocketMQ控制台 创建实例、Topic和Group,这个为了方便本地测试消费MQ的消息,选择在公网区域创建相关资源 3、配置规则引擎 a、配置总览 b、处理数据 c、转发数据 d、配置完开启规则引擎 相关参考:SQL语句参考数据转发到消息队列RocketMQ 设备上报属性消息 import com.alibaba.taro.AliyunIoTSignUtil; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import java.util.HashMap; import j...
- 下一篇
Tablestore入门手册--局部事务
局部事务介绍 表格存储提供的局部事务也可以称为是分区键事务:可以指定某个分区键下的操作是原子的,要么全部成功要么全部失败,并且所提供的隔离级别为串行化。也就是说表格存储的局部事务可以防止以下问题 脏读:事务之外的操作读到了尚未提交的写入 脏写:事务之外的写入覆盖了本事务尚未提交的写入 不可重复读:在事务中的多次对同一行数据的读操作读到了不同的值 更新丢失:本事务提交已提交之后被其他并行执行的事务所覆盖(与脏写不同,脏写是两个事务都没有提交时发生的) 局部事务基本使用流程如下图所示 Tablestore的局部事务在启动事务时或首先获取到分区键下的锁,所有后续对该分区键的写操作与启动事务操作都会被阻塞至原事务提交或者超时以保证操作的隔离性,有如下的一些特性: 在事务提交或者中止之前,不能有另外一个事务在同分区键下启动事务 在事务提交或中止之前,非本事务的写入将被阻塞或超时失败 在事务提交和中止之前,非本事务的读取操作无法读取到事务中未提交的写入,而本事务的读操作可以获取到本事务中的写入 局部事务的使用 事务的启动、提交与中止 启动事务 // 局部事务需要指定一个分区键(第一列主键) Pri...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境