Python讀取Excel數(shù)據實現(xiàn)批量生成合同
大家好,我是J哥。
在我們的工作中,面臨著大量的重復性工作,通過人工方式處理往往耗時耗力易出錯。而Python在自動化辦公方面具有極大的優(yōu)勢,可以解決我們工作中遇到的很多重復性問題,分分鐘搞定辦公需求。
一、背景
在我們經濟交往中,有時會涉及到銷售合同的批量制作。比如我們需要根據如下合同數(shù)據(Excel),進行批量生成銷售合同(Word)。
二、準備
我們首先要準備好一份合同模板(Word),將需要替換的合同數(shù)據用{{}}表示,如下:
三、實戰(zhàn)
1.安裝相關庫
openpyxl是一個操作Excel非常好用的庫,功能相對于xlrd、xlwt來說更為完整,我們首先安裝它:
pip?install?openpyxl
docxtpl 是一個操作Word非常好用的庫,其主要通過對docx文檔模板加載,從而對其進行修改,我們也安裝下這個庫。
pip?install?docxtpl
2.讀取合同數(shù)據
我們可以通過load_workbook方法打開合同數(shù)據(Excel表),然后讀取每一個合同數(shù)據并存入到data字典,再將每個字典放入到列表datas中。PS:由于讀取的簽約日期是一個時間戳,需要通過strftime方法轉為標準的年月日格式。
from?docxtpl?import?DocxTemplate from?openpyxl?import?load_workbook wb?=?load_workbook("合同數(shù)據.xlsx") ws?=?wb['Sheet1'] datas?=?[] for?row?in?range(2,?ws.max_row): ????name1?=?ws[f"A{row}"].value ????name2?=?ws[f"B{row}"].value ????price?=?ws[f"C{row}"].value ????product?=?ws[f"D{row}"].value ????count?=?ws[f"E{row}"].value ????deadline?=?ws[f"F{row}"].value ????time?=?ws[f"G{row}"].value ????time?=?time.strftime("%Y-%m-%d") ????data?=?{"甲方":?name1, ????????????"乙方":?name2,? ????????????"合同價款":?price,? ????????????"產品名稱":?product,? ????????????"產品數(shù)量":?count, ????????????"付款期限":?deadline, ????????????"簽約時間":?time} ????datas.append(data) datas
當然,我們也可以通過pandas大法來讀取合同數(shù)據,主要運用到dataframe_to_rows方法,將pandas格式的數(shù)據轉為一行一行的數(shù)據。index=False表示不需要索引,header=False表示不需要表頭。
import?pandas?as?pd from?openpyxl.utils.dataframe?import?dataframe_to_rows df?=?pd.read_excel("合同數(shù)據.xlsx") df["簽約日期"]?=?df["簽約日期"].apply(lambda?x:x.strftime("%Y-%m-%d")) datas?=?[] for?row?in?dataframe_to_rows(df,index=False,header=False): ????data?=?{"甲方":?row[0],? ????????????"乙方":?row[1],? ????????????"合同價款":?row[2],? ????????????"產品名稱":?row[3],? ????????????"產品數(shù)量":?row[4], ????????????"付款期限":?row[5], ????????????"簽約時間":?row[6]}? ????datas.append(data) datas
我們可以打印datas,效果如下:
[{'甲方':?'J哥', ??'乙方':?'老王', ??'合同價款':?1000000, ??'產品名稱':?'菜J學Python', ??'產品數(shù)量':?1, ??'付款期限':?30, ??'簽約時間':?'2022-05-20'}, ?{'甲方':?'K哥', ??'乙方':?'張三', ??'合同價款':?20000, ??'產品名稱':?'冰箱', ??'產品數(shù)量':?2, ??'付款期限':?40, ??'簽約時間':?'2022-05-21'}, ?{'甲方':?'C哥', ??'乙方':?'李四', ??'合同價款':?30000, ??'產品名稱':?'電腦', ??'產品數(shù)量':?3, ??'付款期限':?50, ??'簽約時間':?'2022-05-22'}, ?{'甲方':?'B哥', ??'乙方':?'王五', ??'合同價款':?40000, ??'產品名稱':?'洗衣機', ??'產品數(shù)量':?4, ??'付款期限':?60, ??'簽約時間':?'2022-05-23'}, ?{'甲方':?'P哥', ??'乙方':?'趙六', ??'合同價款':?50000, ??'產品名稱':?'微波爐', ??'產品數(shù)量':?5, ??'付款期限':?70, ??'簽約時間':?'2022-05-24'}]
3.批量合同生成
這里運用for語句遍歷每一個合同數(shù)據data(字典格式),打開合同模板,并將data替換掉合同模板中的數(shù)據,然后保存為新的銷售合同。
for?data?in?datas: ????tpl?=?DocxTemplate('合同模板.docx') ????tpl.render(data) ????tpl.save(f'合同生成/{data["甲方"]}的銷售合同{data["簽約時間"]}.docx') ????print(f'{data["甲方"]}的銷售合同已生成')
代碼運行后,效果如下:
打開其中一個銷售合同,效果如下:
到此這篇關于Python讀取Excel數(shù)據實現(xiàn)批量生成合同的文章就介紹到這了,更多相關Python生成合同內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
配置python連接oracle讀取excel數(shù)據寫入數(shù)據庫的操作流程
這篇文章主要介紹了配置python連接oracle,讀取excel數(shù)據寫入數(shù)據庫,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Python中使用logging和traceback模塊記錄日志和跟蹤異常
今天小編就為大家分享一篇關于Python中使用logging和traceback模塊記錄日志和跟蹤異常,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04