python-docx 庫教程

Python-docx 庫介紹

官網文檔
python-docx 是一個用于創建和修改 Microsoft Word (.docx) 文件的 Python 庫。它允許你通過編程方式生成格式化的文檔,添加文本、段落、表格、圖片等元素,而無需依賴 Microsoft Word 應用程序。

主要功能
  • 創建新的 Word 文檔
  • 添加段落、標題和列表
  • 設置文本格式(字體、大小、顏色、加粗、斜體等)
  • 插入表格和處理表格數據
  • 添加圖片和圖表
  • 管理文檔樣式和布局
  • 讀取和修改現有文檔
安裝 python-docx 庫:當前版本1.1.2
pip install python-docx==1.1.2

一,基本使用示例

docx_basics.py

from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT# 創建新文檔
doc = Document()# 添加標題
doc.add_heading('Python-docx示例文檔', 0)# 添加段落
paragraph = doc.add_paragraph('這是一個使用python-docx庫創建的示例文檔。')# 添加帶有格式的文本
paragraph.add_run(' 這部分文本是粗體').bold = True
paragraph.add_run(',這部分是斜體').italic = True# 添加不同級別的標題
doc.add_heading('一級標題', level=1)
doc.add_heading('二級標題', level=2)# 添加列表
doc.add_paragraph('無序列表項', style='List Bullet')
doc.add_paragraph('有序列表項', style='List Number')# 添加表格
table = doc.add_table(rows=1, cols=3)
table.alignment = WD_TABLE_ALIGNMENT.CENTER
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'
hdr_cells[1].text = '年齡'
hdr_cells[2].text = '職業'# 添加表格數據
row_cells = table.add_row().cells
row_cells[0].text = '張三'
row_cells[1].text = '30'
row_cells[2].text = '工程師'# 添加圖片
doc.add_picture('example.png', width=Inches(4))# 保存文檔
doc.save('demo.docx')

docx_reading.py

from docx import Document# 打開現有文檔
doc = Document('existing_document.docx')# 讀取所有段落
for para in doc.paragraphs:print(para.text)# 修改段落
if len(doc.paragraphs) > 0:doc.paragraphs[0].text = '這是修改后的第一段內容'# 訪問表格
if len(doc.tables) > 0:table = doc.tables[0]for row in table.rows:for cell in row.cells:print(cell.text)# 添加新內容
doc.add_paragraph('這是添加到現有文檔的新段落')# 保存修改
doc.save('modified_document.docx')

文檔樣式和格式設置

docx_styles.py

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()# 設置段落格式
paragraph = doc.add_paragraph('這是一個居中對齊的段落,字體為12磅,顏色為藍色。')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 設置文本格式
run = paragraph.runs[0]
run.font.name = 'Arial'
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(0, 0, 255)  # 藍色
run.bold = True
run.italic = True# 創建自定義樣式
style = doc.styles.add_style('MyHeading', 1)  # 1表示標題樣式
style.font.name = '微軟雅黑'
style.font.size = Pt(16)
style.font.bold = True# 使用自定義樣式
doc.add_heading('自定義樣式標題', level=1).style = doc.styles['MyHeading']doc.save('styled_document.docx')

限制和注意事項

  • python-docx 只能處理.docx格式的文件,不能處理舊版的.doc格式
  • 對于復雜的 Word 文檔(如包含高級格式、復雜圖表或特殊效果),可能無法完全復制其格式
  • 某些 Word 功能(如腳注、尾注、復雜的頁眉頁腳)的支持有限
  • 該庫主要關注文檔內容的操作,對于文檔的布局和打印設置支持較少

二, Python-docx 庫的類結構

python-docx 庫基于 Open XML 標準構建,采用層次化的類結構來表示 Word 文檔的各個組件。主要類及其關系如下:

  • Document:代表整個 Word 文檔,是所有其他元素的容器
  • Section:文檔的節,可包含不同的頁面設置
  • Paragraph:段落,包含文本和格式信息
  • Run:文本運行,共享相同格式的文本塊
  • Table:表格,由行和單元格組成
  • TableStyle:表格樣式
  • Style:文檔樣式
  • Header/Footer:頁眉和頁腳
  • Image:圖片對象

