本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
python免费学习资料、代码以及交流解答点击即可加入
大家好,又到了Python办公自动化系列。
今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大!
一、需求说明
首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名。
同个年度的总表在年末可能会有两、三百个工作表,同时每个表中可能也存在千余份档案信息。
表格形式如下(为了直观呈现本例以7个工作表和十余份档案的形式呈现)
需要完成的操作:为了方便审查特定档案信息,需要给出档案名后生成一份新表,该表包含指定档案在所有日期(即所有工作表)中的记录。最终结果如下(以档案x003为例):
也就是老板说:
给我把这几百个表格中所有包含档案x003的相关数据全部找到并整理个新的表格给我!
二、步骤分析
正式写代码前可以把需求分析清楚,将复杂问题简单化。
说白了,这个需求要求
把所有日期工作表中的特定行都提取出来整合成一个新表。
那么我们可以遍历每一张表,然后遍历第一列(名称列,也可以看作A列)每一个有数据的单元格,如果单元格中的文字为我们需要的档案名,就把这一行提取出来放到新的表格中,进一步梳理步骤为
-
建立一个新的EXCEL工作簿
-
新表的表头和档案记录Excel中的一样,也是名称、配置、提交日期等
-
遍历档案记录Excel的每一张工作表sheet,再遍历第一列每一个有数据的单元格,对内容进行判断
-
找到符合条件的单元格后获取行号,根据行号将当前表中的特定行提取出来,并将行追加新创建的表中
分析清楚就可以着手写代码了
三、Python实现
首先导入需要的库本例中涉及旧表的打开和新表的创建,因此需要从openpyxl导入load_workbook和Workbook(如果是ppt和word用到的模块就更智能了,一个方法就能搞定)
from openpyxl import load_workbook, Workbook
接着导入旧表及创建新表
# 从桌面上获取总表
filepath = r'C:\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:
data_lst.append(str(cell.value))
else:
data_lst.append(' ')
new_sheet.append(data_lst)
最后记得保存
new_workbook.save(r'C:\Users\chenx\Desktop\台账查询.xlsx')
这是经过一定改编的真实案例,可见Python自动化办公确实能够帮助我们解放自己的双手,不过在写自动化脚本之前也要先拆分任务,明确思路再进行,最后还是希望大家能够理解Python办公自动化的一个核心就是批量操作-解放双手,让复杂的工作自动化!
前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取python免费学习资料、代码以及交流解答点击即可加入大家好,又到了Python办公自动化系列。今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大!一、需求说明首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的
from openpyxl import load_workbook
1 from openpyxl import load_workbook
2 wb = load_workbook(filename=r'C:\\Users\\Administrator\\Desktop\\库存大表0803.xlsx') ##读取路径
正常情况,打开EXCEL表格就可以看见行数和列数,但是如果是表格里记录数特别多,就需要拖到最后面来查看,文件小还可以,如果是非常大的表格,一般的电脑打开就比较吃力了。如何使用python快速的查看我们要打开的EXCEL表格的行数和列数。
使用下面的代码:
import openpyxl as p
f='11.xlsx'
wb=p.load_workbook(f)
ws=wb.get_sheet_by_name('Sheet') #指定当前工作表名称,注意表名的大小写
print('工作表列数:'
import pandas as pd
data_path = 'E:/pythonProject/python_pandas/test_pandas.xlsx' //此处为excel表的路径
data = pd.read_excel(data_path)
data.loc[0,'ground_time']...
–当数据量过大时,无法用Excel查看全部数据,也不清楚该表格内一共有多少行数据,这时可用Python进行初步统计
open(filename)打开csv文件
for循环遍历csv文件的每一行
sum求遍历csv的循环次数的和,即csv行数
filename='E:路径\\文件名.csv'
total = sum(1 for line in open(filename))
print('The total lines is ',total)
open(filename)打开csv文件
平时工作中遇到很多用相同的EXCEL模板格式报上来的数据,但汇总时遇到了问题。因此编写了这个应用程序。安装后即可使用。
原本有个完整的安装包的,但因上传权限不够只能将应用程序安装包上传这里。程序需要DOT net3.5支持,共有几百M,上传不了,请大家自己在网上下载安装,完后再装应用程序。
程序支持:自定义单元格提取,自定义行提取,自定义列提取,解决了按同一类EXCEL模板上传来的报表分析问题,很实用。本来有一运行界面的,但没地方上传只好作罢。
例如收集了excel表格统一格式的个人简历,从中抽取个人基本信息,生成数据表。
将源数据excel文件放在同一个文件夹下。
新建一个shouji.xls也放在该文件夹下。
原表格数据
1.xls
---------------
A B
3 60 101
---------------
2.xls
3.xls
打开shouji.xls,按住Alt+F11进入宏界面,点击菜单的插入->模块,在代码窗口粘贴如下代码:
2.Python xlwt 写入 操作Excel
3.Python xlutils 修改 操作Excel
4.Python xlwings 读取 写入 修改 操作Excel
5.Python openpyxl 读取 写入 修改 操作Excel
6.Python xlswriter 写入 操作Excel
7.Python win32com 读取 写入 修改 操作Excel
8.Python pandas 读取 写入 操作Ex