#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2023/4/27 10:01 # @Author : old tom # @File : excel_writer.py # @Project : py-xltpl # @Desc : 写入excel模板 from xltpl.writerx import BookWriter from exceltpl.pdman.pdman_reader import PDmanReader from futool.core.fh_file_path import exist class ATiDeDBDocWriter(object): class TemplateNotExistError(Exception): def __init__(self, msg): Exception.__init__(self, msg) def __init__(self, data, tpl_path, out_path): """ :param data: 数据 使用PDmanReader 读取 :param tpl_path: 模板路径 :param out_path: 输出路径 """ if not exist(tpl_path): raise self.TemplateNotExistError(f'[{tpl_path}]模板不存在,请检查路径') self.writer = BookWriter(tpl_path) self.writer.set_jinja_globals(dir=dir, getattr=getattr) self.data = data self.out_path = out_path def fill(self): payloads = [] for i, t in enumerate(self.data): table = self.data[t] table['sheet_name'] = str(i + 1) + '.' + table['table_name'] table['tpl_idx'] = i payloads.append(table) self.writer.render_sheets(payloads=payloads) self.writer.save(self.out_path) if __name__ == '__main__': reader = PDmanReader(r'D:\文档\工作\ATD\2023上半年\项目\昭通OA\表结构\昭通OA.pdma.json') writer = ATiDeDBDocWriter(reader.read_by_module('OA_CAR'), r'C:\Users\89295\Desktop\atide_db_tpl.xlsx', r'C:\Users\89295\Desktop\车辆管理.xlsx') writer.fill()