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中的文字搞定批量打印奖状...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目验收文档模板(三)
- 下一篇: ABSynthe : 侧信道攻击加密函数