遍历所有文件的数据并进行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

版本退回才执行成功,问题不明

posted @   17。  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示