<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python自動(dòng)化辦公:讀取Excel數(shù)據(jù)并批量生成合同

          共 2583字,需瀏覽 6分鐘

           ·

          2022-05-31 11:15




          在我們的工作中,面臨著大量的重復(fù)性工作,通過(guò)人工方式處理往往耗時(shí)耗力易出錯(cuò)。而Python在自動(dòng)化辦公方面具有極大的優(yōu)勢(shì),可以解決我們工作中遇到的很多重復(fù)性問(wèn)題,分分鐘搞定辦公需求。

          一、背景

          在我們經(jīng)濟(jì)交往中,有時(shí)會(huì)涉及到銷售合同的批量制作。比如我們需要根據(jù)如下合同數(shù)據(jù)(Excel),進(jìn)行批量生成銷售合同(Word)。



          二、準(zhǔn)備


          我們首先要準(zhǔn)備好一份合同模板(Word),將需要替換的合同數(shù)據(jù)用{{}}表示,如下:




          三、實(shí)戰(zhàn)


          1.安裝相關(guān)庫(kù)


          openpyxl是一個(gè)操作Excel非常好用的庫(kù),功能相對(duì)于xlrd、xlwt來(lái)說(shuō)更為完整,我們首先安裝它:


          pip?install?openpyxl


          docxtpl 一個(gè)操作Word非常好用的庫(kù),其主要通過(guò)對(duì)docx文檔模板加載,從而對(duì)其進(jìn)行修改,我們也安裝下這個(gè)庫(kù)。


          pip?install?docxtpl



          2.讀取合同數(shù)據(jù)


          我們可以通過(guò)load_workbook方法打開(kāi)合同數(shù)據(jù)(Excel表),然后讀取每一個(gè)合同數(shù)據(jù)并存入到data字典,再將每個(gè)字典放入到列表datas中。PS:由于讀取的簽約日期是一個(gè)時(shí)間戳,需要通過(guò)strftime方法轉(zhuǎn)為標(biāo)準(zhǔn)的年月日格式。


          from?docxtpl?import?DocxTemplate
          from?openpyxl?import?load_workbook

          wb?=?load_workbook("合同數(shù)據(jù).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,?
          ????????????"合同價(jià)款":?price,?
          ????????????"產(chǎn)品名稱":?product,?
          ????????????"產(chǎn)品數(shù)量":?count,
          ????????????"付款期限":?deadline,
          ????????????"簽約時(shí)間":?time}
          ????datas.append(data)
          datas


          當(dāng)然,我們也可以通過(guò)pandas大法來(lái)讀取合同數(shù)據(jù),主要運(yùn)用到dataframe_to_rows方法,將pandas格式的數(shù)據(jù)轉(zhuǎn)為一行一行的數(shù)據(jù)。index=False表示不需要索引,header=False表示不需要表頭。


          import?pandas?as?pd
          from?openpyxl.utils.dataframe?import?dataframe_to_rows

          df?=?pd.read_excel("合同數(shù)據(jù).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],?
          ????????????"合同價(jià)款":?row[2],?
          ????????????"產(chǎn)品名稱":?row[3],?
          ????????????"產(chǎn)品數(shù)量":?row[4],
          ????????????"付款期限":?row[5],
          ????????????"簽約時(shí)間":?row[6]}?
          ????datas.append(data)
          datas


          我們可以打印datas,效果如下:


          [{'甲方':?'J哥',
          ??'乙方':?'老王',
          ??'合同價(jià)款':?1000000,
          ??'產(chǎn)品名稱':?'菜J學(xué)Python',
          ??'產(chǎn)品數(shù)量':?1,
          ??'付款期限':?30,
          ??'簽約時(shí)間':?'2022-05-20'},
          ?{'甲方':?'K哥',
          ??'乙方':?'張三',
          ??'合同價(jià)款':?20000,
          ??'產(chǎn)品名稱':?'冰箱',
          ??'產(chǎn)品數(shù)量':?2,
          ??'付款期限':?40,
          ??'簽約時(shí)間':?'2022-05-21'},
          ?{'甲方':?'C哥',
          ??'乙方':?'李四',
          ??'合同價(jià)款':?30000,
          ??'產(chǎn)品名稱':?'電腦',
          ??'產(chǎn)品數(shù)量':?3,
          ??'付款期限':?50,
          ??'簽約時(shí)間':?'2022-05-22'},
          ?{'甲方':?'B哥',
          ??'乙方':?'王五',
          ??'合同價(jià)款':?40000,
          ??'產(chǎn)品名稱':?'洗衣機(jī)',
          ??'產(chǎn)品數(shù)量':?4,
          ??'付款期限':?60,
          ??'簽約時(shí)間':?'2022-05-23'},
          ?{'甲方':?'P哥',
          ??'乙方':?'趙六',
          ??'合同價(jià)款':?50000,
          ??'產(chǎn)品名稱':?'微波爐',
          ??'產(chǎn)品數(shù)量':?5,
          ??'付款期限':?70,
          ??'簽約時(shí)間':?'2022-05-24'}]


          3.批量合同生成


          這里運(yùn)用for語(yǔ)句遍歷每一個(gè)合同數(shù)據(jù)data(字典格式),打開(kāi)合同模板,并將data替換掉合同模板中的數(shù)據(jù),然后保存為新的銷售合同。


          for?data?in?datas:
          ????tpl?=?DocxTemplate('合同模板.docx')
          ????tpl.render(data)
          ????tpl.save(f'合同生成/{data["甲方"]}的銷售合同{data["簽約時(shí)間"]}.docx')
          ????print(f'{data["甲方"]}的銷售合同已生成')


          代碼運(yùn)行后,效果如下:



          打開(kāi)其中一個(gè)銷售合同,效果如下:


          對(duì)比Excel系列圖書(shū)累積銷量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書(shū)名進(jìn)行了解選購(gòu)
          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲天堂在线官网 | 国产主播av | 97国产精品视频 | 久久永久免费 | 午夜看片 |