| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | import xlwtclass ReportFileUtils:    def __init__(self):        self.styleOK = xlwt.easyxf()        self.default_style = self.set_style('Times New Roman',                       200,                       bold=False,                       format_str='', align='')    pass    def set_style(self, name, height, bold=False, format_str='', align='center'):        style = xlwt.XFStyle()  # 初始化样式        font = xlwt.Font()  # 为样式创建字体        font.name = name  # 'Times New Roman'        font.bold = bold        font.height = height        borders = xlwt.Borders()  # 为样式创建边框        borders.left = 2        borders.right = 2        borders.top = 0        borders.bottom = 2        alignment = xlwt.Alignment()  # 设置排列        if align == 'center':            alignment.horz = xlwt.Alignment.HORZ_CENTER            alignment.vert = xlwt.Alignment.VERT_CENTER        else:            alignment.horz = xlwt.Alignment.HORZ_LEFT            alignment.vert = xlwt.Alignment.VERT_BOTTOM        style.font = font        style.borders = borders        style.num_format_str = format_str        style.alignment = alignment        return style    def horizontal_cell_merge(self, ws, start_row, end_row, start_col, end_col, content):        """            横向单元格合并        :param ws:        :param start_row:        :param end_row:        :param start_col:        :param end_col:        :param content:        :return:        """        ws.write_merge(            start_row,            end_row,            start_col,            end_col,            content,            self.set_style(                'Times New Roman',                320,                bold=True,                format_str=''))    def horizontal_space_cells(self, ws, start_row, end_row, start_col, end_col):        self.horizontal_cell_merge(ws, start_row, end_row, start_col, end_col, '')    def vertical_cell_merge(self, ws, start_row, end_row, start_col, end_col, content):        """            纵向单元格合并        :param ws:        :param start_row:        :param rows:        :param start_col:        :param end_col:        :param content:        :return:        """        ws.write_merge(            start_row,            end_row,            start_col,            end_col,            content,            self.set_style(                'Times New Roman',                320,                bold=True,                format_str=''))  # 合并单元格    def insert_cells(self, ws, data, start_row, start_col, end_col):        for index, v in enumerate(data):            y = 0            for col in range(start_col, end_col):                value = v[y]                if value is None:                    value = 0                ws.col(col).width = 150 * 30  # 定义列宽                ws.write(start_row, col, str(value),                         style=self.default_style)                y += 1            start_row += 1    def horizontal_space_cells(self, ws, start_row, end_row, start_col, end_col):        """            空白占位        :param ws:        :param start_row:        :param end_row:        :param start_col:        :param end_col:        :return:        """        self.horizontal_cell_merge(ws, start_row, end_row, start_col, end_col, '')    def create_excel_file(self, data, sheet_names, title, headers, save_path):        """            生成excel文件, data, sheet_names,headers 三者在数量上要对应        :param data: 数据        :param sheet_names: 工作簿名称        :param title: 文件名称        :param headers: 每个工作簿表头        :return:        """        self.wb = xlwt.Workbook()        for index, d in enumerate(data):            # 创建工作簿            sheet_name = sheet_names[index]            header = headers[index]            ws = self.wb.add_sheet(sheet_name, cell_overwrite_ok=True)            # 区域            start_row = 0            # 写入标题            self.horizontal_cell_merge(ws, start_row, start_row, 0, len(header) - 1, sheet_name)            start_row += 1            # 写入表头            self.insert_cells(ws, [headers[index]], start_row, 0, len(header))            # start_row += 1            # city_info = {}            # insert_data = []            # region_info = {}            # data_size = 0            # for key in d.keys():            #     region_rows = 0            #     value = d.get(key)            #     region_name = key            #     # 城市            #     for key_1 in value.keys():            #         value_1 = value.get(key_1)            #         city_name = key_1            #         region_rows += len(value_1)            #         insert_data.extend(value_1)            #         city_info[city_name] = len(value_1)            #         data_size = len(value_1[0])            #     region_info[region_name] = region_rows            # # 合并区域            # for key in region_info.keys():            #     print(key)            #     self.vertical_cell_merge(ws, start_row, start_row + region_info.get(key) - 1, 0, 0, key)            #     start_row += region_info.get(key)            # # 城市合并            # start_row = 2            # for key in city_info.keys():            #      self.vertical_cell_merge(ws, start_row, start_row + city_info.get(key) - 1, 1, 1, key)            #      start_row += city_info.get(key)            # 写入数据            start_row = 2            self.insert_cells(ws, d, start_row, 0, len(d[0]))        self.wb.save(save_path + '/' + title)if __name__ == '__main__':    rf = ReportFileUtils()    data = [                [[1, 2, 3, 5, 6, 7, 8, 9, 1]],                [[1, 2, 3, 5, 6, 7, 8, 9, 1]],                [[1, 2, 3, 5, 6, 7, 8, 9, 1]]        ]    sheet_names = ['前一日数据', '本月数据', '上线后所有']    title = "测ss试.xlsx"    headers = [['区域', '城市', '项目名称', '推荐人id', '姓名', '手机号', '火电', '注册', '宝贝'],               ['区域', '城市', '项目名称', '推荐人id', '姓名', '手机号', '火电', '注册', '宝贝'],               ['区域', '城市', '项目名称', '推荐人id', '姓名', '手机号', '火电', '注册', '宝贝']]    rf.create_excel_file(data, sheet_names, title, headers, r'D:\elab\elab_mvp\test')
 |