小白自己写了个excel快速核对代码,遇见问题,求助。
本帖最后由 seslovelm 于 2020-8-9 20:46 编辑一、实现思路
1. 使用xlrd库操作excel表格
2. excel创建两个表单,分别为sheet1和sheet2,行数列数都相同
3. 使用双层循环,遍历对应的单元格,如果有不一样的,则将sheet1对应的单元格打印出来
4. 保存至 找不同.txt文件中
二、整体代码
import xlrd
test = xlrd.open_workbook('这个放文件名')# 注意!此处需要改成自己的excel表名
sheet1 = test.sheet_by_index(0)# 通过索引获取指定工作表,用sheet来接收
rowNum1 = sheet1.nrows
colNum1 = sheet1.ncols
sheet2 = test.sheet_by_index(1)# 通过索引获取指定工作表,用sheet来接收
rowNum2 = sheet2.nrows
colNum2 = sheet2.ncols
for i in range(0, rowNum1):
for j in range(0, colNum1):
data1 = sheet1.cell_value(i, j)
data2 = sheet2.cell_value(i, j)
if data1 != data2:
print(i, j, ' ', data2)
with open('./找不同.txt', 'a', encoding='utf-8')as f:
f.write("第%s行,第%s列\t值为:%s\n" % (i, j, data2))
本人写了个excel自动核对数据代码,但是发现个问题,程序运行核对1万条数据以上,就会卡死。
还有就是程序必须是A列表与B列表顺序 排列一致,条数必须一致才能使用,有没有大佬,能帮忙优化下?就是比如A列表7000条数据,B列表7200条数据,这样也可以快速核对,找出数值一样的,不一样的自动标注成红色。
本人在鱼C论坛,自学了1个半月写出来的程序,能力有限,求各位大佬帮忙下。谢谢。 这个怎么发在技术交流??? 额,没有大佬帮忙解决下问题么? 陈尚涵 发表于 2020-8-9 17:10
这个怎么发在技术交流???
那发求助区?还是发在什么区呢? seslovelm 发表于 2020-8-9 20:50
那发求助区?还是发在什么区呢?
发在问题交流区啊 用pandas试试
表格抬头是姓名 身份证号 年龄 地址
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Font, Side
def Set_excel_style(file_name):#设置表格为文本格式
wb = load_workbook(f'{file_name}')# 打开文件
ws = wb['Sheet1']# 打开表格
for row in ws.rows:# 获取所有行
for cell in row:# 获取所有行中的每一个单元格
cell.font = Font(name=u'微软雅黑', size=11)# 设置字体
cell.border = Border(left=Side(border_style="thin", color='000000'),
right=Side(border_style="thin", color='000000'),
top=Side(border_style="thin", color='000000'),
bottom=Side(border_style="thin", color='000000'))# 设置边框格式
cell.alignment = Alignment(horizontal='center')# 设置居中
cell.number_format = '@'# 设置为文本格式
wb.save(f'{file_name}')# 保存文件
data_one=pd.read_excel('1.xlsx',sheet_name='Sheet1',dtype={'身份证号':str,'年龄':str})#原始大数据
data_two=pd.read_excel('2.xlsx',sheet_name='Sheet1',dtype={'身份证号':str,'年龄':str})#需查找的小数据
data_same=data_one.isin(data_two['身份证号'])]#两个表一致的数据
data_notsame=data_one[~data_one['身份证号'].isin(data_two['身份证号'])]#两个表不一致的数据
data_same.to_excel('3.xlsx',sheet_name='Sheet1',index=False)
Set_excel_style('3.xlsx')
data_notsame.to_excel('4.xlsx',sheet_name='Sheet1',index=False)
Set_excel_style('4.xlsx')
疾风怪盗 发表于 2020-8-10 13:45
用pandas试试
表格抬头是姓名 身份证号 年龄 地址
我是用来核对银行流水交易明细,是根据收入,支出,余额,核心流水号,交易日期 来核对。 seslovelm 发表于 2020-8-11 22:59
我是用来核对银行流水交易明细,是根据收入,支出,余额,核心流水号,交易日期 来核对。
不是一样的么?给的是个思路,要么你就给原数据,否则只能自己学啊 建议贴个表格示例上来,把一些隐私信息替换掉。说明清楚自己要以什么作为依据,去比较哪些内容
debit_amountcredit_incurred_amountaccount_balancetransaction_datetransaction_reference_number支出金额收入金额本次余额交易日期交易日志号
0.006335.6459675482.852020/7/31 0:0067889927169,900.00 59709476.372020072761578653
0.001093.1059675448.952020/7/31 0:0066221133156,300.0059699576.372020072761578923
0.001093.1059674355.852020/7/31 0:006355875514 960.0059705876.372020072761578933
0.00129.6959673262.752020/7/31 0:0064995735130.0030,318.5359706836.372020072861578953
1007.550.0059676517.842020/7/31 0:0068546334120.00450.3059707286.672020072866789723
0.002201.5559677525.392020/7/31 0:0068975753110.00456.3059707742.972020072963547843
0.001132.4059675323.842020/7/30 0:006987537410450.300.0059707292.672020072966877894
0.0035.0359674191.442020/7/30 0:006687443591,326.440.0059674156.412020073065789423
1326.440.0059674156.412020/7/30 0:006578942380.0035.0359674191.442020073066874435
450.300.0059707292.672020/7/29 0:006687789470.001,132.4059675323.842020073069875374
0.00456.3059707742.972020/7/29 0:006354784360.002,201.5559677525.392020073168975753
0.00450.3059707286.672020/7/28 0:006678972351,007.550.0059676517.842020073168546334
0.0030318.5359706836.372020/7/28 0:006157895340.00129.6959673262.752020073164995735
960.0059705876.372020/7/27 0:006157895330.001,093.1059674355.852020073163558755
6321.0059699576.372020/7/26 0:006157875320.001,093.1059675448.952020073166221133
9900.0059709476.372020/7/26 0:006157895310.006,335.6459675482.852020073167889927
nianyi 发表于 2020-8-12 10:48
建议贴个表格示例上来,把一些隐私信息替换掉。说明清楚自己要以什么作为依据,去比较哪些内容
已经发了表格上来,大佬帮忙看看,如何核对出正确的数据,标记出不正确的数据? 疾风怪盗 发表于 2020-8-12 00:31
不是一样的么?给的是个思路,要么你就给原数据,否则只能自己学啊
我发了一个表格模板出来,原数据,大佬帮忙看看,如何自动核对出正确的数据标绿色,不正确的数据标注红色, 还是按照以前的 数据库英文开头的数据列表,放在A表格,中文开头的网银账单的数据放在B表格,自动核对之后,生成一个新的Excel表文件出来。 你是要相同交易日志号下的数据不一致,核对交易日志号下的数据是不是正确?还是两个表是不是存在不同交易日志号?两个表合成一个表输出? 疾风怪盗 发表于 2020-8-13 00:52
你是要相同交易日志号下的数据不一致,核对交易日志号下的数据是不是正确?还是两个表是不是存在不同交易日 ...
是要找出两个表得,收入,支出,余额,交易日志,自动对比,找出不一样得,然后自动生成一个新Excel,标注红色。 seslovelm 发表于 2020-8-13 09:00
是要找出两个表得,收入,支出,余额,交易日志,自动对比,找出不一样得,然后自动生成一个新Excel,标 ...
你没明白我的意思,A表内的交易日志号和B表内的交易日志号一样的情况下,收入、支出、余额可能不一致,需要找出来,是这个意思?还是说两个表是否存在不一致的交易日志号? 疾风怪盗 发表于 2020-8-13 10:35
你没明白我的意思,A表内的交易日志号和B表内的交易日志号一样的情况下,收入、支出、余额可能不一致, ...
两个表格存在,收入,支出,余额,交易日志号,都不一样的情况。 seslovelm 发表于 2020-8-14 00:13
两个表格存在,收入,支出,余额,交易日志号,都不一样的情况。
建议使用vba 搞不定,放弃了,感觉总归要全部遍历一次,不知道论坛大神有没有简便的方法 疾风怪盗 发表于 2020-8-14 21:45
搞不定,放弃了,感觉总归要全部遍历一次,不知道论坛大神有没有简便的方法
是有点难度,我原先问了个女大神,她说很简单,加个if就行了。 from openpyxlimport load_workbook
from openpyxl.styles import colors,PatternFill
import pandas as pd
def Read_Excel():
data1=pd.read_excel('1.xlsx',keep_default_na=False)
print(data1)
data2=pd.read_excel('2.xlsx',keep_default_na=False)
data1=data1.reset_index().astype('str')
data1.rename(columns={'index':'index1'},inplace=True)
data2=data2.reset_index().astype('str')
data2.rename(columns={'index':'index2'},inplace=True)
data3=data1.merge(data2,left_on='transaction_reference_number',right_on='交易日志号',how='outer')
print(data3)
data3.to_excel('3.xlsx')
return data3
def Fill_Color(in_filename,out_filename,index):
fill = PatternFill("solid", fgColor=colors.RED)
wb1=load_workbook(in_filename)
ws1=wb1['Sheet1']
con_max = ws1.max_column
for i in index:
for j in range(1,con_max+1):
ws1.cell(row=int(i)+2,column=j).fill=fill
wb1.save(out_filename)
data3=Read_Excel()
index_excel1=[]
index_excel2=[]
for i in data3.index:
if (data3.loc !=data3.loc) or (data3.loc !=data3.loc)\
or (data3.loc !=data3.loc):
index_excel1.append(data3.loc)
index_excel2.append(data3.loc)
index_excel1=list(set(index_excel1))
index_excel2=list(set(index_excel2))
print(f'索引1:{index_excel1}')
print(f'索引2:{index_excel2}')
Fill_Color('1.xlsx','3.xlsx',index_excel1)
Fill_Color('2.xlsx','4.xlsx',index_excel2)
也不知道是不是你想要的,只能写成这样了
页:
[1]