關於python操做docx格式文檔,我用到了兩個python包,一個即是python-docx包,另外一個即是python-docx-template;,同時我也用到了很出名的一個工具"pandoc,下面我會對他們各自進行介紹。html
- 首先即是python-docx包,這是一個很強大的包,能夠用來建立docx文檔,包含段落、分頁符、表格、圖片、標題、樣式等幾乎全部的word文檔中能經常使用的功能都包含了,這個包的主要功能即是用來建立文檔,相對來講用來修改功能不是很強大,關於文檔請查看他的"官網;
- 再而後即是python-docx-template這個包了,他能夠用來對docx文檔進行修改,諸如對文檔中的 文本、圖片、富文本、等幾乎全部存在與文檔中的他都能替換,並且他操做起來就如同不少web框架中的模板語言同樣,由於他是和jinjia2模板語言結合使用的,因此最好但願使用以前對模板語言有必定了解;
- 關於pandoc,這個包在許多須要進行文本轉換的地方用處很強大,他能夠把許多現在存在的文檔格式轉換問另外一種文檔格式,如html、markdown、docbook、latex、docx等轉換爲xml、latex、markdown、pdf,總之很強大,這是官網,有興趣的能夠去了解下。
下面便會相應介紹他們各自的大概的用法。仍是按照上面的順序進行介紹,
:python
-
關於python-docx這個包我以爲最好仍是引用他官網的一段代碼解釋最爲合適了,由於這裏面基本狀況都被包含了,
- from docx import Document
- from docx.shared import Inches
-
- document = Document()
-
- document.add_heading('Document Title', 0)
-
- p = document.add_paragraph('A plain paragraph having some ')
- p.add_run('bold').bold = True
- p.add_run(' and some ')
- p.add_run('italic.').italic = True
-
- document.add_heading('Heading, level 1', level=1)
- document.add_paragraph('Intense quote', style='IntenseQuote')
-
- document.add_paragraph(
- 'first item in unordered list', style='ListBullet'
- )
- document.add_paragraph(
- 'first item in ordered list', style='ListNumber'
- )
-
- document.add_picture('monty-truth.png', width=Inches(1.25))
-
- table = document.add_table(rows=1, cols=3)
- hdr_cells = table.rows[0].cells
- hdr_cells[0].text = 'Qty'
- hdr_cells[1].text = 'Id'
- hdr_cells[2].text = 'Desc'
- for item in recordset:
- row_cells = table.add_row().cells
- row_cells[0].text = str(item.qty)
- row_cells[1].text = str(item.id)
- row_cells[2].text = item.desc
-
- document.add_page_break()
-
- document.save('demo.docx')
具體樣式請看:git
關於更多細節但願你們仍是去他的官網python-docx;看,介紹的仍是很詳細github
-
而後即是python-docx-template包了,他用起來就向python中的模板語言同樣,有上下文,有模板,而後進行變量的替換
關於python-docx-template,他的官網名稱即是「像jinjia2同樣來操做docx文檔」,所以這個包對於用來進行文檔修改時很強大的下面是一個簡單例子:web
- from docxtpl import DocxTemplate
-
- doc = DocxTemplate("1.docx")
- context = { 'company_name' : "World company" }
- doc.render(context)
- doc.save("generated_doc.docx")
-
- 固然,這個包的功能遠遠不止上面例子中的一些,能夠包含圖片
-
- myimage = InlineImage(doc,'test_files/python_logo.png',width=Mm(20))
-
- 也能夠包含另外一個docx文檔,
- sub = doc.new_subdoc()
- sub.subdocx = Document('d:\\2.docx')
- doc.render({'sub': sub})
這裏操做以後即可以把2.docx文件裏面的內容直接插入到doc對象(也就是1.docx)文檔中{{sub}}這個變量處,被替換爲2.docx中的,基本上用到的都是這兩個部分,
關於更多的特性,能夠訪問官網的example,裏面涵蓋了幾乎全部的特性,地址是https://github.com/elapouya/python-docx-template/tree/master/testsshell
-
最後即是pandoc了,我在此次用到的功能主要是,用來把html文件直接轉換爲markdow格式文件,而後再轉換爲txt文件,最後將txt文件內容和格式一同插入到docx文檔中,固然,也能夠直接把html文件轉換爲docx文件,格式基本一致
這是用到的命令,而因爲使用pandoc是在控制檯下cmd或者shell使用的,所以要用到python的另外一個包subprocess設計模式
- import subprocess
- subprocess.call('pandoc --latex-engine=xelatex temp.html -o temp.text', cwd='d:\\python', shell=True)
- subprocess.call('pandoc --latex-engine=xelatex temp.text -o t1.text', cwd='d:\\python', shell=True)
或者
- <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