简单的查表工具

由于项目内的导表没有做检查工具,目前简单的做了一个检查工具

完成的功能有:

1、查重复ID

2、检查是否存在异常数值

3、检查语言表是否有空白项

 

其余的功能再慢慢实现

__author__ = "KID"

from openpyxl.reader.excel import load_workbook
import os
import time

class XlsxCheck():

    def __init__(self, excel_path:str, sFileName, no_list, language):
        '''打开一个excel'''
        self.excel_path = excel_path
        self.sFileName = sFileName
        self.no_list = no_list
        self.language = language
        #print(excel_path)
        if not os.path.exists(excel_path):
            print("路径错误,请检查当前路径")
            os.system('pause')

    def Get_FileName(self, excel_path):
        print("开始检查文件")
        sFileName = []
        filename = os.listdir(excel_path)
        try:
            for Name in filename:
                if os.path.exists(excel_path + r"\\" + Name):
                    suffix = Name.split(".")[1]
                    test = Name.split(".", 2)
                    if len(test) == 2:
                        if suffix == "xlsx" or suffix == "xlsm" or suffix == "xltx" or suffix == "xltm":
                            name = Name.split(".")[0]
                            if "~$" not in name:
                                sFileName.append(Name)
                    else:
                        print("发现冲突的文件,请检查文件名:{}".format(Name.split(".")[0]))
                        continue
            print("检查完毕!")
            return sFileName
        except Exception as e:
            print(e)
            pass

    def run(self):
        sFileName = self.Get_FileName(excel_path)
        print("==============================开始查表==============================")
        self.check_id(sFileName)
        self.check_str(sFileName)
        self.check_Language(sFileName)
        os.system('pause')



    def get_needchecksheetname(self, excel_path, sFileName):
        needchecksheetname = []
        if sFileName == None:
            return
        wb = load_workbook(excel_path + r"\\" + sFileName)
        if wb != None:
            sheetnames = wb.get_sheet_names()
            for sheet in sheetnames:
                if sheet not in no_list:
                    #print("现在检查的sheetname:{}".format(sheet), flush=True)
                    needchecksheetname.append(sheet)
        return needchecksheetname


#此处仅检查第一列的ID是否存在重复的情况
    def check_id(self, sFileName):
        print("检查是否存在ID重复的情况")
        #sFileName = self.Get_FileName(excel_path)
        try:
            for filenames in sFileName:
                wb = load_workbook(excel_path + r"\\" + filenames)
                sheetnames = self.get_needchecksheetname(excel_path, filenames)
                for a in sheetnames:
                    id_list = []
                    self.ws = wb.get_sheet_by_name(a)
                    for i in range(1, self.ws.max_row + 1):
                        if type(self.ws.cell(i, 1).value) == int:
                            if self.ws.cell(i, 1).value not in id_list:
                                id_list.append(self.ws.cell(i, 1).value)
                                # print(id_list)
                            else:
                                print("重复!!表名:{} Sheet:{} 行数:{} 列数:{} 内容: {}".format(filenames, a, i, 1, self.ws.cell(i, 1).value), flush=True)
            print("==============================ID全部检查完毕!==================================\r\r")
        except Exception as e:
            print(e)
            os.system('pause')
            exit()

#此处检查是否存在ERROR等异常数值
    def check_str(self, sFileName):
        print("检查表格内是否存在###ERROR!!!等错误值")
        #sFileName = self.Get_FileName(excel_path)
        try:
            for filenames in sFileName:
                wb = load_workbook(excel_path + r"\\" + filenames)
                sheetnames = self.get_needchecksheetname(excel_path, filenames)
                for a in sheetnames:
                    name_list = []
                    self.ws = wb.get_sheet_by_name(a)
                    for i in range(2, self.ws.max_row + 1):
                        for y in range(2, self.ws.max_column + 1):
                            if type(self.ws.cell(i, y).value) == str:
                                if str(self.ws.cell(i, y).value) not in name_list:
                                    if str(self.ws.cell(i, y).value) == "#ERROR!":
                                        print("发现##ERROR!!!表名:{} Sheet:{} 行数:{} 列数:{}".format(filenames, a, i, y))
                                    name_list.append(self.ws.cell(i, y).value)
            print("==============================内容等异常数值检查完毕!==============================\r\r")
        except Exception as e:
            print(e)
            os.system('pause')
            exit()

    def check_Language(self, sFileName):
        print("专门检查语言表是否有漏翻译")
        logout = True#打印日志txt的总开关
        log = []
        #sFileName = self.Get_FileName(excel_path)
        try:
            for filenames in sFileName:
                if filenames == "语言总表_Language.xlsx":
                    wb = load_workbook(excel_path + r"\\" + filenames)
                    sheetnames = self.get_needchecksheetname(excel_path, filenames)
                    for a in sheetnames:
                        self.ws = wb.get_sheet_by_name(a)
                        for y in range(2, self.ws.max_column + 1):
                            if self.ws.cell(1, y).value in language:
                                lan = self.ws.cell(1, y).value
                                for i in range(6, self.ws.max_row + 1):
                                    # print("打印Sheet:{} 第{}行 第{}列的内容:{}".format(a, i, y, self.ws.cell(i, y).value))
                                    if self.ws.cell(i, y).value == None and self.ws.cell(i, 1).value != None:
                                        print("打印Sheet:{} 语言:{} 第{}行 第{}列 为空,请检查!".format(a, lan, i, y))
                                        log.append("打印Sheet:{} 语言:{} 第{}行 第{}列 为空,请检查!".format(a, lan, i, y))
            if logout:
                print("日志文件输出已打开!")
                now_localtime = time.strftime("%y%m%d%H%M%S", time.localtime())
                with open(now_localtime + ".txt", mode="w") as l:
                    for w in log:
                        l.write(str(w))
                        l.write("\n")
                l.close()
                print("输出完毕,请检查文件名:{}".format(now_localtime + ".txt"))
            print("==============================语言表检查完毕!==============================\r\r")
        except Exception as e:
            print(e)
            os.system('pause')
            exit()

if __name__ == '__main__':
    excel_path = os.path.abspath("数据表")
    sFileName = ""
    no_list = [
        "备注_buffer种类",
        "备注_buffer触发类型",
        "语言总表附录",
        "LanguageType",
        "备注相关",
        "价值",
        "母表",
        "存档",
        "奖励配置逻辑",
        "命名规则",
        "规则",
        "计算母表",
        "Sheet1",
        "Sheet2",
        "后坐力模板参考",
        "后坐力模板打印",
        "投掷物属性参照",
        "范围伤害衰减计算",
        "枪械伤害设计",
        "辅助瞄准",
        "骨骼挂点",
        "皮肤枪属性加成",
        "原档",
        "备注",
        "修正",
        "公式",
        "公式2",
        "设置表其他母表",
        "原件",
        "旧邮件",
        "语言参考"
    ]#这里是不需要检查的sheet
    language = [
        "简体中文",
        "繁體",
        "英文",
        "泰文",
        "印尼文",
        "越南语",
    ]#这里是要检查的语言
    s = XlsxCheck(excel_path, sFileName, no_list, language)
    s.run()

 

posted @ 2021-02-05 14:38  黑羽青衣  阅读(145)  评论(0编辑  收藏  举报