当前位置: 首页 > 科技观察

老板让我查几百个Excel文件的数据,用Python一分钟搞定!

时间:2023-03-18 00:34:06 科技观察

大家好,又到了PythonOA系列的时间。今天分享一个真实的办公自动化需求。大家一定要仔细阅读需求描述。了解需求后,才能体会到Python的强大!Book,每天都会根据当天的日期新建一张表。每日表包含所有文件信息,也可能添加新的文件名。同年的总表到年底可能有两三百个工作表,每个表中的文件信息可能有上千条。表格形式如下(本例中以7个工作表,十多个文件的形式呈现)。需要完成的操作:为了方便查看具体的文件信息,需要在给出文件名后生成一个新表,其中包含指定文件中所有日期(即所有工作表)的记录。最后的结果如下(以文件x003为例):也就是说,老大说:把这几百张表中包括文件x003在内的所有相关数据都找出来给我整理一个新表!2.步骤分析正式代码编写您可以清楚地分析需求并预先简化复杂的问题。说白了,这个需求就是把所有日期工作表中的特定行提取出来,整合到一个新表中。那么我们就可以遍历每一张表,然后遍历每一个有第一列(name列,也可以看成是A列)数据的单元格。如果单元格中的文本是我们需要的文件名,就把这一行Extract出来放到一个新的表格中。进一步的梳理步骤是新建一个EXCEL工作簿。新表的表头与文件记录Excel中的一样,也是遍历文件记录Excel的每一个工作的名称、配置、提交日期等。表格sheet,然后遍历每个有第一列数据的单元格,判断内容,找到满足条件的单元格,得到行号,根据行号提取当前表格中的具体行,加上newrowtocreate表中分析清楚后,就可以开始写代码了。3.Python首先导入需要的库。本例涉及到旧表的打开和新表的创建,所以需要从openpyxl导入load_workbook和Workbook(如果是ppt和word使用的模块更智能,一个就可以搞定method)fromopenpyxlimportload_workbook,Workbook再导入旧表新建表#从桌面获取总表filepath=r'C:\Users\chenx\Desktop\ledger.xlsm'#根据实际情况修改workbook=load_workbook(filepath)#新建Excel工作簿并获取工作表new_workbook=Workbook()new_sheet=new_workbook.active#将表头写入新表new_headers=['name','configuration','submissiondate','restrictedoperation','操作时间','状态','存储位置']new_sheet.append(new_headers)现在是核心步骤:多次遍历,可以使用workbook.sheetnames获取所有工作簿的工作表名称列表,然后遍历它foriinworkbook.sheetnames:sheet=workbook[i]#gett文件名所在的列。names=sheet['A']根据前面的分析,需要遍历name列来确定每个单元格的值,文件名不需要取值。这里需要注意的是,如果已经循环到想要的单元格,可以停止循环,但是必须将匹配单元格的行号传递给一个变量进行记录,否则一旦跳出循环,就会有没有内存flag=0forcelinnames:ifcell.value==keyword:#这里的关键字是文件名,可以以文件x003为例flag=cell.rowbreak获取满足条件的行号,使用sheet[flag]获取行号。openpyxl不支持将旧表的一整行写到新表中,所以对策是将这一行中单元格的所有具体值组装成一个列表,使用sheet.append(list)方法写进入新表,并遍历完整代码如下:#如果没有修改过flag,则不需要下面的序列代码data_lst=[]forcelinsheet[flag]:#这里添加对内容的判断是让没有内容的行直接为空,而不是写一个noneifcell.value:data_lst.append(str(cell.value))else:data_lst.append('')new_sheet.append(data_lst)最后记得保存new_workbook.save(r'C:\Users\chenx\Desktop\ledgerquery.xlsx')Python办公自动化确实可以帮助我们解放双手,但是在编写自动化脚本之前,我们必须先拆分任务,理清思路再进行叮。如果对本文的代码和数据感兴趣,可以回复后台自动获取。最后希望大家能够明白,Python办公自动化的核心之一就是批量操作——解放双手,将复杂的工作自动化!