遍历所有文件的数据并进行sql比对
import os
import xlrd # 导入库
import pymssql
import openpyxl
import xlwt
import xlsxwriter
connect = pymssql.connect(charset= "GBK") # 服务器名,账户,密码,数据库名
if connect:
print("连接成功!")
file_list = []
# 定义一个函数,函数名字为get_all_excel,需要传入一个目录
def get_all_excel(dir): #遍历文件夹中的所有excel 传入一个文件夹路径
for root_dir, sub_dir, files in os.walk(r'' + dir):
# 对文件列表中的每一个文件进行处理,如果文件名字是以‘xlxs’结尾就
# 认定为是一个excel文件,当然这里还可以用其他手段判断,比如你的excel
# 文件名中均包含‘res’,那么if条件可以改写为
for file in files:
# if file.endswith('.xlsx') and 'res' in file:
if file.endswith('.xlsx'):
# 此处因为要获取文件路径,比如要把D:/myExcel 和res.xlsx拼接为
# D:/myExcel/res.xlsx,因此中间需要添加/。python提供了专门的
# 方法
file_name = os.path.join(root_dir, file)
# 把拼接好的文件目录信息添加到列表中
file_list.append(file_name)
print(file_name)
return file_list
# def open_xlsx(xlsx_name):
# # 打开文件
# xlsx = xlrd.open_workbook(xlsx_name)
# # 查看所有sheet列表
# print('表格%s 的All sheets: %s' % (xlsx_name,xlsx.sheet_names()))
get_all_excel(r'bug')
# get_all_excel(r'C:')
print(file_list)
MBMC_list = []
ZBDM_list = []
SQL_ZBMC_list = []
MB_ZBMC_list = []
ZBMB_ROW_list = []
ZBSHEET_list = []
error_num = 0
for xlsx_workname in file_list : #遍历所有excel名字
if "~$" not in xlsx_workname:
xlsx =openpyxl.load_workbook(xlsx_workname) #打开xlsx文件
xlsx_sheets = xlsx.sheetnames
print("正在读取文件%s"%xlsx_workname )
for xlsl_worksheet in range (len(xlsx_sheets)):
sheet_used = xlsx[xlsx_sheets[xlsl_worksheet]]
sheet_name = sheet_used.title # 获得名称
sheet_cols = sheet_used.max_column # 获得列数
sheet_nrows = sheet_used.max_row # 获得行数
sheet_num = xlsl_worksheet + 1
# print('第' + str(i + 1) + '个sheet: ' + sheet.title + '->>>')
# print("工作表%s的第%s个sheet有%s行,%s列" %(sheet_name,sheet_num ,sheet_cols,sheet_nrows))
if "记录" not in sheet_name and "目录" not in sheet_name and "入库" not in sheet_name and "指标" not in sheet_name : #不读取目录和记录
print(sheet_name)
for xlsx_workrow in range(5, sheet_nrows):
col1 = sheet_used.cell(row=xlsx_workrow+1 , column=1).value # 查看第i行第1列数据
col2 = sheet_used.cell(row=xlsx_workrow+1, column=2).value # 查看第i行第2列数据
sheet_row_add = xlsx_workrow + 1
judge_zbdm1 = str(col1) #第六行第一列的的数值作为标志
judge_zbdm2 = str(col2)
len_zbdm1 = len(judge_zbdm1)
len_zbdm2 = len(judge_zbdm2)
if col1 is not None: #不为空
# if judge_zbdm1.startswith('1'): #标识符 第一列为指标代码列
if judge_zbdm1.startswith('1'):
cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行
sql_col1 = cursor.execute(
"select distinct ZBDM,ZBMC from usrDFJJYXZBB WHERE ZBDM = %s" % col1) # 执行sql语句
# 获取所有记录列表
results1 = cursor.fetchall()
for row in results1:
ZBDM1 = row[0]
ZBMC1 = row[1]
# print(ZBDM1,ZBMC1)
if ZBMC1 != col2 :
print("【%s】文件的《%s》工作表的 (%s)行有问题<%s>,库名称<%s>,sheet代码名称<%s>" % (xlsx_workname,sheet_name,sheet_row_add,ZBDM1,ZBMC1,col2))
MBMC_list.append(xlsx_workname)
ZBSHEET_list.append(sheet_name)
ZBMB_ROW_list.append(sheet_row_add)
ZBDM_list.append(ZBDM1)
SQL_ZBMC_list.append(ZBMC1)
MB_ZBMC_list.append(col2)
#存入列表
error_num = error_num + 1 #计数
elif judge_zbdm2.startswith('1') : #2列为代码
cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行
sql_col1 = cursor.execute(
"select distinct ZBDM,ZBMC from usrDFJJYXZBB WHERE ZBDM = %s" % col2) # 执行sql语句
# 获取所有记录列表
results1 = cursor.fetchall()
for row in results1:
ZBDM1 = row[0]
ZBMC1 = row[1]
# print(ZBDM1,ZBMC1)
if ZBMC1 != col1:
print("【%s】文件的《%s》工作表的(%s)行有问题<%s>,库名称<%s>,sheet代码名称<%s>" % (xlsx_workname, sheet_name, sheet_row_add, ZBDM1, ZBMC1,col1))
MBMC_list.append(xlsx_workname)
ZBSHEET_list.append(sheet_name)
ZBMB_ROW_list.append(sheet_row_add)
ZBDM_list.append(ZBDM1)
SQL_ZBMC_list.append(ZBMC1)
MB_ZBMC_list.append(col1)
#存入列表
error_num = error_num + 1 #计数
else:
pass
else:
print("不读取记录和目录sheet")
# 关闭数据库连接
connect.close()
print("关闭数据库链接")
Tabel=xlsxwriter.Workbook('月扫.xlsx')#创建一个excel文件,文件名为“统计表”
sheet1=Tabel.add_worksheet()#在该excel文件中创建一张表sheet1
#为该表填上内容
sheet1.write(0,0,"文件名")#表示在该表(0,0)位置处单元格,填上数字1,诸如此类,用该方法可以给表的其他单元格
sheet1.write(0,1,"sheet名")
sheet1.write(0,2,"行数")
sheet1.write(0,3,"代码")
sheet1.write(0,4,"库指标名称")
sheet1.write(0,5,"模板名称")
for add in range(0,len(ZBDM_list)):
sheet1.write(add+1, 0, MBMC_list[add]) # 表示在该表(0,0)位置处单元格,填上数字1,诸如此类,用该方法可以给表的其他单元格
sheet1.write(add+1, 2, ZBMB_ROW_list[add])
sheet1.write(add+1, 3, ZBDM_list[add])
sheet1.write(add+1, 4, SQL_ZBMC_list[add])
sheet1.write(add+1, 5, MB_ZBMC_list[add])
print(ZBDM_list)
Tabel.close()#保存结束
# 获取上一级别目录中的指定文件
# print(get_all_excel('.'))
openpyxl报错TypeError: expected <class ‘str‘>
pip install openpyxl==2.4
版本退回才执行成功,问题不明
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~