1. 程式人生 > >如何在Python中將資料插入到Word模板中生成一份Word文件

如何在Python中將資料插入到Word模板中生成一份Word文件

   在一些的專案開發中,會有一些生成Word檔案的操作,比如將獲取到的一些資料新增到Word模板當中的相應的位置生成一份Word文件。

    由於最近的Python專案當中需要將一些從伺服器查出的資料新增到Word模板當中生成一份Word文件,完成這個操作需要用到的是Python當中一個叫做docx-mailmerge的包,這個包的作用是解析MS Word docx檔案,並且找到合併欄位並且用你想要的任何值去填充他們。其實,這個“mailmerge”可以是一個有用的模板系統,可以用於更復雜的解決方案,而不僅僅是填充文件中的名稱和地址。

首先,我們需要安裝docx-mailmerge這個包。在命令列輸入語句,開始安裝該包。

pip install docx-mailmerge

如果你的系統中已經安裝了該包,系統會有如下的提示。

在完成了docx-mailmerge的安裝之後,需要在Word中進行域的設定,這些域就是你的資料填充的位置。

以Word 2013為例,在Word模板當中,將滑鼠游標移動到你細腰插入資料的地方,之後按下圖所示進行操作:

點選域之後,選擇 郵件合併,域名選擇MergeField,域名可以理解為你在程式碼中的一個變數,將你要插入的資料賦值給這個變數,你的資料便會插入到模板當中。另外,格式按照自己的要求去選擇,預設為無。

這裡我簡單的編輯了一個證明的模板,在需要插入資料的地方設定完域之後,結果如下圖所示:

 在完成前兩步工作之後,最後一步就剩下程式碼的編寫工作了。

在本文中,其實這一部分程式碼非常簡單,本文我寫一個簡單的Demo,其中我的檔名稱和給域賦的值都是寫死的,在專案中生成的Word名稱和給域賦值都可以是變數,還有,模板的位置,生成檔案的位置可以改變,生成檔案的名字可以是變數,這樣,每次生成的docx檔名字就會不一樣,比如在我的專案當中,我就將身份證號作為檔名稱,這樣按照模板生成的docx檔案不會出現重複。

document_1.write('F:\\{}.docx'.format(emp_full_info.get("identity_card")))

由於Python預設是Unicode編碼,所以字串賦值前要加u,如果是變數賦值,則可以用decode方法,比如:

Year=year.decode(encoding='UTF-8', errors='strict')

Demo具體的原始碼:

from mailmerge import MailMerge

 # 列印模板
        template = "F:\\WorkingProve11.docx"

        # 建立郵件合併文件並檢視所有欄位

        document_1 = MailMerge(template)
        print("Fields included in {}: {}".format(template,document.get_merge_fields()))
        document_1.merge(
            people_name=u'勒布朗',
            identity_card_id='123456789',
            begin_work_year='2018',
            begin_work_month='7',
            department_name=u'洛杉磯湖人',
            job_name=u'聯盟第一人'
            
        )

        document.write('F:\\test666.docx')

最後,在制定的F盤下出現了生成的test666.docx檔案,開啟之後結果如下圖: 

 

最後要注意的一點是,如果在同一位置下生成的兩份檔名字一樣,程式碼是會報錯的。

解決方法有以下幾種:

1.執行程式之前,將原來的檔案刪除。

2.在程式碼中將檔名稱更改。

3.按照上文我所說的,將檔名稱改為變數。

希望本文可以幫助到大家。

相關推薦

如何在Python中將資料插入Word模板生成Word

   在一些的專案開發中,會有一些生成Word檔案的操作,比如將獲取到的一些資料新增到Word模板當中的相應的位置生成一份Word文件。     由於最近的Python專案當中需要將一些從伺服器查出的資料新增到Word模板當中生成一份Word文件,完成這個操作需要用到的是P

使用NPOI按照word模板檔案生成新的word檔案

/// <summary> /// 按照word模板檔案 生成新word檔案 /// </summary> /// <param name="tempFile">模板檔案路徑</param>

POI往word模板寫入資料

POI的XWPFDocument和XWPFTemplate兩種方法往word模板中填充資料import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; im

python讀取txt並將資料插入到sql

原始資料在txt中 處理有很多不便 想要把它們插入到sql中去 程式碼如下: 連線資料庫: import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="root",db="mydatab

python測試開發django-6.模板include使用

當我 cut 自動 前言 bubuko end charset name 上海 前言 當我們打開一個網站的時候,在打開不同的頁面時候,會發現每個頁面的頂部、底部內容都差不多,這樣就可以把這些公共的部分,單獨抽出來。 類似於python裏面的函數,把公共部分寫成函數,然後調用

