使用 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-*- importos,xlrd,xlsxwriter source_dir=r'input' new_execl="Allinone.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)) forexcelinraw_excels: filename=os.path.join(source_dir,excel) wb=xlrd.open_workbook(filename) sheet=wb.sheets()[0] forrow_numinrange(2,sheet.nrows): row_values=[str(i)foriinsheet.row_values(row_num)] iflen(''.join(row_values))and(keywordnotin''.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}) foriinrange(len(data)): forjinrange(len(data[i])): worksheet.write(i,j,data[i][j],font) new_wb.close()
半小时后,大功告成!
五使用说明
5.1下载安装Python3.X(具体安装步骤自己查一下);
5.2安装xlrd和xlsxwriter模块,参考命令:pipinstallxlrdxlsxwriter。开始此步骤之前可能需要先升级pip,具体升级命令系统会提示,复制粘贴即可;
5.3新建一个名为input的文件夹,将需要合并的文件复制到这个文件夹下;
5.4把以上代码复制以excels_merge.py的文件名保存在与input文件夹同级别的文件夹中,双击鼠标稍后即可。如果没有关联打开方式,那么就在资源管理器的地址栏输入“cmd”,在打开的命令窗口输入:pythonexcels_merge.py。生成的Allinone.xlsx即为合并后的新Excel文件。
六总结
6.1[str(i)foriinsheet.row_values(row_num)]这一部分代码实现了将列表内的元素统一转化为字符串,主要是为了下一行代码实现将列表转换为字符串;
6.3此的脚本不对源Excel文件进行任何操作,可是放心使用;
6.4以上脚本就是随手一写,都没有优化,以后如果数据量太大估计会考虑优化,希望大家多提意见或建议;
6.5源代码可以访问我的同名CSDN博客及GitHub获取。
总结
以上所述是小编给大家介绍的使用Python合并多个格式一致的Excel文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。