python win32com 字体选择_用python的win32com模块替换word中的文字搞定批量打印奖状...
六一将至,学校要表彰优秀同学,于是安排我去打印奖状。按照一般的情况,打印奖状都是打印个模板批量复印,然后手工填写名字,然后我们的校长特别叮嘱我说,名字也要用打印的,这样比较正式。看到获奖名单上的100+个名字顿时就泪奔了,这意味着我得执行“打开word——替换名字——点击打印”这个程序100多次。估摸着这么搞我肯定会死在打印室的,于是开始琢磨怎么解决这个问题。
打印的模板是固定的,不同的只有名字,于是问题的核心就成了怎么把自动替换名字这个步骤自动化。大致流程:
1.先制作模板,试打印,确认排版和内容没问题;
2.用程序自动将模板中的名字替换掉,然后另存一份,如此循环生成所有人对应的打印文件;
3.选中所有文件,右键点击打印,自动加入打印列队,等着就行了。
第一步没什么技术含量,提前测量,然后试错几次就搞定了。
第二步是核心。因为最近学编程用的都是python,所以直接就奔着去了。搜了下,python处理office文档的常用包是 win32com( http://starship.python.net/~skippy/win32/Downloads.html )。装好之后没找着合适的文档。模块里貌似也是直接调用微软的API来实现相关处理的,于是去看了看MSDN相关的文档。不知是微软的编排问题还是我打开的方式不对,整体感觉是内容繁杂,找不着需要的内容,加上示例代码基本是用C#,不知道在win32com包里怎么写,于是放弃了。去搜了几个使用的例子,刚好拼凑出了需要的内容。代码如下:
# -*- coding: utf-8-*-
import win32com
from win32com.client import Dispatch, constants
#模板文件保存路径,此处使用的是绝对路径,相对路径未测试过
template_path = 'C:\Users\yely\Desktop\jiangzhuang\print.doc'
#另存文件路径,需要提前建好文件夹,不然会出错
store_path = 'C:\Users\yely\Desktop\jiangzhuang\list\\'
#模板中需要被替换的文本。u''中的u表示unicode字符,用于中文支持
NewStr = u'小二'
#启动word
w = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用启动独立的进程:
# w = win32com.client.DispatchEx('Word.Application')
# 后台运行,不显示,不警告
w.Visible = 0
w.DisplayAlerts = 0
# 打开新的文件
doc = w.Documents.Open( FileName = template_path )
# worddoc = w.Documents.Add() # 创建新的文档
# 正文文字替换
w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
#名单
lst = [u'张三', u'李四', u'王五']
#迭代替换名字,并以名字为名另存文件
for i in lst:
OldStr, NewStr = NewStr, i
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)
doc.SaveAs(store_path + i +'.doc')
#doc.PrintOut()直接打印,未测试
doc.Close()
w.Documents.Close()
w.Quit()
第二步完成后,所有需要打印的文档就已经搞定了。接下来全选,然后右键点打印就OK了。出去上个厕所放个风,回来拿奖状。这儿有个小问题,一般打印奖状都是旁路送纸,把空白奖状拿去打,而右键点击打印会直接用打印机的默认设置。这个可以在word的页面设置,选择纸张的地方可以选择默认的打印机纸盒,把这个调成旁路送纸就不需要在打印的时候再进行选择了。
-------------------------------------------分割线--------------------------------------------
What is more?
win32com里有个doc.PrintOut()功能,应该是可以不用生成不同的word直接打印,不过没有去测试。
开始本来想把名单放在记事本里,用程序读取然后做替换的,死活没搞定读取的问题,于是就直接把名单硬编码在代码里了,还好用了编辑器里的宏简化了下操作,不然这也是个体力活儿。主要是python的中文支持处理起来感觉比较复杂。一个是路径中的中文处理方法,另一个是文本里的中文,包括读写操作等。有空要去研究研究。
程序打开文件之后再出错,会有文件驻留在内存里,打开的时候会被锁定之类的。所以还得改善下错误处理部分的代码。
win32com的文档还需要去找找,这次是误打误撞找到了需要的功能,以后不知道会有什么需求了。
Word的API研究起来还是比较复杂,以后去试试其他的排版工具,比如耳闻已久的LaTex。
python win32com 字体选择_用python的win32com模块替换word中的文字搞定批量打印奖状...相关推荐
- 用python的win32com模块替换word中的文字搞定批量打印奖状
六一将至,学校要表彰优秀同学,于是安排我去打印奖状.按照一般的情况,打印奖状都是打印个模板批量复印,然后手工填写名字,然后我们的校长特别叮嘱我说,名字也要用打印的,这样比较正式.看到获奖名单上的100 ...
- python替换word中的文字内容
摘要:这篇文章介绍了如何使用python[3.6版本]把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则 pdf转换为word pdf文件由于很难 ...
- 批处理dir 保存到变量中_批处理|看大神如何教您30秒搞定批量提取文件名!
本文转自公号:UX2088|冰枫大叔 大家好,我是冰叔,又有好几个火星时间没见啦!那么冰叔今天给大家带来的是什么呢?带来的是我们日常工作当中经常会使用到的一项任务,那就是|批|量|提|取|文|件|名| ...
- python中文字体奇怪_利用python检查 AS400的中文字问题
总所周知,AS400处理中文的能力比较有限,特别是在针式打印机上打印含有中文字体的报表的时候,特别容易出现乱码.这里先探讨一下AS400的 中文格式.在AS400中,存放中文字的字段都是以0x0E开头 ...
- python docx 字体大小_聊聊python办公自动化之Word(上)
作者:星安果
- python dict批量选择_用python实现word内容批量替换
本文讨论一下如果使用python来批量替换word中的内容. 一.目标: 在word文档中,将水果的名称由中文替换为英文. 而且我们有多份word文档. 二.实现: 使用了python-docx 这个 ...
- python docx table 生成_从Python docx生成docx文件,pythondocx
python-docx是python编程语言的一个库,可以对docx文档进行读,同时也可以进行生成docx文档,这篇文档主要是讲生成docx文档. 1.生成一个空docx文档 # coding:utf ...
- python读取word文件并替换部分文字_python实现替换word中的关键文字(使用通配符)...
环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...
- 【可乐荐书】Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作
本栏目将推荐一些经典的.有趣的.有启发性的书籍,这些书籍涵盖了各个领域,包括文学.历史.哲学.科学.技术等等.相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力. 今天给大家推荐的书籍 ...
- python 替换文本 通配符_python实现替换word中的关键文字(使用通配符)
环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...
最新文章
- 【206】Firefox 扩展收集
- 大数据可视化模板_最佳大数据可视化技术
- LiquidCrystal库函数
- Android_神奇的android:clipChildren属性
- 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
- 手机APP测试几个要点
- python中使用中文字符,文件首行添加# -*- coding: utf-8 -*-后仍然报错(unicode error) ‘utf-8‘ codec can‘t decode byte 0xc4
- c语言试卷浙江理工大学杀人案件追踪,浙江理工大学c语言期末考试模拟试卷6 .pdf...
- c++ 单例模式_Java面试题总结之设计模式、网络基础、常用算法
- python语言有哪些类型的运算符_python(4)-变量 数据类型和运算符
- mysql事务操作_mysql的事务操作
- 前端学习(159):meta
- 2060显卡驱动最新版本_我们平时电脑的驱动需要一直更新吗?教你如何正确的维护你的驱动...
- seo与sem的关系和区别
- mongoTemplate查询指定字段
- 论war3中的随机数系统
- Android 多线程应用
- IDEA 轻松实现线上debug 调试
- 等了好久终于到今天--姐拿到驾照了(考试总结)
- 格拉斯哥大学开发新算法,预测病毒的原始宿主