依據word模板批量生成試卷

java-word-MassProduction 目錄 使用方法 開發流程 一.使用方法 1.製造題庫所需Word模板 需要填充資料的地方使用 ${pid} 代替。 將這個word選擇另存為,儲存格式選擇為xml,然後將這個xml放到專案的ftl目錄下,字尾名改為.ftl 。

資料庫讀取原始資料插入新表,對處理原始資料的原則總結

在讀取原始資料的時候會有可能屬性名的名字與要建立的表的名字不符,這個時候就要為讀取到的資料重新命名屬性名。 如果資料中存在中文,還要宣告資料庫的編碼。 在原始表中可能會有重複資料,需要事先將重複資料進行刪除,然後再做其他處理。 在設定主鍵的時候會發現有些資料的主鍵相同,但是其他屬性值不同,需要對已經插入

python中將資料增強

from keras.preprocessing.image import ImageDataGenerator from keras.preprocessing import image impor

如何把爬取到的資料插入到execl

當我們爬蟲爬取大量資料並且已經爬取到了本地,這些資料如果不儲存起來,那麼就會變得無效.   那下面讓小編教你把這些資料插入Excel中儲存下來吧~   我們已經把資料爬到本地並已經插入execl,上效果圖     操作Exec

laravel模板生成URL的幾種模式

1.通過url輔助函式(路由)生成: location.href = "{{url('user/index2')}}"; 或者:location.href = "{{url::to('user/ind

在jsp裡面實現註冊新使用者的功能,但是不能把資料插入到資料庫,是怎麼回事,求助,我的程式碼如下

RegisterServer.java package com.cqnu.service; import com.cqnu.dao.UserDao; import com.cqnu.pojo.DBCon; import com.cqnu.pojo.UserPojo; imp

使用百度JS模板引擎生成PDF和Word

用JS模板引擎能高效的生成pdf和word文件,例子中使用了百度的JS模板引擎,其它模板引擎也是可以的。模板的標籤使用了XDOC,詳細可見:http://xdoc.aliapp.com/xml.html,模板可以視覺化設計 <!DOCTYPE html> <html> <h

根據xlsx模板生成excel數據發送郵件代碼

order comment hssf emp value ade 新的 see util package mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF

(24)Python實現遞歸生成或者刪除一個目錄及

path 生成 std fun created elif ror spa else import os,errno #基本工具類 #①遞歸生成輸入的路徑下面的文件夾或文件 #②遞歸刪除輸入的路徑下面的文件夾及文件 ‘‘‘ param : dirPath return :

Java動態生成當前日期的

java;文件名自動生成;1.Java中動態生成當前日期的文件名稱並且將控制臺的輸出信息輸入到文件中 public static void SaveClonseToFile() throws IOException, FileNotFoundException { File f =

pycharm每次創建py時就自動生成代碼頭,以及出現SyntaxError:Non-ASCII 。。。問題

char ror utf 生成 CI 出現 每次 class font 我們在pycharm中執行py文件的時候,可能會出現以下錯誤 這是因為你沒有制定編碼格式,這時候你需要在文件最開始制定編碼格式,代碼如下 #!/user/bin/env python

python進程間通訊——鎖之fcntl模塊的使用

too clas tool python except sleep bject ati tle python 中給文件加鎖——fcntl模塊import fcntl打開一個文件##當前目錄下test文件要先存在,如果不存在會報錯。或者以寫的方式打開f = open(‘./

SpringBoot使用Swagger生成RestFul規範API

j簡單介紹Swagger的作用: Swagger是為了描述一套標準的而且是和語言無關的REST API的規範。對於外部呼叫者來說,只需通過Swagger文件即可清楚Server端提供的服務,而不需去閱讀原始碼或介面文件說明。 官方網站為:http://swagger.io 中文網站:http

8、jeecg 筆記之 自定義word 模板匯出(

1、前言 jeecg 中已經自帶 word 的匯出匯出功能,其所使用的也是 easypoi,儘管所匯出的 word 能滿足大部分需求, 但總是有需要用到自定義 word匯出模板,下文所用到的皆是 easypoi 提供的,為方便下次翻閱,故記之。   2、程式碼部分 2.1、controll

使用jacob替換word模版並生成pdf或word

只能在win平臺上使用  通過中介軟體 jacob呼叫office的api來實現對word檔案的操作 主要用到了WordUtils.java 需要office 2007及以上版本 生成PDF要安裝SaveAsPDFandXPS.exe包 程式碼如下 package com