這些類之間的關系是嵌套的:Document 包含多個 Section,每個 Section 包含多個 Paragraph 和 Table,而 Paragraph 又由一個或多個 Run 組成。

常用類和方法詳解

  1. Document 類
    創建和打開文檔:
from docx import Document# 創建新文檔
doc = Document()# 打開現有文檔
doc = Document('existing_document.docx')# 保存文檔
doc.save('new_document.docx')

添加內容:

# 添加段落
doc.add_paragraph('這是一個新段落')# 添加標題
doc.add_heading('這是一級標題', level=1)# 添加分頁符
doc.add_page_break()
  1. Paragraph 類
    段落操作:
# 獲取段落
paragraphs = doc.paragraphs  # 獲取所有段落
first_para = doc.paragraphs[0]  # 獲取第一個段落# 添加段落
paragraph = doc.add_paragraph('初始文本')# 添加文本到段落
paragraph.add_run('額外的文本')# 設置段落格式
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中對齊
paragraph.paragraph_format.line_spacing = 1.5  # 1.5倍行距
  1. Run 類
    文本格式設置:
# 創建帶有格式的文本
run = paragraph.add_run('這是粗體斜體文本')
run.bold = True
run.italic = True
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(255, 0, 0)  # 紅色
run.font.name = 'Arial'
  1. Table 類
    表格操作:
# 添加表格
table = doc.add_table(rows=3, cols=3)# 訪問單元格
cell = table.cell(0, 0)  # 第一行第一列
cell.text = '單元格內容'# 遍歷表格
for row in table.rows:for cell in row.cells:print(cell.text)# 設置表格樣式
table.style = 'Table Grid'
  1. 樣式操作
    應用和創建樣式:
