老板让我从几百个Excel中查找数据,我用Python一分钟搞定!.docxVIP

老板让我从几百个Excel中查找数据,我用Python一分钟搞定!.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
老板让我从几百个Excel中查找数据,我用Python一分钟搞定! 首先我们来看下今日的需求,有一份档案记录总表的Excel工作簿, 每天会依据当天日期建立新表,每天的表格内包含全部档案信息,同时也有可能会添加新的档案名。同个年度的总表在年末可能会有两、三百个工作表,同时每个表中可能也存在千余份档案信息。表格方式如下(为了直观呈现本例以7个工作表和十余份档案的方式呈现) 需要完成的操作:为了便利审查特定档案信息,需要给出档案名后生成一份新表,该表包含指定档案在全部日期(即全部工作表)中的记录。最终结果如下(以档案x003为例): 也就是老板说:给我把这几百个表格中全部包含档案x003的相关数据全部找到并整理个新的表格给我! 二、步骤分析 正式写代码前可以把需求分析清楚,将简单问题简约化。 说白了,这个需求要求把全部日期工作表中的特定行都提取出来整合成一个新表。那么我们可以遍历每一张表,然后遍历第一列(名称列,也可以看作A列)每一个有数据的单元格,假如单元格中的文字为我们需要的档案名,就把这一行提取出来放到新的表格中,进一步梳理步骤为 建立一个新的EXCEL工作簿 新表的表头和档案记录Excel中的一样,也是名称、配置、提交日期等 遍历档案记录Excel的每一张工作表sheet,再遍历第一列每一个有数据的单元格,对内容进行推断 找到符合条件的单元格后猎取行号,依据行号将当前表中的特定行提取出来,并将行追加新创建的表中 分析清楚就可以着手写代码了 三、Python实现 首先导入需要的库本例中涉及旧表的打开和新表的创建,因而需要从openpyxl导入load_workbook和Workbook(假如是ppt和word用到的模块就更智能了,一个方法就能搞定) from?openpyxl?import?load_workbook,?Workbook 接着导入旧表及创建新表 #?从桌面上猎取总表 filepath?=?rC:\Users\chenx\Desktop\台账.xlsm?#?依据实际情况进行修改 workbook?=?load_workbook(filepath) #?创建新的Excel工作簿猎取到工作表 new_workbook?=?Workbook() new_sheet?=?new_workbook.active #?给新表写入表头 new_headers?=?[名称,?配置,?提交日期,?受限操作,?操作时间,?形态,?存储位置] new_sheet.append(new_headers) 现在是核心步骤:多次遍历,可以用workbook.sheetnames猎取工作簿全部工作表名称的列表,然后遍历即可 for?i?in?workbook.sheetnames: ????sheet?=?workbook[i] ????#?猎取档案名称所在列 ????names?=?sheet[A] 依据前面的分析,需要遍历名称列,推断每一个单元格的值是不是需要的档案名。这里应留意,假如已经循环到需要的单元格,就可以停止循环了,但肯定要把符合单元格的行号传递给一个变量做记录,不然一旦break出循环就没有记忆了 flag?=?0 for?cell?in?names: if?cell.value?==?keyword:?#?这里的keyword就是档案名,可以以?档案x003?为例 ????flag?=?cell.row ????break 获得到符合条件的行号后用sheet[flag]就可以拿到符合行了。openpyxl不支持旧表的一整行写入新表,因而应对策略就是将这一行的全部单元格具体值组装成一个列表,用sheet.append(列表)的方法写入新表,遍历部分的完整代码如下: ????for?i?in?workbook.sheetnames: ????????sheet?=?workbook[i] ????????names?=?sheet[A] ????????flag?=?0 ????????for?cell?in?names: ????????????if?cell.value?==?keyword: ????????????????flag?=?cell.row ????????????????break ????????if?flag:???#?假如flag没有被修改则不需要挨次进行下列代码 ????????????data_lst?=?[] ????????????for?cell?in?sheet[flag]: ????????????????#?这里加上一个对内容的推断,是让无内容的行直接放空,而不是写入一个?none ????????????????if?cell.value:?? ?????????????????

文档评论(0)

duanbingbing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档