六一将至,学校要表彰优秀同学,于是安排我去打印奖状。按照一般的情况,打印奖状都是打印个模板批量复印,然后手工填写名字,然后我们的校长特别叮嘱我说,名字也要用打印的,这样比较正式。看到获奖名单上的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中的文字搞定批量打印奖状...相关推荐

  1. 用python的win32com模块替换word中的文字搞定批量打印奖状

    六一将至,学校要表彰优秀同学,于是安排我去打印奖状.按照一般的情况,打印奖状都是打印个模板批量复印,然后手工填写名字,然后我们的校长特别叮嘱我说,名字也要用打印的,这样比较正式.看到获奖名单上的100 ...

  2. python替换word中的文字内容

    摘要:这篇文章介绍了如何使用python[3.6版本]把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则 pdf转换为word pdf文件由于很难 ...

  3. 批处理dir 保存到变量中_批处理|看大神如何教您30秒搞定批量提取文件名!

    本文转自公号:UX2088|冰枫大叔 大家好,我是冰叔,又有好几个火星时间没见啦!那么冰叔今天给大家带来的是什么呢?带来的是我们日常工作当中经常会使用到的一项任务,那就是|批|量|提|取|文|件|名| ...

  4. python中文字体奇怪_利用python检查 AS400的中文字问题

    总所周知,AS400处理中文的能力比较有限,特别是在针式打印机上打印含有中文字体的报表的时候,特别容易出现乱码.这里先探讨一下AS400的 中文格式.在AS400中,存放中文字的字段都是以0x0E开头 ...

  5. python docx 字体大小_聊聊python办公自动化之Word(上)

    作者:星安果

  6. python dict批量选择_用python实现word内容批量替换

    本文讨论一下如果使用python来批量替换word中的内容. 一.目标: 在word文档中,将水果的名称由中文替换为英文. 而且我们有多份word文档. 二.实现: 使用了python-docx 这个 ...

  7. python docx table 生成_从Python docx生成docx文件,pythondocx

    python-docx是python编程语言的一个库,可以对docx文档进行读,同时也可以进行生成docx文档,这篇文档主要是讲生成docx文档. 1.生成一个空docx文档 # coding:utf ...

  8. python读取word文件并替换部分文字_python实现替换word中的关键文字(使用通配符)...

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...

  9. 【可乐荐书】Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作

    本栏目将推荐一些经典的.有趣的.有启发性的书籍,这些书籍涵盖了各个领域,包括文学.历史.哲学.科学.技术等等.相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力. 今天给大家推荐的书籍 ...

  10. python 替换文本 通配符_python实现替换word中的关键文字(使用通配符)

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...

最新文章

  1. 【206】Firefox 扩展收集
  2. 大数据可视化模板_最佳大数据可视化技术
  3. LiquidCrystal库函数
  4. Android_神奇的android:clipChildren属性
  5. 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
  6. 手机APP测试几个要点
  7. python中使用中文字符,文件首行添加# -*- coding: utf-8 -*-后仍然报错(unicode error) ‘utf-8‘ codec can‘t decode byte 0xc4
  8. c语言试卷浙江理工大学杀人案件追踪,浙江理工大学c语言期末考试模拟试卷6 .pdf...
  9. c++ 单例模式_Java面试题总结之设计模式、网络基础、常用算法
  10. python语言有哪些类型的运算符_python(4)-变量 数据类型和运算符
  11. mysql事务操作_mysql的事务操作
  12. 前端学习(159):meta
  13. 2060显卡驱动最新版本_我们平时电脑的驱动需要一直更新吗?教你如何正确的维护你的驱动...
  14. seo与sem的关系和区别
  15. mongoTemplate查询指定字段
  16. 论war3中的随机数系统
  17. Android 多线程应用
  18. IDEA 轻松实现线上debug 调试
  19. 等了好久终于到今天--姐拿到驾照了(考试总结)
  20. 格拉斯哥大学开发新算法,预测病毒的原始宿主

热门文章

  1. 408考研计算机网络视频,计算机408考研视频哪个好
  2. iReport 生成pdf分页问题
  3. 2017全国省市区县 json数据
  4. 调试Python代码
  5. 基于统计学的商务与经济数据分析知识
  6. 使用阿里云code和git管理项目
  7. qq视频转码失败怎么办_教程:如何下载舞蹈视频里面的音乐?
  8. JSON离线格式化工具HiJson
  9. 基于Ubuntu系统下的Hadoop 环境搭建(新手可尝)
  10. Flexsim——初学AGV必看的知识点(如何解决AGV在不同区域speed不同)