一、背景
工作中經(jīng)常會需要做大量的合同,不復(fù)雜,也就是在合同模板里修改幾個合同要素,但是必須打開合同一頁一頁的翻找修改,合同太多或者手頭其他事情糾纏在一起的時候,難免會漏掉。正好最近在學(xué)python,我發(fā)現(xiàn)解決這個問題還是很簡單的。
先上成果圖:
首先,將合同模板里需要替換的要素全部用編號替換掉。(標(biāo)黃的是每次都會改變的要素,如:金額、合同編號等;標(biāo)綠的是偶爾會變的要素,如:公司名稱、法人等)
其次,做一張合同要素的EXCEL表,A列為合同中剛剛設(shè)置的要素編號,其他列就是對應(yīng)的要在合同中替換的新內(nèi)容。(注意:單元格格式要設(shè)置成文本格式)
做這樣一張合同要素表其實好處很多,一是很直觀的記錄所有客戶的信息,方便維護(hù);二是便于部門同事之間的協(xié)作。
三、代碼
準(zhǔn)備工作做完就該上代碼了,如果沒興趣的話可以直接看最后下載部分,我將py文件封裝成了exe文件,這樣即使電腦沒裝python也可以使用。
這里主要使用了三個庫:docx、openpyxl、os。
docx和openpyxl需要安裝,
1、引入庫:
用什么函數(shù)就引入什么函數(shù),不然打包成的exe文件會非常大。
2、定義替換函數(shù):
在word中的一個自然段,就是一個paragraph,而一個paragraph是由許多run組成的,加粗、斜體都會形成一個單獨(dú)的run,如圖所示:
類似的,word中的每個表格為一個table,表格中的行是rows,每一個row包含列,在這里叫做單元格(cell),cell與paragraph相似。
3、獲取excel和word的文件名:
利用os庫讀取文件夾內(nèi)的文件名,這樣只要格式是xlsx和docx,任意文件名都可以直接使用。
4、讀取excel內(nèi)數(shù)據(jù):
先獲取excel內(nèi)sheet名列表,選擇第一個讀取,這樣就不需要關(guān)心表格內(nèi)sheet的命名了。
5、循環(huán)讀取并替換:
逐列讀取每一個客戶的全部信息,然后逐行調(diào)用替換函數(shù)進(jìn)行替換,最后生成docx文件。
四、使用
將本程序py文件(或者打包好的exe文件)與合同模板(docx文件)、合同要素(excel文件)放入同一文件夾,運(yùn)行py或exe文件,就會在文件夾內(nèi)自動生成。
延伸:python你甚至可以將客戶的電子郵件寫在excel文件的客戶信息里,調(diào)用smtplib和email庫自動將做好的合同發(fā)過去。