1. 程式人生 > >python操作docx文件

python操作docx文件

在2017年暑假綠盟實習期間,部門做的一個專案需要用到docx格式的word文件模板操作,現在有如下記錄:

     關於python操作docx格式文件,我用到了兩個python包,一個便是python-docx包,另一個便是python-docx-template;,同時我也用到了很出名的一個工具"pandoc,下面我會對他們各自進行介紹。

  1.     首先便是python-docx包,這是一個很強大的包,可以用來建立docx文件,包含段落、分頁符、表格、圖片、標題、樣式等幾乎所有的word文件中能常用的功能都包含了,這個包的主要功能便是用來建立文件,相對來說用來修改功能不是很強大,關於文件請檢視他的"
    官網
    ;

  2. 再然後便是python-docx-template這個包了,他可以用來對docx文件進行修改,諸如對文件中的 文字、圖片、富文字、等幾乎所有存在與文件中的他都能替換,而且他操作起來就如同很多web框架中的模板語言一樣,因為他是和jinjia2模板語言結合使用的,所以最好希望使用之前對模板語言有一定了解;

  3. 關於pandoc,這個包在許多需要進行文字轉換的地方用處很強大,他可以把許多如今存在的文件格式轉換問另一種文件格式,如html、markdown、docbook、latex、docx等轉換為xml、latex、markdown、pdf,總之很強大,這是官網,有興趣的可以去了解下。

