Python生成word

使用python-docx-template库, 将html转为word

python-docx-template可以使用类似jinja2的模板语法。

依赖docx库, 安装pip install docxtpl docx

docxtplpython-docx-template的引擎。

GitHub主页https://github.com/elapouya/python-docx-template,上面有一些docx文件的模板使用示例,

Python文件的示例。

个人fork的主页https://github.com/zZhaoLei/python-docx-template

使用示例, 和使用jinja2替换的方式差不多。

from docxtpl import DocxTemplate
from docx.shared import Mm doc = DocxTemplate("my_word_template.docx")
context = { 'company_name' : "World company" }
doc.render(context)
doc.save("generated_doc.docx")

Mm是毫米, 官方规定for height and width you have to use millimeters (Mm), inches or points(Pt) class

图片的添加

使用InlineImage

from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm doc = DocxTemplate("my_word_template.docx") context = {
'image': InlineImage(doc, path, width=Mm(30))
}
doc.render(context)
doc.save("generated_doc.docx")

path可以是路径, 也可以是文件对象, width可以设置宽度或用heigth设置高度

使用xml生成word

先使用微软的office新建空白文档, 调整模板, 设置样式等.

最后另存为xml格式的文件, 使用sublime进行格式化, 需要安装xml格式化插件Indent XML

安装sublime后, 使用ctrl+~调出命令, Sublime 3粘贴

import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

sublime 2粘贴

import urllib2,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')

r然后通过Preferences-->Package Control-->Install Package, 在弹出的框中输入Indent XML, 点击就会自动安装.

使用Esc键可以关闭安装窗口.

Selection-->Format中选择Indent XML, 保存.

现在可以查找想要进行模板替换的位置了, 使用jinja2的模板语法。

Python代码示例

# -*- coding:utf-8 -*-
from __future__ import unicode_literals
import jinja2 path = 'C:/Users/lei/Desktop/project/export/doc/'
fsl = jinja2.FileSystemLoader(searchpath=path) env = jinja2.Environment(loader=fsl)
tpl = env.get_template("test.xml") data = {
'name': '这是一个测试',
'ip': '10.10.10.66',
'status': '正在进行中......',
'start_time': '2018-3-28',
'end_time': '2018-3-29',
'time': '2018-3-29 123213212321',
'num': '10000000'
}
with open(path + "test.doc", 'w') as f:
f.write(tpl.render(data = data).encode('utf-8'))

我这里直接在word中新建的空白文档, 修改后直接保存为了Word XML, 不能写入为docx, 只能写入为doc.

docx是有目录结构的压缩包, doc没有目录结构.

Python生成word的更多相关文章

  1. python生成word中文字体

    python生成word中文字体 我们今天用python生成word文件,主要是用到了PyRTF包生成rtf文件,由于PyRTF的包中文教程比较少,所以特此记录几篇文章,也希望给大家有一些帮助. 开始 ...

  2. Python操作Word【批量生成文章】

    http://www.cnblogs.com/codex/p/4668396.html 需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同 ...

  3. Python操作Word批量生成文章

    需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同也不好.大体看了一下,此类的记录大致分为四段.于是决定每段提供四种选项,每段从四选项里随 ...

  4. PHPWord生成word实现table合并(colspan和rowspan)

    PHPWord(http://phpword.codeplex.com/)是一个很好处理和生成WORD文档的工具,但是生成复杂的word,如colspan和rowspan的实现,还是需要你做些修改. ...

  5. python读写word、excel、csv、json文件

    http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...

  6. windows&lunix下node.js实现模板化生成word文件

    最近在做了一个小程序!里面有个功能就是根据用户提交的数据,自动生成一份word文档返回给用户.我也是第一次做这功能,大概思路就是先自己弄一份word模板,后台接受小程序发过来的数据,再根据这些数据将相 ...

  7. 用Python将word文件转换成html(转)

    用Python将word文件转换成html   序 最近公司一个客户大大购买了一堆医疗健康方面的科普文章,希望能放到我们正在开发的健康档案管理软件上.客户大大说,要智能推送!要掌握节奏!要深度学习!要 ...

  8. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

  9. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

随机推荐

  1. 使用python移动飞信模块发送短信

    作者:miaoo 1.应用场景 由于自己做的一个系统需要用到发送短信到自己手机的功能,于是搜索了一下,发现了一个通过移动飞信通道发送短信开源库:PyFetion PyFetion 模拟实现了飞信的通信 ...

  2. Python 绘图利器 —— ggplot

    安装: 命令行:pip install ggplot 1. 杂项 NameError: name 'ggsave' is not defined. Python ggplot- ggsave func ...

  3. [LeetCode OJ] Copy List with Random Pointer 扩大

    职务地址:https://oj.leetcode.com/problems/copy-list-with-random-pointer/ 题意:对一个有回路的链表的深复制 解题:这道题我AC了之后才发 ...

  4. 就服务器项目部署debug谈谈自己的感受

    前言 学校小组Project那些外国人啥也不会, 基本上我一个人全包了前端和后端, 说实话这些天来也感受到了写一个比较拿得出手的web确实也不是这么容易的, 特别是我没什么项目经验, 很多时候碰到问题 ...

  5. 一次 .NET Core 中玩锁的经历:ManualResetEventSlim, Semaphore 与 SemaphoreSlim

    最近同事对  .net core memcached 缓存客户端 EnyimMemcachedCore 进行了高并发下的压力测试,发现在 linux 上高并发下使用 async 异步方法读取缓存数据会 ...

  6. WPF 寻找数据模板中的元素

    <Window x:Class="Wpf180706.Window11"        xmlns="http://schemas.microsoft.com/wi ...

  7. easyui Full Layout

    @{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport&q ...

  8. 数据库访问工具 DBUtl(公孙二狗)

    数据库访问工具 DBUtil DBUtil 用于简化数据库的访问,只要准备好配置文件,调用 DBUtil 的静态函数就能直接得到查询数据库的结果. 本文主要内容有: 数据库访问的思考 DBUtil 实 ...

  9. Windows软件在Linux上的等价/替代/模仿软件列表 (抄一个)

    Last update: 16.07.2003, 31.01.2005, 27.05.2005 您可在以下网站发现本列表最新版:http://www.linuxrsp.ru/win-lin-soft/ ...

  10. Zookeeper zkui-zookeeper图形化管理工具

    zkui zkui是一个Zookeeper可视化管理工具. Github:https://github.com/DeemOpen/zkui zkui安装 1.Git拉取代码 #git clone ht ...