Python合并Excel类的错误行代码

# 导入 excel 和文件操作库
import xlrd
import xlwt
from pathlib import Path, PurePath


class ExcelMerger(object):
    """
    Excel 的合并类
    实现的功能:
    1、读取所有 Excel ,并创建新的 Excel 进行存储;
    2、可以指定读取路径、保存路径;
    3、自定义生成 Excel 的头部;
    4、支持数据去重,默认为 False;
    5、适合少量的 Excel 数据,具体最大的数据量还未测试,欢迎小伙伴反馈;
    6、新增在列表中是否添加原本的 Excel 名称 whether_to_add_filename ;
    7、增添添加 Excel 原本文件名称的次数指定 filename_num;
    """

    def __init__(self, src_path=".", res_path="默认路径.xls", sheet_header=[], result_sheeet="合并结果",
                 duplicate_removal=False, whether_to_add_filename=True, filename_num=None):
        # 指定要合并 excel 的路径
        self.src_path = src_path
        # 指定合并完成的路径
        self.res_path = res_path
        # 准备一个列表存放读取结果
        self.content = []
        # 读取的 Excel 的文件的内容数,也就是几列的数据
        # self.content_num = content_num
        # 合并之后的头部
        self.sheet_header = sheet_header
        # 合并之后的 Excel 中 sheet 表名称
        self.result_sheet = result_sheeet
        # 设置去重的判断
        self.duplicate_removal = duplicate_removal
        # 设置是否在 Excel 中添加文件名称
        self.whether_to_add_filename = whether_to_add_filename
        # 如果要有 filename 的次数
        self.filename_num = filename_num

    def read_the_excel_file_path(self):
        """
        读取 Excel 文件的路径
        :return path_files
        """
        # 取得该目录下所有的 xls 格式文件
        p = Path(self.src_path)
        path_files = [x for x in p.iterdir() if PurePath(x).match('*.xls')]
        return path_files

    def read_excel_full(self, filename, sheet):
        """
        读取 Excel 中的全部内容,暂时开发全部的 sheet 读取之后直接存放在最终同一个 sheet
        :param sheet:
        :return:
        """
        # 去的全部的行列数
        content = []
        rows = sheet.nrows
        cols = sheet.ncols
        # 取得每一项的结果
        base_str = ","
        for row in range(1, rows):
            temp = []
            if self.whether_to_add_filename:
                for i in range(self.filename_num):
                    temp.append(filename)
            for col in range(cols):
                # print(sheet.cell(row, col).value, end=",")
                value = sheet.cell(row, col).value
                temp.append(value)
            self.content.append(temp)

    # return self.content

    def write_excel_data(self, data):
        workbook = xlwt.Workbook(encoding='utf-8')
        xlsheet = workbook.add_sheet(self.result_sheet)
        # 写入表头,方法一
        # col = 0
        # for cell_header in self.sheet_header:
        #   xlsheet.write(0, col, cell_header)
        #   col += 1

        # 写入方法二
        for cell_header in self.sheet_header:
            xlsheet.write(0, self.sheet_header.index(cell_header), cell_header)

        row = 1
        # 取出每一行内容
        for line in data:
            col = 0
            # 取出每个单元格内容
            for cell in line:
                # 写入内容
                xlsheet.write(row, col, cell)
                # 向右移动一个单元格
                col += 1
            # 向下移动一行
            row += 1
        # 保存最终结果
        workbook.save(self.res_path)

    def processing(self):
        # 对每一个文件进行重复处理
        for pathfile in self.read_the_excel_file_path():
            # 用文件名作为每个用户的标识
            filename = pathfile.stem
            data = xlrd.open_workbook(pathfile)
            table_num = data.sheets()
            if len(table_num) == 1:
                table = table_num[0]
                # data_text = self.read_excel_full(filename, table)
                self.read_excel_full(filename, table)
            # data_list.append(data_text)
            # self.write_excel_data(data_list)
            else:
                for t in table_num:
                    table = t
                    self.read_excel_full(filename, table)

    def data_to_heavy(self):
        """Excel 数据去重,因为我使用的数据类型是:list 所以,处理的目标也就是 Python 中 list 去重"""
        for i in self.content:
            count_number = self.content.count(i)
            if count_number != 1:
                for x in range((count_number - 1)):
                    self.content.remove(i)

    def main(self):
        self.processing()
        if self.duplicate_removal:
            self.data_to_heavy()
        self.write_excel_data(self.content)


if __name__ == '__main__':
    # 准备写入文件的表头
    src_path = "../调查问卷"
    sheet_header = ['文件名称', '姓名', '地址', '手机号', '城市']
    excel_merger = ExcelMerger(
        src_path="../调查问卷",
        res_path="合并结果3.xls",
        sheet_header=sheet_header,
        duplicate_removal=False,
        whether_to_add_filename=True,
        filename_num=6,
    )
    excel_merger.main()
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。QQ、微信在线,随时响应!V:Jiabcdefh
AI悦创 » Python合并Excel类的错误行代码

发表评论