下面便會相應介紹他們各自的大概的用法。還是按照上面的順序進行介紹,大笑

  • 關於python-docx這個包我覺得最好還是引用他官網的一段程式碼解釋最為合適了,因為這裡面基本情況都被包含了,

  1. from docx import Document<span id="transmark" style="display: none; width: 0px; height: 0px;"></span>  
  2. from docx.shared import Inches  
  3. document = Document()  # 首先這是包的主要介面,這應該是利用的設計模式的一種,用來建立docx文件,裡面也可以包含文件路徑(d:\\2.docx)
  4. document.add_heading('Document Title'
    0)  # 這裡是給文件新增一個標題,0表示 樣式為title,1則為忽略,其他則是Heading{level},具體可以去<a target="_blank" href="https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html">官網</a>查;
  5. p = document.add_paragraph('A plain paragraph having some '# 這裡是新增一個段落
  6. p.add_run('bold').bold = True# 這裡是在這個段落p裡文字some後面新增bold字元
  7. p.add_run(' and some ')  
  8. p.add_run('italic.').italic = True
  9. document.add_heading('Heading, level 1', level=1)   # 這裡是新增標題1
  10. document.add_paragraph('Intense quote', style='IntenseQuote'# 這裡是新增段落,style後面則是樣式
  11. document.add_paragraph(  
  12.     'first item in unordered list', style='ListBullet'# 新增段落,樣式為unordered list型別
  13. )  
  14. document.add_paragraph(  
  15.     'first item in ordered list', style='ListNumber'# 新增段落,樣式為ordered list數字型別
  16. )  
  17. document.add_picture('monty-truth.png', width=Inches(1.25))  # 新增圖片
  18. table = document.add_table(rows=1, cols=3)   # 新增一個表格,每行三列
  19. hdr_cells = table.rows[0].cells   # 表格第一行的所含有的所有列數
  20. hdr_cells[0].text = 'Qty'# 第一行的第一列,給這行裡面新增文字
  21. hdr_cells[1].text = 'Id'
  22. hdr_cells[2].text = 'Desc'
  23. for item in recordset:  
  24.     row_cells = table.add_row().cells   # 這是在這個表格第一行 (稱作最後一行更好) 下面再新增新的一行
  25.     row_cells[0].text = str(item.qty)  
  26.     row_cells[1].text = str(item.id)  
  27.     row_cells[2].text = item.desc  
  28. document.add_page_break()    # 新增分頁符
  29. document.save('demo.docx')  # 儲存這個文件

具體樣式請看:

關於更多細節希望大家還是去他的官網python-docx;看,介紹的還是很詳細

  • 然後便是python-docx-template包了,他用起來就向python中的模板語言一樣,有上下文,有模板,然後進行變數的替換

關於python-docx-template,他的官網名稱便是“像jinjia2一樣來操作docx文件”,因此這個包對於用來進行文件修改時很強大的下面是一個簡單例子:

  1. from docxtpl import DocxTemplate  
  2. doc = DocxTemplate("1.docx")  # 對要操作的docx文件進行初始化
  3. context = { 'company_name' : "World company" }   # company_name 是存在於1.docx文件裡面的變數,就像這樣{{company_name}},直接放在1.docx檔案的明確位置就行
  4. doc.render(context)   # 這裡是有jinjia2的模板語言進行變數的替換,然後便可以在1.docx文件裡面看到{{company_name}}變成了World company
  5. doc.save("generated_doc.docx")   # 儲存
  6. 當然,這個包的功能遠遠不止上面例子中的一些,可以包含圖片  
  7. myimage = InlineImage(doc,'test_files/python_logo.png',width=Mm(20)) # tpl便是上面例子中的doc物件
  8. 也可以包含另一個docx文件,  
  9. sub = doc.new_subdoc()  
  10. sub.subdocx = Document('d:\\2.docx')  
  11. doc.render({'sub': sub})  
這裡操作之後便可以把2.docx檔案裡面的內容直接插入到doc物件(也就是1.docx)文件中{{sub}}這個變數處,被替換為2.docx中的,基本上用到的都是這兩個部分,
  • 最後便是pandoc了,我在這次用到的功能主要是,用來把html檔案直接轉換為markdow格式檔案,然後再轉換為txt檔案,最後將txt檔案內容和格式一同插入到docx文件中,當然,也可以直接把html檔案轉換為docx檔案,格式基本一致


這是用到的命令,而由於使用pandoc是在控制檯下cmd或者shell使用的,因此要用到python的另一個包subprocess

  1. import subprocess  
  2. subprocess.call('pandoc --latex-engine=xelatex temp.html -o temp.text', cwd='d:\\python', shell=True)  
  3. subprocess.call('pandoc --latex-engine=xelatex temp.text -o t1.text', cwd='d:\\python', shell=True)  
或者
  1. <span style="background-color: rgb(153, 153, 255);">subprocess.call('pandoc temp.html -o temp.docx', cwd='d:\\python', shell=True)</span>  
首先裡面的cwd引數設定後,會把這個命令執行環境調到cwd所設定的引數路徑處,就如同執行命令前,如同先執行了 cd d:\\python命令一樣,shell=True相當於新開了一個shell或者cmd控制檯,而關於更多例子,可以去官網的線上轉換器https://pandoc.org/try/ 或者官網的例子https://pandoc.org/demos.html

  • 還有一個問題,若使用過程中,出現開啟docx文件報錯,那麼極有可能便是初始化模板格式錯誤,因此需要替換一個新的初始化模板

好了,主要便是這些了,謝謝檢視!吐舌頭

相關推薦

python操作docx

在2017年暑假綠盟實習期間,部門做的一個專案需要用到docx格式的word文件模板操作,現在有如下記錄:      關於python操作docx格式文件,我用到了兩個python包,一個便是python-docx包,另一個便是python-docx-template;

Python操作csv

pen lose clas logs src new 打開 reader round 一、Python讀取csv文件 1 說明:以Python3.x為例 2 #讀取csv文件方法1 3 import csv 4 csvfile = open(‘csvWrite.csv‘

python操作Xml

python python操作xml模塊 xml模塊 一、簡單介紹Xml是實現不同語言或程序進行數據交換的協議,跟json差不多,但是xml遠遠先於json出現,例如在很多傳統的金融行業的很多系統接口還主要是xml格式。Xml的格式如下:<Settings modified="20

python操作配置yaml

aml 標記 導入 三種 yaml 讀取 ping 解析 配置文件 yaml 簡介: yaml:另外一種標記語言,yaml用專門寫配置語言。 yaml基本語法規則: 大小寫敏感 使用縮進表示層級關系 縮進時不允許使用Tab健,只允許使用空格 #表示註釋,從這個字符一直到行

只需一行程式碼,python實現docx轉html頁面!

說到word文件轉html的,網上一搜一大把,各種線上word轉html頁面,使用起來也方便。但是在實際專案中要使用的話,需要自己開發,這裡就提供一個簡單的方法。 學習Python中有不明白推薦加入交流群            

python操作word

python有一個庫可以操作word文件,連結如下 python-docx 可以用python新建一個word文件, from docx import Document from docx.shared import Inches document = Document() do

python操作ftp

filename tor import files delet bfile finish ftp p2c from ftplib import FTP ftp = FTP(‘ftp.abc.com‘) ftp.login(user=‘username‘, passwd=

python 操作Word

我當時做的專案中有這個需求但是在網上都很難找到很全的資料,都是斷斷續續的,慢慢的我發現其實這就是對API的操作,python也是匯入了其相應的包而已 下面我附上我的例子原始碼:如果這個還不能滿足的你要求那麼可以去msdn上找自己需要的word api拿過來就可以用的。 #-

python獲取docx的內容(文字)

首先下載第三方庫python-docx: pip install python-docx(在py檔案裡面匯入的時候是import docx) 簡單的說,docx裡面的每一個段落都是一個paragraph物件,段落中文字如果有不同的樣式(加粗,斜體)就會有不同的

python 操作Excel

文件的 workbook ray 方法 方式 sta xlwt ase for 1 安裝xlrd、xlwt、xlutils cmd下輸入: pip install xlrd #讀取excel pip install xlwt #

python-docx操作word(*.docx

tin comment turn spl end nta document .sh font 目錄 基礎操作 對象關系 添加樣式 中文字體微軟雅黑,西文字體Times Ne

Python之路-操作(py)

句柄 接口 編碼 操作 strong span 操作系統 使用 color 文件操作的基本步驟:   1.打開文件:f=open(‘filename‘),with open(‘filename‘) as f   2.操作文件:增,刪,改,查   3.關閉文件:f.close

Python基礎之操作流與函數

默認 true 格式 nbsp 文件 內容 print 寫入 追加 一.文件操作 打開文件的方式有: r,只讀模式(默認) w,只寫模式(不可讀;不存在則創建;存在則刪除內容;) a,追加模式(可讀; 不存在則創建;存在則只追加內容;) "+"表示可以同時讀寫某個文

Python常用的讀寫操作和字符串操作

dir info load char 編碼 lines resolve values ror 文件讀寫操作 fileUtils.py # -*- coding: utf-8 -*- import os def getFileList(dir, fileList=[]):

Python操作、目錄的操作

繼續 不存在 write 表示 結構 src true 所在 txt 一、創建 1、創建文件 open(path,‘w‘) 2、創建目錄 (1)os.mkdir(pt[, mode=0777]) 新建一個目錄pt,參數mode表示生成的目錄的權限,默認是超級權限,也就是07

Python基礎之操作

指定 名稱 讀取 內容 ont 依次 操作 print 文件 #文件的操作#創建文件fc=open("E:/新建文件夾/a.mp8","w")#參數1表示文件路徑以及名稱,參數2表示文件的操作方法fc=file("E:/新建文件夾/a.mp9","w")#打開文件fo=op

Python學習day7操作

clas txt nic type 方式 lin 文件內容 截取 字符 文本操作 # 讀取utf-8編碼數據,【轉換】成unicode(str)編碼的數據 # obj = open(‘D:\美女模特空姐護士聯系方式.txt‘,encoding=‘utf-8‘,mode=‘

python學習筆記操作(六)

python1、文件操作流程:打開文件,得到文件句柄並賦值給一個變量通過句柄對文件進行操作關閉文件如下文件:2017-03-24 11:25:06:349 - info: [debug] [AndroidBootstrap] Sending command to android: {"cmd":"shutdo

老齊python-基礎7(操作、叠代)

tab clas idt one span input 重復 sizeof des 在python3中,沒有file這個內建類型了(python2中,file是默認類型) 1、讀文件 創建文件,130.txt 並在裏面輸入 learn python htt

python中對操作

python打開文件方式流程:打開-----編輯------關閉 大象如何放入冰箱,不要管多大,怎麽放,有可能冰箱很大,大象很小,直接打開冰箱,放入冰箱,關閉冰箱,哈哈,程序中方式如下:以後用f操作文件即可。關閉文件:a在python裏代表追加,相當於linux裏的>>rb wb ab代表都是