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

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

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

python-docx是一個(gè)可以操作Word文檔的python開源庫,簡(jiǎn)單易用,適合用來自動(dòng)化辦公。

一、安裝 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中,一個(gè)Word文檔用一個(gè)Document對(duì)象來表示,所以我們要新建一個(gè)Word文檔,只需要實(shí)例化一個(gè)Document對(duì)象即可。

程序代碼如下:

from docx import Document

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

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

程序代碼如下:

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

三、保存word文檔

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

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

程序代碼如下:

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

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

相關(guān)概念

1、Document對(duì)象

Document對(duì)象表示整個(gè)文檔。

2、paragraph對(duì)象

每一個(gè)段落代表一個(gè)paragraph對(duì)象。

3、run對(duì)象

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

4、table對(duì)象

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

以上各類對(duì)象之間的關(guān)系如下圖所示:

添加標(biāo)題

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

函數(shù)/屬性用法
docx.Document()創(chuàng)建word文檔
doc.add_heading(content,level)添加標(biāo)題
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級(jí)標(biāo)題
    doc1.add_heading('Python操作 增加1級(jí)標(biāo)題',1)  # 增加1級(jí)標(biāo)題
    doc1.add_heading('Python操作 增加2級(jí)標(biāo)題',2)  # 增加2級(jí)標(biāo)題    
    doc1.save(r'D:\0工作文檔\word文檔\test.docx')  # 保存文檔 
if __name__ == '__main__':
    create_word()

程序的運(yùn)行結(jié)果如下圖所示:

插入段落

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

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

程序的運(yùn)行結(jié)果如下圖所示:

插入塊(run)

代碼如下:

from docx import Document


def create_word():
    doc1 = Document()  # 創(chuàng)建一個(gè)word文檔
    doc1.add_paragraph('七律·長(zhǎng)征', 'Title')  # 增加段落信息,使用【標(biāo)題1】樣式
    par1 = doc1.add_paragraph('作者:毛澤東\n')
    par1.add_run('紅軍不怕遠(yuǎn)征難,萬水千山只等閑。\n')
    par1.add_run('五嶺逶迤騰細(xì)浪,烏蒙磅礴走泥丸。\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()

程序的運(yùn)行結(jié)果如下圖所示:

插入分頁符

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

from docx import Document
from docx.enum.style import WD_BUILTIN_STYLE
 
def create_word():
    doc1 = Document()    # 創(chuàng)建一個(gè)word文檔
    doc1.add_paragraph('七律·長(zhǎng)征','title')    # 增加段落信息,使用【標(biāo)題1】樣式
    par1=doc1.add_paragraph('作者:毛澤東\n')
    par1.add_run('紅軍不怕遠(yuǎn)征難,萬水千山只等閑。\n')    
    par1.add_run('五嶺逶迤騰細(xì)浪,烏蒙磅礴走泥丸。\n')   
    par1.add_run('金沙水拍云崖暖,大渡橋橫鐵索寒。\n')   
    par1.add_run('更喜岷山千里雪,三軍過后盡開顏。\n')   
    doc1.add_paragraph('譯文','titile')
    doc1.add_paragraph('紅軍不怕萬里長(zhǎng)征路上的一切艱難困苦,把千山萬水都看得極為平常。\n五嶺山脈綿延不絕,可在紅軍眼里不過像翻騰著的細(xì)小波浪;烏蒙山高大雄偉,在紅軍眼里也不過像在腳下滾過的泥丸。\n金沙江濁浪滔天,湍急的流水拍擊著高聳的山崖,濺起陣陣霧水,像是冒出蒸汽一樣。大渡河險(xiǎn)橋橫架,晃動(dòng)著凌空高懸的根根鐵索,寒意陣陣。\n更加令人欣喜的是千里岷山,皚皚白雪,紅軍翻越過去以后人人心情開朗,個(gè)個(gè)笑逐顏開。')
    
    doc1.add_page_break()   #  在此處插入一個(gè)分頁符
    
    # 增加無序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南科技學(xué)院',style='List Bullet')
    doc1.add_paragraph('河南醫(yī)藥大學(xué)',style='List Bullet')
    doc1.add_paragraph('河南師范大學(xué)',style='List Bullet')
    doc1.add_paragraph('河南工學(xué)院',style='List Bullet')
    doc1.add_paragraph('新鄉(xiāng)學(xué)院',style='List Bullet')
    # 增加有序列表
    doc1.add_paragraph('新鄉(xiāng)市的高校:')
    doc1.add_paragraph('河南師范大學(xué)',style='List Bullet')
    doc1.add_paragraph('河南醫(yī)藥大學(xué)',style='List Bullet')
    doc1.add_paragraph('河南科技學(xué)院',style='List Bullet')
    doc1.add_paragraph('河南工學(xué)院',style='List Bullet')
    doc1.add_paragraph('新鄉(xiāng)學(xué)院',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)
    # 增加圖片,設(shè)置圖片的寬度占文檔寬度的一半    
    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)    # 添加一個(gè)1行4列的表格
    # 設(shè)置表格的內(nèi)容
    t1.rows[0].cells[0].text = '學(xué)號(hào)'
    t1.rows[0].cells[1].text = '姓名'
    t1.rows[0].cells[2].text = '性別'
    t1.rows[0].cells[3].text = '班級(jí)'
 
    data = (
        (1,'劉備','男','物流231班'),
        (2,'孫權(quán)','女','物流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ù)值型轉(zhuǎn)換為文本類型
        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()

程序的運(yùn)行結(jié)果如下圖所示:

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

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

讀取段落信息

使用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)

程序的運(yùn)行結(jié)果為:
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]  # 返回第一個(gè)表格
print("第一個(gè)表格的行數(shù):",len(t1.rows))  # 返回第一個(gè)表格的行數(shù)
print("=="*20)
print("==============按行顯示表格內(nèi)容:=================")
print("=="*20)
for row in t1.rows:
    for cell in row.cells:
        print(cell.text, end=' ')
    print("")

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

使用模板生成文檔

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

程序代碼如下:

from docx import Document

def create_score(d):
    doc1 = Document()  # 創(chuàng)建word文檔
    doc1.add_heading(f'{d[1]}成績(jī)通知單',0)  # 添加標(biāo)題
    t=doc1.add_table(1,6)   # 添加表格,1行6列
    row=t.rows[0]   # 設(shè)置表格第一行每個(gè)單元格內(nèi)容
    row.cells[0].text = "學(xué)號(hào)"
    row.cells[1].text = "姓名"
    row.cells[2].text = "語文"
    row.cells[3].text = "數(shù)學(xué)"
    row.cells[4].text = "英語"
    row.cells[5].text = "班級(jí)"
    row=t.add_row()  # 添加一行,并設(shè)置每個(gè)單元格內(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") # 保存為單個(gè)文件

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

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

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

相關(guān)文章

  • Python對(duì)象體系深入分析

    Python對(duì)象體系深入分析

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

    python下載的庫包存放路徑

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

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

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

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

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

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

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

    Python 框架 FastAPI詳解

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

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

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

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

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

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

    本文主要介紹了Pandas時(shí)間類型轉(zhuǎn)換與處理的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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“問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論

金昌市| 灌南县| 枣阳市| 浦县| 江孜县| 新绛县| 顺昌县| 湖南省| 宜章县| 庆元县| 利津县| 东阳市| 涞水县| 永平县| 江永县| 图们市| 青浦区| 白山市| 独山县| 洪江市| 顺平县| 永福县| 霸州市| 黑水县| 西平县| 泽库县| 景洪市| 余江县| 台安县| 阳山县| 大化| 通海县| 阳东县| 通州区| 田林县| 屏边| 石门县| 民丰县| 周宁县| 个旧市| 文安县|