持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
背景
因为北京疫情原因,5月在家居家办公,看到媳妇的一部分工作是核对两张excel的数据,询问发现,这类工作还很多,就像写个小程序来实现数据对比,本身做java的,但是java实现还得配置环境,对于使用者不太友好,运行也不太方便,决定使用python来写。仅仅做一个两个excel对比数据及替换的工作,在菜鸟教程中简单看看能够支撑开发功能的部分教程及excel对比需要用到的东西,不需要从头学起,在需要的知识点了解一下,简单完成了功能
环境搭建
Python官网:www.python.org/
在 Windows 设置环境变量
创建python_home,在path中添加%Python_HOME%
项目开发
Excel处理,首先引入xlwt和xlrd,命令如下
pip install xlrd;
pip install xlwt;
查看教程找到打开excel方法
#打开excel文件
workbook = xlrd.open_workbook(filename)
获取sheet方法
#获取sheet
sheet = workbook.sheet_by_name(sheetname)
获取行数列数
# 表1的sheet的总行数
rowNum1 = sheet1.nrows
# 表1的sheet的总列数
colNum1 = sheet1.ncols
创建新的excel
# xlwt准备生成一个新的文件
write_workbook = xlwt.Workbook()
write_sheet = write_workbook.add_sheet('sheet1', cell_overwrite_ok=True)
获取单元格数据
sheet.cell_value(row_index, col_index)
python基础 for循环及输入输出
for iterating_var in sequence:
str = input("请输入表1要匹配的列索引:");
print(str);
学习了这些知识点后,分析对比过程,
1.输入表1匹配的列索引和目标数据索引和表2匹配的列索引和目标数据索引(考虑到文件的行列不确定,由本人自行输入)(考虑到文件的行列不确定,由本人自行输入)
2.遍历表2的全部数据,把对应的单元设置到新的文件中,即复制了表2的数据到新表中
3.在遍历列过程中,如果碰到需要补充的字段,则进行遍历表1,判断的id索引匹配,
4.如果两个表的id相同则把表1的单元内容设置到新建表对应的单元格中
最后将文件打包称 exe可执行程序.命令如下:
pyinstaller -F importExcel.py
项目源码
import xlwt
import xlrd
if __name__ == '__main__':
file1 = "E:\\importExcel\excel1.xlsx"//文件路径
# 打开表1
wb1 = xlrd.open_workbook(filename=file1)
# 表1要匹配的列索引
str = input("请输入表1要匹配的列索引:");
hid_index1 = str #0
# 表1目标数据列索引
str2 = input("请输入表1目标数据列索引:");
target_index1 = str2 #1
# 表1的sheet
sheet1 = wb1.sheet_by_index(0)
# 表1的sheet的总行数
rowNum1 = sheet1.nrows
# 表1的sheet的总列数
colNum1 = sheet1.ncols
file2 = "E:\importExcel\excel2.xlsx" //文件路径
# 打开表2
wb2 = xlrd.open_workbook(filename=file2) # 打开文件
# 表2要匹配的列索引
#hid_index2 = 0
str3 = input("请输入表2要匹配的列索引:");
hid_index2 = str3 #0
# 表2目标数据列索引
str4 = input("请输入表2目标数据列索引:");
#target_index2 = 2
target_index2 = str4
# 表2的sheet
sheet2 = wb2.sheet_by_index(0) # 通过索引获取表格
# 表2的sheet的总行数
rowNum2 = sheet2.nrows
# 表2的sheet的总列数
colNum2 = sheet2.ncols
# xlwt准备生成一个新的文件
write_workbook = xlwt.Workbook()
write_sheet = write_workbook.add_sheet('sheet1', cell_overwrite_ok=True)
for index2 in range(0, rowNum2):
for col_index in range(0, colNum2):
# 遍历表2的每一行每一列,把对应的单元设置到新的文件中,即复制了表2的数据
write_sheet.write(index2, col_index, sheet2.cell_value(index2, col_index))
# 在遍历列过程中,如果碰到目标数据列索引.即需要补充的字段,则进行遍历表1,判断的id索引匹配
if int(col_index) == int(target_index2) :
for index1 in range(1, rowNum1):
hid1 = sheet1.cell_value(index1, int(hid_index1))
if hid1 == sheet2.cell_value(index2,int(hid_index2)):
# 如果两个表的id相同则把表1的单元内容设置到表2对应的单元格
write_sheet.write(index2, col_index, sheet1.cell_value(index1, int(target_index1)))
# 保存新的文件
write_workbook.save('new.xls')
运行示例
输入展示:
运行结果:
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!