python win32com 字体选择_用python的win32com模块替换word中的文字搞定批量打印奖状...
六一將至,學(xué)校要表彰優(yōu)秀同學(xué),于是安排我去打印獎(jiǎng)狀。按照一般的情況,打印獎(jiǎng)狀都是打印個(gè)模板批量復(fù)印,然后手工填寫名字,然后我們的校長(zhǎng)特別叮囑我說(shuō),名字也要用打印的,這樣比較正式??吹将@獎(jiǎng)名單上的100+個(gè)名字頓時(shí)就淚奔了,這意味著我得執(zhí)行“打開(kāi)word——替換名字——點(diǎn)擊打印”這個(gè)程序100多次。估摸著這么搞我肯定會(huì)死在打印室的,于是開(kāi)始琢磨怎么解決這個(gè)問(wèn)題。
打印的模板是固定的,不同的只有名字,于是問(wèn)題的核心就成了怎么把自動(dòng)替換名字這個(gè)步驟自動(dòng)化。大致流程:
1.先制作模板,試打印,確認(rèn)排版和內(nèi)容沒(méi)問(wèn)題;
2.用程序自動(dòng)將模板中的名字替換掉,然后另存一份,如此循環(huán)生成所有人對(duì)應(yīng)的打印文件;
3.選中所有文件,右鍵點(diǎn)擊打印,自動(dòng)加入打印列隊(duì),等著就行了。
第一步?jīng)]什么技術(shù)含量,提前測(cè)量,然后試錯(cuò)幾次就搞定了。
第二步是核心。因?yàn)樽罱鼘W(xué)編程用的都是python,所以直接就奔著去了。搜了下,python處理office文檔的常用包是 win32com( http://starship.python.net/~skippy/win32/Downloads.html )。裝好之后沒(méi)找著合適的文檔。模塊里貌似也是直接調(diào)用微軟的API來(lái)實(shí)現(xiàn)相關(guān)處理的,于是去看了看MSDN相關(guān)的文檔。不知是微軟的編排問(wèn)題還是我打開(kāi)的方式不對(duì),整體感覺(jué)是內(nèi)容繁雜,找不著需要的內(nèi)容,加上示例代碼基本是用C#,不知道在win32com包里怎么寫,于是放棄了。去搜了幾個(gè)使用的例子,剛好拼湊出了需要的內(nèi)容。代碼如下:
# -*- coding: utf-8-*-
import win32com
from win32com.client import Dispatch, constants
#模板文件保存路徑,此處使用的是絕對(duì)路徑,相對(duì)路徑未測(cè)試過(guò)
template_path = 'C:\Users\yely\Desktop\jiangzhuang\print.doc'
#另存文件路徑,需要提前建好文件夾,不然會(huì)出錯(cuò)
store_path = 'C:\Users\yely\Desktop\jiangzhuang\list\\'
#模板中需要被替換的文本。u''中的u表示unicode字符,用于中文支持
NewStr = u'小二'
#啟動(dòng)word
w = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用啟動(dòng)獨(dú)立的進(jìn)程:
# w = win32com.client.DispatchEx('Word.Application')
# 后臺(tái)運(yùn)行,不顯示,不警告
w.Visible = 0
w.DisplayAlerts = 0
# 打開(kāi)新的文件
doc = w.Documents.Open( FileName = template_path )
# worddoc = w.Documents.Add() # 創(chuàng)建新的文檔
# 正文文字替換
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()直接打印,未測(cè)試
doc.Close()
w.Documents.Close()
w.Quit()
第二步完成后,所有需要打印的文檔就已經(jīng)搞定了。接下來(lái)全選,然后右鍵點(diǎn)打印就OK了。出去上個(gè)廁所放個(gè)風(fēng),回來(lái)拿獎(jiǎng)狀。這兒有個(gè)小問(wèn)題,一般打印獎(jiǎng)狀都是旁路送紙,把空白獎(jiǎng)狀拿去打,而右鍵點(diǎn)擊打印會(huì)直接用打印機(jī)的默認(rèn)設(shè)置。這個(gè)可以在word的頁(yè)面設(shè)置,選擇紙張的地方可以選擇默認(rèn)的打印機(jī)紙盒,把這個(gè)調(diào)成旁路送紙就不需要在打印的時(shí)候再進(jìn)行選擇了。
-------------------------------------------分割線--------------------------------------------
What is more?
win32com里有個(gè)doc.PrintOut()功能,應(yīng)該是可以不用生成不同的word直接打印,不過(guò)沒(méi)有去測(cè)試。
開(kāi)始本來(lái)想把名單放在記事本里,用程序讀取然后做替換的,死活沒(méi)搞定讀取的問(wèn)題,于是就直接把名單硬編碼在代碼里了,還好用了編輯器里的宏簡(jiǎn)化了下操作,不然這也是個(gè)體力活兒。主要是python的中文支持處理起來(lái)感覺(jué)比較復(fù)雜。一個(gè)是路徑中的中文處理方法,另一個(gè)是文本里的中文,包括讀寫操作等。有空要去研究研究。
程序打開(kāi)文件之后再出錯(cuò),會(huì)有文件駐留在內(nèi)存里,打開(kāi)的時(shí)候會(huì)被鎖定之類的。所以還得改善下錯(cuò)誤處理部分的代碼。
win32com的文檔還需要去找找,這次是誤打誤撞找到了需要的功能,以后不知道會(huì)有什么需求了。
Word的API研究起來(lái)還是比較復(fù)雜,以后去試試其他的排版工具,比如耳聞已久的LaTex。
總結(jié)
以上是生活随笔為你收集整理的python win32com 字体选择_用python的win32com模块替换word中的文字搞定批量打印奖状...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 项目验收文档模板(三)
- 下一篇: python建模的步骤_python基础