最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用python-docx庫操作word(創(chuàng)建、讀取和插入)文檔的完整指南

 更新時間:2025年12月18日 09:40:13   作者:睿思達DBA_WGX  
python-docx是一個可以操作Word文檔的python開源庫,簡單易用,適合用來自動化辦公,下面小編就和大家詳細介紹一下如何使用python-docx實現(xiàn)創(chuàng)建,打開,讀取和插入Word吧

python-docx是一個可以操作Word文檔的python開源庫,簡單易用,適合用來自動化辦公。

一、安裝 python-docx 庫

可以使用pip命令安裝python-docx 庫。在 windows 命令行窗口執(zhí)行如下命令:

pip install python-docx

C:\Users\wgx58>pip install python-docx
Collecting python-docx
  Using cached python_docx-1.2.0-py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: lxml>=3.1.0 in c:\python\lib\site-packages (from python-docx) (6.0.2)
Requirement already satisfied: typing_extensions>=4.9.0 in c:\python\lib\site-packages (from python-docx) (4.15.0)
Using cached python_docx-1.2.0-py3-none-any.whl (252 kB)
Installing collected packages: python-docx
Successfully installed python-docx-1.2.0

二、新建與打開word文檔

python-docx中,一個Word文檔用一個Document對象來表示,所以我們要新建一個Word文檔,只需要實例化一個Document對象即可。

程序代碼如下:

from docx import Document

doc = Document()
doc.save('D:/0工作文檔/word文檔/mydoc.docx')

要打開一個已存在的Word文檔,只需要在實例化的時候傳入該文檔的路徑即可。

程序代碼如下:

from docx import Document
doc = Document('D:/0工作文檔/word文檔/mydoc.docx')
doc.save('D:/0工作文檔/word文檔/mydoc1.docx')

三、保存word文檔

要保存word文檔可以調(diào)用Document對象的save()方法,傳入要保存的路徑即可。

說明:如果該路徑已存在同名文件,會直接被覆蓋掉,并不會給出任何提示。

程序代碼如下:

from docx import Document
doc = Document('D:/0工作文檔/word文檔/mydoc.docx')
doc.save('D:/0工作文檔/word文檔/mydoc1.docx')

四、在word文檔中插入各種內(nèi)容

相關概念

1、Document對象

Document對象表示整個文檔。

2、paragraph對象

每一個段落代表一個paragraph對象。

3、run對象

一個run對象指的是paragraph對象中相同樣式的連續(xù)文字。

4、table對象

table對象指的是一個單獨的表格。一個表包含行(row)、列(column)和單元格(cell)。

以上各類對象之間的關系如下圖所示:

添加標題

本節(jié)用到的函數(shù)及屬性如下表所示:

函數(shù)/屬性用法
docx.Document()創(chuàng)建word文檔
doc.add_heading(content,level)添加標題
doc.save(path)保存word文檔

例如:

from docx import Document
 
def create_word():    
    doc1 = Document()   # 創(chuàng)建word文檔    
    doc1.add_heading('歡迎使用Python創(chuàng)建Word',0)  # 增加0級標題
    doc1.add_heading('Python操作 增加1級標題',1)  # 增加1級標題
    doc1.add_heading('Python操作 增加2級標題',2)  # 增加2級標題    
    doc1.save(r'D:\0工作文檔\word文檔\test.docx')  # 保存文檔 
if __name__ == '__main__':
    create_word()

程序的運行結果如下圖所示:

插入段落

本節(jié)用到的函數(shù)及屬性如下表所示:

函數(shù)/屬性用法
doc.add.paragraph(content,style)添加段落
paragraph.add_run(content)添加塊

例如:

from docx import Document
from docx.enum.style import WD_BUILTIN_STYLE
 
def create_word():
    doc1 = Document()    # 創(chuàng)建一個word文檔
    doc1.add_paragraph('七律·長征','heading 1')    # 增加段落信息,使用【標題1】樣式
    par1=doc1.add_paragraph('作者:毛澤東\n')
    par1.add_run('紅軍不怕遠征難,萬水千山只等閑。\n')    
    par1.add_run('五嶺逶迤騰細浪,烏蒙磅礴走泥丸。\n')   
    par1.add_run('金沙水拍云崖暖,大渡橋橫鐵索寒。\n')   
    par1.add_run('更喜岷山千里雪,三軍過后盡開顏。\n')   
    doc1.add_paragraph('譯文','heading 2')
    doc1.add_paragraph('紅軍不怕萬里長征路上的一切艱難困苦,把千山萬水都看得極為平常。\n五嶺山脈綿延不絕,可在紅軍眼里不過像翻騰著的細小波浪;烏蒙山高大雄偉,在紅軍眼里也不過像在腳下滾過的泥丸。\n金沙江濁浪滔天,湍急的流水拍擊著高聳的山崖,濺起陣陣霧水,像是冒出蒸汽一樣。大渡河險橋橫架,晃動著凌空高懸的根根鐵索,寒意陣陣。\n更加令人欣喜的是千里岷山,皚皚白雪,紅軍翻越過去以后人人心情開朗,個個笑逐顏開。')
    
    # 增加無序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南科技學院',style='List Bullet')
    doc1.add_paragraph('河南醫(yī)藥大學',style='List Bullet')
    doc1.add_paragraph('河南師范大學',style='List Bullet')
    doc1.add_paragraph('河南工學院',style='List Bullet')
    doc1.add_paragraph('新鄉(xiāng)學院',style='List Bullet')
    # 增加有序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南師范大學',style='List Number')
    doc1.add_paragraph('河南醫(yī)藥大學',style='List Number')
    doc1.add_paragraph('河南科技學院',style='List Number')
    doc1.add_paragraph('河南工學院',style='List Number')
    doc1.add_paragraph('新鄉(xiāng)學院',style='List Number')

    # 保存word文檔
    doc1.save(r'D:\0工作文檔\word文檔\test.docx')  # 保存文檔 
if __name__ =='__main__':
    create_word()

程序的運行結果如下圖所示:

插入塊(run)

代碼如下:

from docx import Document


def create_word():
    doc1 = Document()  # 創(chuàng)建一個word文檔
    doc1.add_paragraph('七律·長征', 'Title')  # 增加段落信息,使用【標題1】樣式
    par1 = doc1.add_paragraph('作者:毛澤東\n')
    par1.add_run('紅軍不怕遠征難,萬水千山只等閑。\n')
    par1.add_run('五嶺逶迤騰細浪,烏蒙磅礴走泥丸。\n')
    par1.add_run('金沙水拍云崖暖,大渡橋橫鐵索寒。\n')
    par1.add_run('更喜岷山千里雪,三軍過后盡開顏。')

    par1.runs[0].bold = True
    par1.runs[1].underline = True
    par1.runs[2].italic = True
    par1.runs[3].underline = True
    par1.runs[4].italic = True

    doc1.save(r'D:\0工作文檔\word文檔\test.docx')  # 保存文檔


if __name__ == '__main__':
    create_word()

程序的運行結果如下圖所示:

插入分頁符

插入分頁符使用add_page_break,代碼如下:

from docx import Document
from docx.enum.style import WD_BUILTIN_STYLE
 
def create_word():
    doc1 = Document()    # 創(chuàng)建一個word文檔
    doc1.add_paragraph('七律·長征','title')    # 增加段落信息,使用【標題1】樣式
    par1=doc1.add_paragraph('作者:毛澤東\n')
    par1.add_run('紅軍不怕遠征難,萬水千山只等閑。\n')    
    par1.add_run('五嶺逶迤騰細浪,烏蒙磅礴走泥丸。\n')   
    par1.add_run('金沙水拍云崖暖,大渡橋橫鐵索寒。\n')   
    par1.add_run('更喜岷山千里雪,三軍過后盡開顏。\n')   
    doc1.add_paragraph('譯文','titile')
    doc1.add_paragraph('紅軍不怕萬里長征路上的一切艱難困苦,把千山萬水都看得極為平常。\n五嶺山脈綿延不絕,可在紅軍眼里不過像翻騰著的細小波浪;烏蒙山高大雄偉,在紅軍眼里也不過像在腳下滾過的泥丸。\n金沙江濁浪滔天,湍急的流水拍擊著高聳的山崖,濺起陣陣霧水,像是冒出蒸汽一樣。大渡河險橋橫架,晃動著凌空高懸的根根鐵索,寒意陣陣。\n更加令人欣喜的是千里岷山,皚皚白雪,紅軍翻越過去以后人人心情開朗,個個笑逐顏開。')
    
    doc1.add_page_break()   #  在此處插入一個分頁符
    
    # 增加無序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南科技學院',style='List Bullet')
    doc1.add_paragraph('河南醫(yī)藥大學',style='List Bullet')
    doc1.add_paragraph('河南師范大學',style='List Bullet')
    doc1.add_paragraph('河南工學院',style='List Bullet')
    doc1.add_paragraph('新鄉(xiāng)學院',style='List Bullet')
    # 增加有序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南師范大學',style='List Bullet')
    doc1.add_paragraph('河南醫(yī)藥大學',style='List Bullet')
    doc1.add_paragraph('河南科技學院',style='List Bullet')
    doc1.add_paragraph('河南工學院',style='List Bullet')
    doc1.add_paragraph('新鄉(xiāng)學院',style='List Bullet')

    # 保存word文檔
    doc1.save(r'D:\0工作文檔\word文檔\test.docx')  # 保存文檔 
if __name__ =='__main__':
    create_word()

插入圖片

本節(jié)用到的函數(shù)及屬性如下表所示:

函數(shù)/屬性用法
doc.add_picture(path,width,height)添加圖片
pic.width獲取圖片寬度
pic.height獲取圖片高度
doc.sections[0].page_width獲取頁面寬度
doc.sections[0].left_margin獲取頁面高度

例如:

from docx import Document

def create_word():
    doc1 = Document()    
    page_width = doc1.sections[0].page_width    # 獲取文檔的寬度
    page_left_width = doc1.sections[0].left_margin    # 獲取文檔的左邊距
    print(page_width)
    print(page_left_width)
    content_width = page_width-page_left_width*2    # 獲取中間內(nèi)容的寬度
    print(content_width)
    doc1.add_heading("插入圖片如下",level=0)
    # 增加圖片,設置圖片的寬度占文檔寬度的一半    
    pic = doc1.add_picture(r'D:\0工作文檔\typora文檔\word\pic01.jpg',int(content_width*0.5))  
    doc1.save(r'D:\0工作文檔\typora文檔\word\pic.docx')    # 保存文檔
 
if __name__ == '__main__':
    create_word()

插入表格

本節(jié)用到的函數(shù)及屬性如下表所示:

函數(shù)/屬性用法
doc.add_table(rows=x,cols=x)添加表格
table.add_row()添加行

例如:

from docx import Document
def create_table():
    doc1 = Document()    # 創(chuàng)建word文檔
    t1 = doc1.add_table(1,4)    # 添加一個1行4列的表格
    # 設置表格的內(nèi)容
    t1.rows[0].cells[0].text = '學號'
    t1.rows[0].cells[1].text = '姓名'
    t1.rows[0].cells[2].text = '性別'
    t1.rows[0].cells[3].text = '班級'
 
    data = (
        (1,'劉備','男','物流231班'),
        (2,'孫權','女','物流231班'),
        (3,'曹操','男','物流232班')
    )
    for s_id,s_name,s_gender,s_class in data:
        row = t1.add_row()        # 增加一行數(shù)據(jù)
        row.cells[0].text = str(s_id)   # 注意:要把數(shù)值型轉換為文本類型
        row.cells[1].text = s_name
        row.cells[2].text = s_gender
        row.cells[3].text = s_class
        
     doc1.save(r'D:\0工作文檔\typora文檔\word\table.docx')    # 保存文檔
 
if __name__ =='__main__':
    create_table()

程序的運行結果如下圖所示:

五、讀取word文檔的內(nèi)容

如果需要讀取word文檔的內(nèi)容,可以通過相關的變量讀取段落、塊、表格、行、單元格等信息。

讀取段落信息

使用doc.paragraphs屬性返回所有段落的列表。使用paragraph.text獲取段落的內(nèi)容。

程序代碼如下:

from docx import Document

doc1 = Document(r"D:\0工作文檔\typora文檔\word\test.docx")  # 創(chuàng)建word文檔
print(len(doc1.paragraphs))
print(doc1.paragraphs[0].text)
print(doc1.paragraphs[1].text)

程序的運行結果為:
379
一、緒論
(一)課題背景

讀取塊信息

使用paragraph.runs屬性返回段落中所有塊的列表。使用run.text獲取塊的內(nèi)容。

程序代碼如下:

from docx import Document

doc1 = Document(r"D:\0工作文檔\typora文檔\word\test.docx")  # 創(chuàng)建word文檔
p=doc1.paragraphs[2]
print(p.text)
runs=p.runs
print(len(runs))
for run in runs:
    print(run.text)

讀取表格信息

使用doc.tables屬性返回文檔中所有表格的列表。使用run.text獲取塊的內(nèi)容。

程序代碼如下:

from docx import Document

doc1 = Document(r"D:\0工作文檔\typora文檔\word\test.docx")  # 創(chuàng)建word文檔
t=doc1.tables
print("表格數(shù)量:",len(t))  # 返回文檔中表格的數(shù)量
t1=t[0]  # 返回第一個表格
print("第一個表格的行數(shù):",len(t1.rows))  # 返回第一個表格的行數(shù)
print("=="*20)
print("==============按行顯示表格內(nèi)容:=================")
print("=="*20)
for row in t1.rows:
    for cell in row.cells:
        print(cell.text, end=' ')
    print("")

print("第一個表格的列數(shù):",len(t1.columns))  # 返回第一個表格的列數(shù)
print("=="*20)
print("==============按行列顯示表格內(nèi)容:=================")
print("=="*20)
for column in t1.columns:
    for cell in column.cells:
        print(cell.text, end=' ')
    print("")  

使用模板生成文檔

例如:需要生成如下圖所示的學生成績通知單(每個學生生成一份)。

程序代碼如下:

from docx import Document

def create_score(d):
    doc1 = Document()  # 創(chuàng)建word文檔
    doc1.add_heading(f'{d[1]}成績通知單',0)  # 添加標題
    t=doc1.add_table(1,6)   # 添加表格,1行6列
    row=t.rows[0]   # 設置表格第一行每個單元格內(nèi)容
    row.cells[0].text = "學號"
    row.cells[1].text = "姓名"
    row.cells[2].text = "語文"
    row.cells[3].text = "數(shù)學"
    row.cells[4].text = "英語"
    row.cells[5].text = "班級"
    row=t.add_row()  # 添加一行,并設置每個單元格內(nèi)容
    row.cells[0].text = d[0]
    row.cells[1].text = d[1]
    row.cells[2].text = str(d[2])
    row.cells[3].text = str(d[3])
    row.cells[4].text = str(d[4])
    row.cells[5].text = d[5]
    doc1.save(f"D:/0工作文檔/typora文檔/word/score_{d[1]}.docx") # 保存為單個文件

if __name__ == '__main__':
    data = [
        ('100001', '李剛', 80, 98, 85, '八年級二班'),
        ('100002', '張洪濤', 95, 66, 92, '八年級二班'),
        ('100003', '張靜靜', 77, 78, 94, '八年級二班'),
        ('100004', '李曉紅', 68, 84, 74, '八年級二班'),
        ('100005', '王大光', 91, 97, 93, '八年級二班'),
        ('100006', '李珍珍', 87, 78, 79, '八年級二班')
    ]
    for d in data:
        create_score(d)

