根据符合特定格式的excel模板创建excel文件

excel-template的Python项目详细描述


项目描述

根据特定格式的Excel模版,通过填充数据生成实际的Excel文件。 实际文件中的单元格样式,完全从模版文件中复制过来。 省去了代码定义单元格样式的过程,简化了开发和维护。

安装

pipinstallexcel-template

同时需要安装

pipinstallopenpyxl>=2.5.0

示例代码

importosfromexcel_templateimportWritertemplate_path=os.path.join(ENV['root'],'template','XXX_template.xlsx')output_file_path=os.path.join(ENV['root'],'output','XXX.xlsx')#Sheet1为模版所在的Sheet名称excel_writer=Writer(template_path,'Sheet1',output_file_path)data=XXXModule().get_XXX_data()ifisinstance(data,dict):excel_writer.set_data(data)elifisinstance(data,list):excel_writer.set_data(data,multi_sheet=True)else:raiseException('如果生成单Sheet的Excel文件,data的格式必须为dict'+'如果生成多Sheet的Excel文件,data的格式必须为list'+'其中,list的每个数据成员,渲染一个Sheet')

模版的使用规则

  • 示例模版:(看不清图片,请右键,点击在新标签页中打开图片) image

  • 对应的填充数据如下:

data={'company_name':'ExampleName','company_address':'ExampleAddress','company_contact':'ExampleContact','dport_and_country':'Melbourne Airport, Australia','aport_and_country':'Shanghai Airport, China','logsitics_no':'L122212','create_time':'2019-01-31','containers':[{'pallet_no':'---','carton_no':'1','sku_no':'','hs_code':'','description_cn':'','description_en':'','description_note':'','qty':'','net_weight':16.027,'gross_weight':1,'length':1,'width':1,'height':1,'pallet_type':'N/A'},{'pallet_no':'','carton_no':'','sku_no':'35536633','hs_code':'43545545','description_cn':'自然裸妆假睫毛','description_en':'Gurley mix','description_note':'','qty':3,'net_weight':5.211,'gross_weight':'','length':'','width':'','height':'','pallet_type':''}],'pallet_count':0,'carton_count':1,'total_qty':3,'total_net_weight':16.027,'total_gross_weight':1,'total_volume':1}
  • 渲染的结果如下图所示: image
  • 注意事项:
    • 全表支持横向合并单元格
    • 只有表头数据(列表数据上方的非列表数据)支持纵向合并单元格,表尾数据(列表数据下方的非列表数据)不支持
    • 如果想渲染空格的样式,例如合并单元格,也必须填充"{{}}'"
    • 模版的复制,属于黑箱操作,因此样式(例如:边框等)需要认真设置。

待补充的方面

  • 不支持表尾数据合并单元格,有需求可改进。
  • 列表数据只支持一种生成规则,不支持不同列区域内存在不同的生成规则。
  • 出现过生成Excel文件时间过长,导致接口超时的情况,目前还未对其进行研究过。 建议解决方法是,将其放到异步任务中执行。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由ScheduledExecutorService触发的java同步线程   java如何兼容OpenJRE/JDK1.8。x与OracleJRE/jdk1.8。十、   可重用代码的静态最佳实践Java   TestsNG中有多个测试的java事务问题   排序为什么我的气泡排序不起作用?JAVA   JavaSpring与动态数据源   java如何在Mule Dataweave转换中使用正则表达式替换特殊字符?   java是否单独调用服务器以在jsp文件的img标记中呈现图像?   java基本语法,用于在函数中将扫描程序对象作为参数传递   java基于两列在Hibernate中填充外部集合   java安装eclipse时,我在文件夹中找不到jdk   kotlin Java 11`HttpClient`正在下载但未下载?(负内容长度)   文件Java无法读取Ö(特殊字符)并打印它   javars+Spring   java TestNg Selenide。没有webdriver绑定到当前线程   java我应该如何对数据库建模,以便数据库中的每个学生实体都有一个与每个课程实体相关的分数?   java GoogleAccountCredential getSelectedAccountName()在设置并实现权限后返回null   java从ngclick调用servlet中的函数   java NetBeans JTable不带滚动窗格,保留标题   java Drools从会话中获取相同类型的对象