以下文章来源:EarlyPython作者:陈曦大家好,又来Python办公自动化系列了。今天分享一个真实的办公自动化需求。大家一定要仔细阅读需求描述。了解需求后,你就可以体验Python的强大了!一、需求描述首先来看今天的需求。有一个Excel工作簿,其中包含文件记录的汇总表。每天都会根据当天的日期创建一个新表。每日表包含所有文件信息,可能同时添加新文件。姓名。同年的总表到年底可能有两三百个工作表,每个表中的文件信息可能有上千条。表格形式如下(本例中以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','SubmitDate','受限操作','操作时间','状态','存储位置']new_sheet.append(new_headers)`现在是核心步骤:多次遍历,可以使用工作簿。sheetnames获取工作簿中所有工作表名称的列表,然后遍历`foriinworkbook.sheetnames:sheet=workbook[i]#获取文件名所在列names=sheet['A']`根据到前面的分析,需要遍历名称列,判断每个单元格的值是否是需要的文件名。这里需要注意的是,如果已经循环到想要的单元格,可以停止循环,但是必须将匹配单元格的行号传递给一个变量进行记录,否则一旦跳出循环,就会有benomemory`flag=0forcellinnames:ifcell.value==keyword:#这里的关键字是文件名,可以以文件x003为例flag=cell.rowbreak`得到行号后满足条件,使用sheet[flag]即可匹配成功。openpyxl不支持将旧表的一整行写到新表中,所以对策是将这一行中单元格的所有具体值组装成一个列表,使用sheet.append(list)方法写进入新表,并遍历完整代码如下:`forIinWorkbook.Sheetnames:Sheet=Workbook[i]names=sheet['a']Flag=0forcellinnames:ifcell.value==keyword:flash=cell.rowingbreamifflag:#如果flag没有被修改,则后面的代码不需要依次执行data_lst=[]forcellinsheet[flag]:#添加判断这里的内容是让没有内容的行直接为空,而不是写一个noneifcell.value:data_lst.append(str(cell.value))else:book\bookUserdata_lst.append('')data_lst.append(str(cell.value))else:\bookUserdata_lst.append('')Cavenew_sheet.append(data_ls.\r)`最后记得保存chenx\\Desktop\\ledgerquery.xlsx')SummaryThis是一个真实的案例哈在一定程度上进行了调整。由此可见,Python自动化办公确实可以帮助我们解放双手,但是在编写自动化脚本之前,我们首先要将任务拆分清楚,如果对本文的代码和数据感兴趣,可以回复自动获取在后台。最后希望大家能够明白,Python办公自动化的核心之一就是批量操作——解放双手,将复杂的工作自动化!
