python操作docx文檔(轉)


python操作docx文檔


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

 

 

具體樣式請看:

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

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

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

 

[python]  view plain  copy
 
  1. from docxtpl import DocxTemplate  
  2.   
  3. doc = DocxTemplate("1.docx")  # 對要操作的docx文檔進行初始化  
  4. context = { 'company_name' : "World company" }   # company_name 是存在於1.docx文檔里面的變量,就像這樣{{company_name}},直接放在1.docx文件的明確位置就行  
  5. doc.render(context)   # 這里是有jinjia2的模板語言進行變量的替換,然后便可以在1.docx文檔里面看到{{company_name}}變成了World company  
  6. doc.save("generated_doc.docx")   # 保存  
  7.   
  8. 當然,這個包的功能遠遠不止上面例子中的一些,可以包含圖片  
  9.   
  10. myimage = InlineImage(doc,'test_files/python_logo.png',width=Mm(20)) # tpl便是上面例子中的doc對象  
  11.   
  12. 也可以包含另一個docx文檔,  
  13. sub = doc.new_subdoc()  
  14. sub.subdocx = Document('d:\\2.docx')  
  15. doc.render({'sub': sub})  
這里操作之后便可以把2.docx文件里面的內容直接插入到doc對象(也就是1.docx)文檔中{{sub}}這個變量處,被替換為2.docx中的,基本上用到的都是這兩個部分,

 

關於更多的特性,可以訪問官網的example,里面涵蓋了幾乎所有的特性,地址是https://github.com/elapouya/python-docx-template/tree/master/tests

  • 最后便是pandoc了,我在這次用到的功能主要是,用來把html文件直接轉換為markdow格式文件,然后再轉換為txt文件,最后將txt文件內容和格式一同插入到docx文檔中,當然,也可以直接把html文件轉換為docx文件,格式基本一致


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

 

[python]  view plain  copy
 
  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)  
或者
[python]  view plain  copy
 
  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM