python從入門到精通(二十六):python文件操作之Word全攻略(基于python-docx)

python文件操作之word技巧大全

  • word技巧基礎到高級操作大全
    • A.準備工作
      • 1. 安裝python-docx庫
      • 2. 導入庫
    • B.基礎操作
      • 1. 創建Word文檔
        • 1.1 創建文檔對象
        • 1.2 添加word標題
        • 1.3 添加word段落
        • 1.4 設置段落樣式
        • 1.5 創建有序列表
        • 1.6 創建無序列表
        • 1.7添加word分頁
        • 1.8 添加word圖片
        • 1.9 添加word表格
        • 1.10 word表格處理
        • 1.11 添加超鏈接
        • 1.12 保存word文檔
      • 2.打開現有word文檔
        • 2.1 讀取段落內容
        • 2.2 修改段落內容
        • 2.3 讀取表格內容
        • 2.4 讀取表格的值
        • 2.5 寫入數據到表格
        • 2.6 插入圖表
    • C.內容修改與基礎樣式
      • 1. 文本格式設置
      • 2. 段落格式設置
      • 3.修改圖片尺寸
    • D.插入操作
      • 1. 插入頁眉和頁腳
      • 2. 插入目錄
      • 3. 插入腳注和尾注
    • E.高級復雜操作
      • 遍歷所有段落替換文本
      • 清空指定段落
      • 遍歷所有表格替換文本
      • 刪除第一個表格
    • F. 典型案例分享
      • 1.批量處理文檔替換文檔內容
      • 2.提取表格中的數據替換到word
      • 3.提取word中的數據替換到表格

word技巧基礎到高級操作大全

在本教程中,我們將學習如何使用Python對Word文檔進行操作,包括添加、修改、格式化等內容。我們將使用python-docx庫來完成這些操作。以下是本教程的內容概覽:

A.準備工作

1. 安裝python-docx庫

首先,確保你的Python環境已經安裝了python-docx庫。如果沒有安裝,可以通過以下命令進行安裝:

pip install python-docx

2. 導入庫

在Python腳本中,首先導入docx庫:

from docx import Document

B.基礎操作

1. 創建Word文檔

學習前請先熟記一下字段代表含義

在這里插入圖片描述

1.1 創建文檔對象

創建一個新的Word文檔:

doc = Document()
1.2 添加word標題
# 添加標題(級別0-4)
doc.add_heading('主標題', level=0)  
doc.add_heading('二級標題', level=2)  # [[3, 6]]
1.3 添加word段落
paragraph = doc.add_paragraph('這是一個普通段落')
run = paragraph.add_run('追加文本今天學習python處理word')  # 支持分段式樣式 [[4, 19]]
paragraph.add_run('Bold text').bold = True   #添加一個含有粗體文本的段落
paragraph.add_run(' and italic text.').italic = True  #添加一個含有斜體文本的段落
1.4 設置段落樣式
# 設置段落樣式
para.style = 'BodyText'# 添加另一個段落并添加編號
numbered_para = doc.add_paragraph('這是編號段落。', style='ListNumber')
1.5 創建有序列表
for i in range(1, 4):doc.add_paragraph(f'列表項 {i}', style='ListNumber')
1.6 創建無序列表
for i in range(1, 4):doc.add_paragraph(f'列表項 {i}', style='ListBullet')
1.7添加word分頁
doc.add_page_break()
1.8 添加word圖片
doc.add_picture('image.png', width=docx.shared.Inches(4.0))
1.9 添加word表格
table = doc.add_table(rows=2, cols=2)
cell = table.cell(0, 0)
cell.text = '第一行第一列'
cell = table.cell(0, 1)
cell.text = '第一行第二列'
1.10 word表格處理
# 創建3行4列表格
table = doc.add_table(rows=3, cols=4, style='Light Shading Accent 1')# 填充數據
for i in range(3):   row = table.rows[i]for j in range(4):row.cells[j].text = f"第{i+1}{j+1}列"# 合并單元格
table.cell(0, 0).merge(table.cell(0, 3))  # 合并第一行 [[3, 12]]
# 刪除單元格
table._tbl.remove(cell._tc)
# 賦值單元格
cell = table.cell(0, 0)
cell.text = 'Hello'
1.11 添加超鏈接
hyperlink = doc.add_paragraph('點擊這里訪問')
add_hyperlink(hyperlink, 'http://www.example.com', '訪問網站')
1.12 保存word文檔
doc.save('python_word_tutorial.docx')

2.打開現有word文檔

doc = Document('existing.docx') 
2.1 讀取段落內容
for paragraph in doc.paragraphs:   #doc.paragraphs 獲取word中所有的段落 返回一個列表print(paragraph.text)for paragraph in doc.paragraphs:for run in paragraph.runs  # run段落中的最小標簽  print(run.text)
2.2 修改段落內容
paragraph = doc.paragraphs[0]
paragraph.text = '這是修改后的段落。'
2.3 讀取表格內容
for table in doc.tables:for row in table.rows:for cell in row.cells:print(cell.text)# 遍歷文檔中的所有表格
for table in doc.tables:  # doc.tables獲取word中所有表格 # 遍歷表格的每一行for row in table.rows:# 存儲當前行的單元格內容row_data = []# 遍歷行中的每個單元格for cell in row.cells:# 獲取單元格的文本內容并添加到列表中row_data.append(cell.text)# 打印當前行的內容print(row_data)
2.4 讀取表格的值
table_data = []
for row in doc.tables[0].rows:for cell in row.cells:table_data.append(cell.text)print(table_data)
2.5 寫入數據到表格
doc.tables[0].cell(0, 0).text = "New Value"
doc.save("example.docx")
2.6 插入圖表
from docx.shared import Incheschart = doc.add_chart({"type": "column"})
chart.add_series({"name": "Series 1", "categories": ["Sheet1", 1, 1], "values": ["Sheet1", 1, 2]})
doc.add_chart(chart, "A1")
doc.save("example.docx")

C.內容修改與基礎樣式

1. 文本格式設置

run = paragraph.runs[0]
run.font.name = '微軟雅黑'    # 字體
run.font.size = Pt(14)       # 字號
run.bold = True              # 加粗
run.italic = False           # 斜體
run.underline = True         # 下劃線
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)  # 紅色 [[11, 13, 19]]

2. 段落格式設置

from docx.shared import Inchespara_format = paragraph.paragraph_format
para_format.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中對齊
para_format.left_indent = Inches(0.5)              # 左縮進
para_format.line_spacing = 1.5                     # 1.5倍行距
para_format.space_before = Pt(12)                  # 段前間距 [[6, 12]]

3.修改圖片尺寸

for rel in doc.part.rels.values():if "image" in rel.reltype:target = rel.targettarget.width = docx.shared.Inches(2.0)target.height = docx.shared.Inches(2.0)

D.插入操作

1. 插入頁眉和頁腳

section = doc.sections[0]
header = section.header
footer = section.footer
header.paragraphs[0].text = '這是頁眉內容'
footer.paragraphs[0].text = '這是頁腳內容'

2. 插入目錄

doc.add_heading('目錄', level=1)
doc.add_paragraph('請在此處插入目錄(手動或使用Word的目錄功能)')

3. 插入腳注和尾注

paragraph = doc.add_paragraph('這是一個包含腳注的段落。')
footnote = paragraph.add_footnote('這是腳注內容。')

E.高級復雜操作

遍歷所有段落替換文本

for para in doc.paragraphs:if '占位符' in para.text:para.text = '實際內容'  # 直接替換文本para.runs[0].bold = True  # 設置粗體

清空指定段落

for para in doc.paragraphs:if '需要刪除的內容' in para.text:para.clear()

遍歷所有表格替換文本

# 遍歷所有表格
for table in doc.tables:for row in table.rows:for cell in row.cells:if cell.text == "舊數據":cell.text = "新數據"

刪除第一個表格

if len(doc.tables) > 0:tbl = doc.tables[0]tbl._element.getparent().remove(tbl._element)

F. 典型案例分享

1.批量處理文檔替換文檔內容

import docx# 讀取Word文檔
doc = docx.Document("example.docx")# 批量替換文本
for para in doc.paragraphs:if "keyword" in para.text:para.text = para.text.replace("keyword", "new_value")# 保存修改后的文檔
doc.save("updated_example.docx")

2.提取表格中的數據替換到word

excel數據模版:

在這里插入圖片描述
word文本模版:
在這里插入圖片描述
效果模版:
在這里插入圖片描述

from docx import Document
import pandas as pd
import osdf = pd.read_excel(r"C:\Users\liyang\Desktop\2.xlsx")
for i in range(len(df)):doc = Document(r'C:\Users\liyang\Desktop\2.docx')for j in df.columns:# print(df.loc[i,j])for pargs in doc.paragraphs:for run in pargs.runs:# print(run.text)run_text = run.text.replace(j,str(df.loc[i,j]))run.text = run_textfor table in doc.tables:for row in table.rows:for cell in row.cells:cell_text = cell.text.replace(j,str(df.loc[i,j]))cell.text = cell_textdoc.save("%d%s績效合同.docx" % (df.loc[i,'員工ID'],df.loc[i,'員工姓名']))

優化版

from docx import Document
import pandas as pd
import osdf = pd.read_excel(r"C:\Users\liyang\Desktop\2.xlsx")
for i in range(len(df)):doc = Document(r'C:\Users\liyang\Desktop\2.docx')# 遍歷所有數據列for j in df.columns:# 獲取當前單元格的值cell_value = str(df.loc[i,j])# 段落替換邏輯(新增占位符格式)for para in doc.paragraphs:for run in para.runs:# 構造標準占位符{{字段名}}placeholder = f'{{{{{j}}}}}'# 執行帶格式的替換run.text = run.text.replace(placeholder, cell_value)# 表格替換邏輯(新增占位符格式)for table in doc.tables:for row in table.rows:for cell in row.cells:# 構造標準占位符{{字段名}}placeholder = f'{{{{{j}}}}}'# 執行替換cell.text = cell.text.replace(placeholder, cell_value)# 保存文檔(保持原文件名格式)doc.save("%d%s績效合同.docx" % (df.loc[i,'員工ID'],df.loc[i,'員工姓名']))

3.提取word中的數據替換到表格

word數據模版:
在這里插入圖片描述
提取到表格數據:
在這里插入圖片描述

# 使用Python自動化處理(適合批量操作)
import pandas as pd
from docx import Documentdoc = Document('數據.docx')
data = []
for para in doc.paragraphs:if ':' in para.text:items = dict(item.split(': ') for item in para.text.split(' | '))data.append(items)pd.DataFrame(data).to_excel('output.xlsx', index=False)

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

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

相關文章

Debian二次開發一體化工作站:提升科研效率的智能工具

在科研領域,數據處理是實驗成功的關鍵環節之一。隨著實驗數據的復雜性和規模不斷增加,傳統的數據處理方法已經難以滿足科研人員的需求。這時,一體化工作站應運而生,成為科研實驗數據處理的 “智能大腦”。 一體化工作站&#xff…

linux學習(五)(服務器審查,正常運行時間負載,身份驗證日志,正在運行的服務,評估可用內存)

服務器審查 在 Linux 中審查服務器的過程包括評估服務器的性能、安全性和配置,以確定需要改進的領域或任何潛在問題。審查的范圍可以包括檢查安全增強功能、檢查日志文件、審查用戶帳戶、分析服務器的網絡配置以及檢查其軟件版本。 Linux 以其穩定性和安全性而聞名…

Redis- 大key

大key 什么是大key問題大key的危害大key的識別方法大key問題的解決方案數據結構優化與拆分壓縮與序列化優化預防與監控機制 什么是大key問題 大Key問題是指在Redis等內存數據庫中,某個Key對應的value數據結構過大,通常是指單個Key的大小超過10KB甚至達到…

C語言_數據結構總結6:鏈式棧

純c語言代碼&#xff0c;不涉及C 順序棧的實現&#xff0c;歡迎查看這篇文章&#xff1a;C語言_數據結構總結5&#xff1a;順序棧-CSDN博客 0. 結構單元 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType…

新品速遞 | 多通道可編程衰減器+矩陣系統,如何破解復雜通信測試難題?

在無線通信技術快速迭代的今天&#xff0c;多通道可編程數字射頻衰減器和衰減矩陣已成為測試領域不可或缺的核心工具。它們憑借高精度、靈活配置和強大的多通道協同能力&#xff0c;為5G、物聯網、衛星通信等前沿技術的研發與驗證提供了關鍵支持。從基站性能測試到終端設備校準…

AI自動化應用的影響

生產力的迭代也終將伴隨著一代人的落幕。 2025年是AI應用爆發的開局之年&#xff0c;預計3-5年現有生產關系將出現顛覆性改革。 AI自動化對經濟和就業的影響是一個復雜且多維的問題&#xff0c;其長期影響取決于技術進步、政策調控、社會適應能力等多重因素的綜合作用。以下從技…

潤開鴻重磅首發基于“RISC-V+OpenHarmony+星閃”的“鴻銳”AI開發平臺

潤開鴻重磅首發基于“RISC-VOpenHarmony星閃”的“鴻銳”AI開發平臺 2月28日&#xff0c;2025中國RISC-V生態大會在北京中關村國際創新中心隆重召開。作為領先的鴻蒙生態專業技術公司和終端操作系統發行版提供商&#xff0c;以及不斷推進基于RISC-V與OpenHarmony全棧開源生態構…

Java 深度復制對象:從基礎到實戰

目錄 一、深度復制的概念二、實現深度復制的方法1. 使用序列化2. 手動實現深度復制 三、總結 在 Java 編程中&#xff0c;對象的復制是一個常見的需求。然而&#xff0c;簡單的復制操作&#xff08;如直接賦值&#xff09;只會復制對象的引用&#xff0c;而不是創建一個新的對象…

C++ Primer 交換操作

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解碼視頻(原理篇和實站篇)

解碼流程如下圖 流程&#xff1a;首先&#xff0c;通過 avcodec_alloc_context3(nullptr) 分配一個 AVCodecContext 結構體&#xff0c;然后使用 avcodec_parameters_to_context 將參數復制到上下文中&#xff0c;接著通過 avcodec_find_decoder 查找指定的解碼器&#xff0c;并…

2025 docker安裝TiDB數據庫

1.確保安裝了docker和docker-compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod x /usr/local/bin/docker-compose2.編寫 Docker Compose 文…

定制化開發的WooCommerce獨立站商城更安全

定制化開發的WooCommerce獨立站商城在安全性、交易風險控制以及整體用戶體驗方面有顯著優勢。以下是定制化開發在這些方面的具體表現&#xff1a; 1. 安全性更高 定制化開發允許開發者從底層架構開始設計和優化&#xff0c;確保網站的安全性。以下是具體表現&#xff1a; (1…

CSS【實戰】模擬 html 的 title 屬性(鼠標懸浮顯示提示文字)

效果 原理 提示內容的定位&#xff1a;子絕父相鼠標懸浮前&#xff0c;提示內容visibility: hidden;通過 :hover 觸發鼠標懸浮樣式&#xff0c;提示內容變為 visibility: visible; 代碼 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

K8s控制器Deployment詳解

回顧 ReplicaSet 控制器,該控制器是用來維護集群中運行的 Pod 數量的&#xff0c;但是往往在實際操作的時候&#xff0c;我們反而不會去直接使用 RS&#xff0c;而是會使用更上層的控制器&#xff0c;比如說 Deployment。 Deployment 一個非常重要的功能就是實現了 Pod 的滾動…

【MYSQL數據庫異常處理】執行SQL語句報超時異常

MYSQL執行SQL語句異常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 這個錯誤表明 MySQL 服務器與 JDBC 連接之間的通信超時了。通常由…

HJ C++11 Day2

Initializer Lists 對于一個類P class P{P(int a, int b){cout << "P(int, int), a" << a << ", b " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), val…

樹莓派5首次開機保姆級教程(無顯示器通過VNC連接樹莓派桌面)

第一次開機詳細步驟 步驟一&#xff1a;樹莓派系統燒錄1 搜索打開燒錄軟件“Raspberry Pi Imager”2 選擇合適的設備、系統、SD卡3 燒錄配置選項 步驟二&#xff1a;SSH遠程樹莓派1 樹莓派插電2 網絡連接&#xff08;有線或無線&#xff09;3 確定樹莓派IP地址 步驟三&#xff…

裝飾器模式--RequestWrapper、請求流request無法被重復讀取

目錄 前言一、場景二、原因分析三、解決四、更多 前言 曾經遇見這么一段代碼&#xff0c;能看出來是把request又重新包裝了一下&#xff0c;核心信息都不會改變 后面了解到這叫 裝飾器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也稱為包裝模式(Wrapper Pat…

大語言模型進化論:從達爾文到AI的啟示與展望

文章大綱 引言大語言模型中的“進化論”思想體現遺傳變異過度繁殖和生存斗爭大模型“過度繁殖”與“生存競爭”機制解析**一、過度繁殖:技術迭代的指數級爆發****二、生存競爭:計算資源的達爾文戰場****三、生存競爭勝出關鍵要素****四、行業競爭格局演化趨勢**核心結論自然選…

監聽 RabbitMQ 延時交換機的消息數、OpenFeign 路徑參數傳入斜杠無法正確轉義

背景 【MQ】一套為海量消息和高并發熱點消息&#xff0c;提供高可用精準延時服務的解決方案 我現在有一個需求&#xff0c;就是監聽 RabbitMQ 一個延時交換機的消息數&#xff0c;而 RabbitTemplate 是不存在對應的方法來獲取的。 而我們在 RabbitMQ 的控制臺卻可以發現延時交…