程序的執(zhí)行結果如下圖所示:

 到此這篇關于Python使用python-docx庫操作word(創(chuàng)建、讀取和插入)文檔的完整指南的文章就介紹到這了,更多相關Python python-docx操作word內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python對象體系深入分析

    Python對象體系深入分析

    這篇文章主要介紹了Python對象體系,以實例的形式進行了較為深入的分析,需要的朋友可以參考下
    2014-10-10
  • python下載的庫包存放路徑

    python下載的庫包存放路徑

    在本篇文章里小編給大家整理的是一篇關于python下載的庫包存放路徑,需要的朋友們可以參考學習下。
    2020-07-07
  • python如何編寫類似nmap的掃描工具

    python如何編寫類似nmap的掃描工具

    這篇文章主要介紹了python如何編寫類似nmap的掃描工具,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python中csv文件的寫入與讀取方法例子

    Python中csv文件的寫入與讀取方法例子

    這篇文章主要給大家介紹了關于Python中csv文件的寫入與讀取方法的相關資料,csv是"Comma-Separated Values(逗號分割的值)"的首字母縮寫,它其實和txt文件一樣,都是純文本文件,使用Python來讀寫csv文件是非常容易的,需要的朋友可以參考下
    2023-09-09
  • python中關于py文件之間相互import的問題及解決方法

    python中關于py文件之間相互import的問題及解決方法

    這篇文章主要介紹了python中關于py文件之間相互import的問題,本文用一個例子演示下如何解決python中循環(huán)引用的問題,需要的朋友可以參考下
    2022-02-02
  • Python 框架 FastAPI詳解

    Python 框架 FastAPI詳解

    FastAPI 是一個現(xiàn)代、快速且高性能的 Web 框架,用于 Python 3.6+,基于 Python 類型提示構建 API,它通過 Starlette 和 Pydantic 優(yōu)化,支持多種 HTTP 方法、異步編程、數(shù)據(jù)驗證和自動生成交互式文檔,FastAPI 適合快速開發(fā)高性能、可擴展的 Web 服務
    2024-11-11
  • Python網(wǎng)絡編程之Python編寫TCP協(xié)議程序的步驟

    Python網(wǎng)絡編程之Python編寫TCP協(xié)議程序的步驟

    這篇文章主要介紹了Python網(wǎng)絡編程編寫TCP協(xié)議程序的開發(fā)步驟,通過實例代碼介紹了TCP客戶端程序開發(fā),案例講解多任務版TCP服務端程序開發(fā),需要的朋友可以參考下
    2022-11-11
  • 使用Python實現(xiàn)文件復制程序的幾種方法

    使用Python實現(xiàn)文件復制程序的幾種方法

    在Python編程的世界中,文件操作是一項基礎而重要的技能,無論是處理文本數(shù)據(jù)、管理配置文件,還是進行數(shù)據(jù)分析,我們都需要頻繁地與文件打交道,今天,我們將深入探討如何使用Python創(chuàng)建一個簡單的文件復制程序,需要的朋友可以參考下
    2026-05-05
  • Pandas時間類型轉換與處理的實現(xiàn)示例

    Pandas時間類型轉換與處理的實現(xiàn)示例

    本文主要介紹了Pandas時間類型轉換與處理的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 解決Jupyter Notebook “signal only works in main thread“問題

    解決Jupyter Notebook “signal only works&nb

    這篇文章主要介紹了解決Jupyter Notebook “signal only works in main thread“問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論

宁城县| 安新县| 巧家县| 阿尔山市| 麻城市| 菏泽市| 上杭县| 山丹县| 东阿县| 神池县| 延川县| 邢台县| 潮安县| 新干县| 临沭县| 杂多县| 宁陵县| 湖州市| 汉沽区| 山东省| 沧源| 宽城| 霍州市| 安仁县| 响水县| 上高县| 古浪县| 阳曲县| 平谷区| 阿拉善盟| 苏尼特左旗| 平定县| 曲沃县| 东城区| 太谷县| 阿拉尔市| 临城县| 治多县| 莲花县| 万载县| 榆林市|