# 應用現有樣式
paragraph.style = doc.styles['Heading 1']# 創建自定義樣式
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPEstyle = doc.styles.add_style('MyStyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.name = 'Arial'
style.font.size = Pt(12)
style.font.bold = True
  1. 圖片和媒體
    插入圖片:
from docx.shared import Inches# 添加圖片
doc.add_picture('image.jpg', width=Inches(4))
  1. 頁眉和頁腳
    頁眉頁腳操作:
# 獲取第一個節的頁眉
header = doc.sections[0].header# 添加內容到頁眉
header.paragraphs[0].text = '這是頁眉'# 獲取頁腳
footer = doc.sections[0].footer
footer.paragraphs[0].text = '這是頁腳'

示例:創建復雜文檔,包含多種元素文檔的完整示例

complex_document.py

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE# 創建文檔
doc = Document()# 添加標題
title = doc.add_heading('示例文檔', level=0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加段落
doc.add_paragraph('這是一個使用python-docx創建的示例文檔。')# 添加帶格式的段落
paragraph = doc.add_paragraph('這是一個包含 ')
paragraph.add_run('粗體').bold = True
paragraph.add_run(' 和 ')
paragraph.add_run('斜體').italic = True
paragraph.add_run(' 文本的段落。')# 添加圖片
doc.add_picture('sample.jpg', width=Inches(4))# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'# 設置表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '項目'
hdr_cells[1].text = '描述'
hdr_cells[2].text = '價格'# 添加數據行
data = [('產品A', '這是產品A的描述', '$100'),('產品B', '這是產品B的描述', '$200'),('產品C', '這是產品C的描述', '$300')
]for item, desc, price in data:row_cells = table.add_row().cellsrow_cells[0].text = itemrow_cells[1].text = descrow_cells[2].text = price# 添加分頁符
doc.add_page_break()# 添加列表
doc.add_paragraph('項目列表:', style='List Bullet')
doc.add_paragraph('項目1', style='List Bullet 2')
doc.add_paragraph('項目2', style='List Bullet 2')# 添加自定義樣式
style = doc.styles.add_style('MyQuote', WD_STYLE_TYPE.PARAGRAPH)
style.base_style = doc.styles['Quote']
style.font.size = Pt(11)
style.font.italic = True# 使用自定義樣式
doc.add_paragraph('這是一個引用段落', style='MyQuote')# 保存文檔
doc.save('complex_document.docx')

注意事項

  • python-docx 的 API 設計遵循 Word 文檔的邏輯結構,但某些高級功能可能需要更復雜的操作
  • 文檔格式(如樣式、對齊方式)通常應用于段落或運行對象,而非單個字符
  • 對于復雜的文檔操作,可能需要結合使用多個類和方法
  • 建議在開發過程中參考官方文檔以獲取最新的 API 信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ansible小試牛刀

注意事項 除了安裝的zabbix相關組件 使用此腳本安裝的所有軟件版本均為系統默認版本 安裝軟件 zabbix相關組件,包括server,agent等 MySQL Redis NGINX openjdk maven nodejs keepalived iptables ipvsadm 使用劇本 --- - hosts: allname…

MCP使用

什么是MCP Model Context Protocol (MCP) 是由 Anthropic 公司于 2024 年 11 月推出的一種開放協議標準,目的在于標準化LLM 與外部數據源、工具及服務之間的交互方式。MCP 被廣泛類比為“AI 領域的 USB-C 接口” MCP與Function Calling的區別 MCP 的核心概念 1.…

邊緣計算一:現代前端架構演進圖譜 —— 從 SPA 到邊緣渲染

過去十年,前端項目架構經歷了從簡單 HTML 文件到復雜框架的飛躍,但很多開發者忽略了**“渲染位置”與“資源交付方式”**對體驗與性能的根本性影響。 從最初的瀏覽器渲染,到現在“在離用戶最近的地方動態返回 HTML”,架構正在悄悄…

linux學習記錄(六)三個常用命令介紹

1.vim命令 Vim是由Vi發展過來的文本編譯器,其代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。 1.1 語法 vim filename 1.2 vi/vim的使用 vi/vim 共分為三種模式,命令模式(Command Mode)、…

用Python獲取京東關鍵字接口的用戶指南

在電商數據分析和市場研究中,獲取京東平臺的關鍵字搜索結果數據具有重要意義。本文將詳細介紹如何使用Python調用京東開放平臺的API接口,獲取關鍵字相關的商品數據,并進行解析和處理。 一、準備工作 (一)注冊京東開發…

觀測云,全球領先的監控觀測平臺亮相亞馬遜云科技中國峰會!

觀測云每年都不會缺席亞馬遜云科技峰會 忙完一整季的產品發布,我們終于將目光投向這場全球頂尖的云技術盛會——2025亞馬遜云科技中國峰會。如果你也在這個領域,應該已經感覺到了:這不只是一場大會,而是一個信號。AI、可觀測性、…

消息隊列處理模式:流式與批處理的藝術

🌊 消息隊列處理模式:流式與批處理的藝術 📌 深入解析現代分布式系統中的數據處理范式 一、流式處理:實時數據的"活水" 在大數據時代,流式處理已成為實時分析的核心技術。它將數據視為無限的流,…

一起學習swin-transformer(一)

Transform學習鏈接 從零開始設計Transformer模型(1/2)——剝離RNN,保留Attention-CSDN博客 Transformer-PyTorch實戰項目——文本分類_transformer文本分類 pytorch-CSDN博客 從零開始設計Transformer模型(2/2)——…

PyQt常用控件的使用:QFileDialog、QMessageBox、QTreeWidget、QRadioButton等

文章目錄 一、控件常用函數介紹二、QFileDialog(文件類操作)三、QMessageBox(對話框)四、QTreeWidget(樹結構類操作)4.1 樹結構的初始化4.2 遞歸讀取完整樹結構4.3 兩QTreeWidget滑輪同步滑動4.4 信號槽綁定 五、QCombox改寫下拉多…

校園導航系統核心技術解析:高精度定位與 AR 實景導航的應用實踐

本文面向校園信息化建設者、技術開發者及教育行業數字化轉型關注者,旨在解析如何通過 “高精度定位 AR/VR 場景化服務” 技術體系,破解校區因建筑復雜、人流密集導致的尋路效率低下問題,探討如何利用現有技術解決校園內導航難題,…

java大文件分段下載

后端代碼 package com.jy.jy.controller;import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.a…

antd-vue - - - - - a-table排序

antd-vue - - - - - a-table排序 1. 重點代碼:2. 代碼示例:3. 進階版寫法 1. 重點代碼: sorter: {compare: (a, b) > a.columnsKeys - b.columnsKeys,multiple: 1, },解析: compare: 自定義排序函數,用于比較兩個對象。 multiple: 排序優…

【AI】模型vs算法(以自動駕駛為例)

模型vs算法(以自動駕駛為例) 一、自動駕駛的核心任務二、以自動駕駛為例,模型vs算法的實際分工1. 感知環節:“看懂”周圍環境(如識別行人、車道線、車輛)2. 預測環節:“預判”其他交通參與者的行…

機器學習與深度學習19-線性代數02

目錄 前文回顧6.協方差矩陣與主成分分析7.矩陣的奇異值分解8.神經網絡的前向傳播和反向傳播9.矩陣的跡10.特征工程的多項式特征擴展 前文回顧 上一篇文章鏈接:地址 6.協方差矩陣與主成分分析 協方差矩陣是一個對稱矩陣,用于衡量隨機變量之間的線性相關…

青藏高原ASTER_GDEM數據集(2011)

共享方式:開放獲取數據大小:73.69 GB數據時間范圍:2012-04-08 — 2012-05-08元數據更新時間:2021-10-15 數據集摘要 ASTER Global Digital Elevation Model (ASTER GDEM)是美國航空航天局 (NAS…

代碼隨想錄訓練營二十六天| 654.最大二叉樹 617.合并二叉樹 700.二叉搜索樹的搜索 98.驗證二叉搜索樹

654.最大二叉樹: 文檔講解:代碼隨想錄|654.最大二叉樹 視頻講解:又是構造二叉樹,又有很多坑!| LeetCode:654.最大二叉樹_嗶哩嗶哩_bilibili 狀態:已做出 思路: 這道題目要求使用給定…

臨時抱佛腳v2

術語解釋 多范式 (Multi-paradigm) 指支持多種編程范式,如面向對象編程和函數式編程,允許開發者根據需求選擇最合適的風格。 函數式編程 (Functional Programming) 一種編程范式,將計算視為數學函數的求值,強調不變性、無副作用…

MCGS和1200plc變量表格式編輯

設備編輯窗口---設備信息導出---另存為xx.CSV文件 在上面導出的表格基礎上編輯 本體位的編輯: db數據塊位編輯 db數據塊int類型 (4.14應改為4.140,0不省略) db數據塊real類型 通道號,地址均按順序排列 ,寄存期地址最后一位0不能省略&#…

Android高性能音頻與圖形開發:OpenSL ES與OpenGL ES最佳實踐

引言 在移動應用開發中,音頻和圖形處理是提升用戶體驗的關鍵要素。本文將深入探討Android平臺上兩大核心多媒體API:OpenSL ES(音頻)和OpenGL ES(圖形),提供經過生產環境驗證的優化實現方案。 …

GaussDB分布式數據庫調優方法總結:從架構到實踐的全鏈路優化指南

GaussDB分布式數據庫調優方法總結:從架構到實踐的全鏈路優化指南 GaussDB作為華為自主研發的分布式數據庫,基于MPP(大規模并行處理)架構設計,支持存儲與計算分離、列存/行存混合引擎、向量化執行等核心技術&#xff0…