1、目的html
目前本人就任与甲方的工做,因为公司的ERP比较烂没法完美的设计套打,就想着本身用Python开发一个套打工具。app
2、开发过程工具
刚开始我打算用Html的方式生成打印的文档,可是有两个没法解决的问题。性能
一、Chrome对html的最小字号锁定了8号,须要写缩放。测试
二、HTML的设计只有开发才能完成,会把工做留在本身部门。字体
最后锁定了仍是EXCEL作个套打的模板,根据EXCEL来生成须要打印的EXCEL。spa
3、实现的功能设计
一、模板Sheet页中全部格式完美的打印。excel
包括行高、列高、合并单元格、填充色、字体、字体的样式code
实现效果
模板
打印效果
二、支持多个Sheet数据的打印。
三、支持明细表的打印。
控制每一个Sheet打印的明细表行数,若是超出可打印行,输出到另外的Sheet、SheetName是SheetName_N。
四、基于性能关系,用xlrd,xlwt进行Excel的操做,因此不支持excel07以上的版本。
五、因为Excel07如下的版本每一个文件只支持255个Sheet,基于性能考虑每一个Excel文件只存放100个Sheet。超过100个Sheet,输出到另一个Excel文件。
4、代码实现
一、安装c_excel_template库
须要源码的能够下载了看
pip install c_excel_template
二、测试的数据
from c_excel_template import Excel_Template #模板的文件 template_file="example.xls" #模板文件的Sheet名 template_sheet="example" test=Excel_Template(template_file,template_sheet) #保存的文件名 save_name="test3.xls" #开始输出 test.print_excel_with_template(save_name=save_name,print_data=print_data)
打印数听说明
# test:sheetname test2-主表的变量 test1-主表变量 d1明细表名 print_data={"test":{'test2':"ddd", 'test1': "BBB","d1":[]}} #明细表"d1"的值以list方式输出 [{"orderno":"A1","sales":"B1"}] for i in range(1,120): print_data["d1"].append({"orderno":f"A{i}","sales":f"B{i}"})
EXCEL打印模板的设计
主表的变量:$变量$
明细表的变量:$明细表名.明细表字段名$
明细表开始行标记:$明细表名.start_id$
明细表结束行标记:$明细表名.end_id$