python 处理 word 文档
python 处理 word
- 
简介- 在web开发过程中,经常需要导出一些word文档,比如运营月报、进货单、收据等。它们的特点是格式都是一致的,只是需要不同的数据进行填充
- docx 和 docxtpl 是比较常见的处理 word 文件的python库。其中前者用于创建一个包含段落、图片、表格、页眉等元素文档,后者使用类似 jinja2 的方式从模板文档生成新的文档
 
- 
安装pip install python-docx pip install docxtpl # docxtpl 库会依赖jinja2
- 
使用- 
情景1:使用 python-docx从无到有创建一个docx文档,很少这样做,几乎不用关注
- 
情景2:使用 docxtpl库对已有的docx文档模板进行数据填充,极为常见- 处理docx模板文档
- 在docx文档中直接使用jinja2语法,{{ var }},即可将数据render进去
- 循环是高级点的语法,可百度,并无特别难之处
 
- 对应的主要python代码,大同小异,在py脚本中将数据彻底处理好,render仅做简单数据填充。
 from docxtpl import DocxTemplate doc = DocxTemplate("my_word_template.docx") context = {'company_name' : "World company"} doc.render(context) doc.save("generated_doc.docx")
- 处理docx模板文档
 
- 
- 
结合python框架的示例代码- 
Django def export_monthly_report(request, year, index): context = {} # 填充数据 doc = DocxTemplate(app.root_path + '/templates/report_monthly.docx') target_filename = 'monthly_{}_{}.docx'.format(year, index) doc.render(context) file_stream = io.BytesIO() doc.save(file_stream) file_stream.seek(0) response = HttpResponse( file_stream.getvalue(), # use the stream's contents content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", ) response["Content-Disposition"] = 'attachment; filename = "{}"'.format(target_filename) response["Content-Encoding"] = "UTF-8" return response
- 
flask import io from flask import send_file def export_monthly_report(year, index): context = {} # 填充数据 doc = DocxTemplate(app.root_path + '/templates/report_monthly.docx') target_filename = 'monthly_{}_{}.docx'.format(year, index) doc.render(context) file_stream = io.BytesIO() doc.save(file_stream) file_stream.seek(0) return send_file(file_stream, as_attachment=True, attachment_filename=target_filename)
 
- 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号