欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)批量提取Word中的表格

 更新時間:2024年02月15日 07:44:41   作者:PythonFun  
表格在word文檔中常見的文檔元素之一,操作word文件時有時需要提取文件中多個表格的內(nèi)容到一個新的文件,本文給大家分享兩種批量提取文檔中表格的兩種方法,希望對大家有所幫助

表格在word文檔中常見的文檔元素之一。操作word文件時有時需要提取文件中多個表格的內(nèi)容到一個新的文件,甚至有時還會要提取題注信息。

今天,給大家分享兩種批量提取文檔中表格的兩種方法,分別是VBA法和Python法兩種。

一、VBA法提取word中的表格

1. 代碼實現(xiàn)

VBA(Visual Basic for Applications)操作Word文件時,可以執(zhí)行包括創(chuàng)建、打開、保存、修改文本和格式等多種任務。今天,我們使用VBA來批量提取當前文件中的表格,在每個表格中間添加一個空行。實現(xiàn)代碼如下:

 Sub ExtractTablesAndPreviousRowToNewFile()
 Dim docSource As Document
 Dim docTarget As Document
 Dim tbl As Table
 Dim rng As Range
 Dim outputPath As String
 Dim fileName As String
 
 ' 設置輸出文件名和路徑
 fileName = "output.docx"
 outputPath = ActiveDocument.Path & "\" & fileName
 
 ' 當前文檔設置為源文檔
 Set docSource = ActiveDocument
 ' 創(chuàng)建一個新文檔作為目標文檔
 Set docTarget = Documents.Add
 
 For Each tbl In docSource.Tables
 
 ' 復制表格
 tbl.Range.Copy
 docTarget.Content.InsertParagraphAfter
 docTarget.Content.Paragraphs.Last.Range.Paste
 
 ' 在表格后添加一個空行
 docTarget.Content.InsertParagraphAfter
 docTarget.Content.Paragraphs.Last.Range.InsertParagraphAfter
 Next tbl
 
 ' 刪除目標文檔中的第一個空段落
 If docTarget.Paragraphs.Count > 0 Then
 docTarget.Paragraphs(1).Range.Delete
 End If
 
 ' 保存新文檔到指定路徑
 docTarget.SaveAs2 fileName:=outputPath, FileFormat:=wdFormatXMLDocument
 docTarget.Close
 
 MsgBox "表格及其上方一行內(nèi)容已經(jīng)成功提取到 " & outputPath, vbInformation
End Sub

2. 代碼分析

以上代碼首先激活當前文檔作為源文檔,然后創(chuàng)建一個新文檔output.docx用來放置提取的表格和題注。它會遍歷源文檔中的所有表格,對于每個表格,嘗試復制表格本身到目標文檔中。

每個表格后面,還會插入一個空行以保持文件中多個表格間清晰的視覺分隔。

3. 使用方法

首先,在Word中打開你想提取表格的文檔,然后按下 Alt + F11 打開VBA編輯器。在【項目】窗格中,選擇你的文檔,然后插入一個新的模塊(右鍵點擊你的文檔名稱,選擇【插入】 > 【模塊】)。將以上VBA代碼復制并粘貼到新模塊中。關(guān)閉VBA編輯器,然后運行宏(在Word中,可以通過【視圖】 > 【宏】> 【查看宏】,選擇這個宏,然后點擊【運行】即可。

二、Python法

Python在office辦公自動化方面有非常廣泛的用途,它有專門的庫來處理office中的各個組件,而且這些都是開源免費使用的。操作word文件就要用到python-docx這個庫,在編寫程序之前要安裝新版的Python程序,然后在cmd下面用pip install python-docx來安裝這個庫,也可以在thonny這個輕量版的集成開發(fā)環(huán)境中安裝python-docx用于操作word文件。

1.代碼實現(xiàn)

我們首先從docx中導入Document模塊,然后讀取指定的word文件,提取表格及其內(nèi)容到一個新的文件當中并保存。實現(xiàn)代碼如下:

from docx import Document
import os
 
def extract_tables(doc_path, output_path):
    # 加載原始文檔
    doc = Document(doc_path)
    new_doc = Document()
 
    # 提取表格并添加到新文檔
    for i, table in enumerate(doc.tables):
        t = new_doc.add_table(rows=1, cols=len(table.columns))
        t.style = 'Table Grid'  # 使用內(nèi)置的表格樣式,這樣會自動添加框線
        # 復制表頭
        for j, cell in enumerate(table.rows[0].cells):
            t.cell(0, j).text = cell.text
        # 復制其他行
        for row in table.rows[1:]:
            new_row = t.add_row()
            for j, cell in enumerate(row.cells):
                new_row.cells[j].text = cell.text
 
        # 除了最后一個表格外,在每個表格后添加一個空行(空段落)
        if i < len(doc.tables) - 1:
            new_doc.add_paragraph()
 
    # 保存新文檔
    new_doc.save(output_path)
 
# 使用示例
extract_tables('example.docx', 'output.docx')

2. 代碼分析

以上代碼把example.docx文件中的所有表格提取到了output.docx文件中,同時使用了表格的內(nèi)置樣式,給新生成的表格自動添加框線,基本實現(xiàn)表格文本內(nèi)容的提取,但是表格中的字體顏色、大小和邊框樣式均無法提取。同時這里也沒有提取題注,這時我們需要對代碼進一步修改,以使其可以提取表格上方的題注。

3. 提取題注和表格內(nèi)容

本代碼把表格上方居中的文字默認識別為表格的題注,提取表格內(nèi)容時會一并提取出來。

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
import os
 
def extract_tables_with_titles(doc_path, output_path):
    # 加載原始文檔
    doc = Document(doc_path)
    new_doc = Document()
 
    # 提取表格并添加到新文檔
    for i, table in enumerate(doc.tables):
        # 嘗試定位并復制表格上方的居中文字
        # 查找表格前的段落
        para = table._element.getprevious()
        if para is not None and para.tag.endswith('p'):
            # 檢查該段落的格式是否為居中
            p = para.getparent()
            para_obj = [p for p in doc.paragraphs if p._element == para][0]
            if para_obj.alignment == WD_ALIGN_PARAGRAPH.CENTER:
                # 添加居中的段落到新文檔
                new_para = new_doc.add_paragraph(para_obj.text)
                new_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
 
        # 添加表格
        t = new_doc.add_table(rows=1, cols=len(table.columns))
        t.style = 'Table Grid'  # 使用內(nèi)置的表格樣式,這樣會自動添加框線
 
        # 復制表頭
        for j, cell in enumerate(table.rows[0].cells):
            t.cell(0, j).text = cell.text
        # 復制其他行
        for row in table.rows[1:]:
            new_row = t.add_row()
            for j, cell in enumerate(row.cells):
                new_row.cells[j].text = cell.text
 
        # 除了最后一個表格外,在每個表格后添加一個空行(空段落)
        if i < len(doc.tables) - 1:
            new_doc.add_paragraph()
 
    # 保存新文檔
    new_doc.save(output_path)
 
# 使用示例
extract_tables_with_titles('example.docx', 'output.docx')

以上代碼在原有代碼基礎上增加了題注內(nèi)容的提取,通過調(diào)用extract_tables_with_titles這個函數(shù),批量把example.docx文件中的表格和題錄提取出來,并放到了output.docx當中,并且每個表格之間會有一個空行。

三、學后反思

利用VBA和Python均可以實現(xiàn)表格內(nèi)容提取的功能,但是對于文字和表格的樣式無法完整提取。后期會進一步探索如何把表格內(nèi)容和樣式完整拷貝出來,但是由于涉及字體等特殊格式,提取樣式會有一定的難度。

上面兩種方法的優(yōu)勢在于可以批量、高效地提取表格內(nèi)容,但是無法提取樣式,因此在提取復雜表格時可能會報錯。

以上代碼默認是把表格批量提取到當前目錄,VBA代碼應用的是當前的word文件,而python則要求提取的文件名為example.docx,如果想批量提取多個文件中的表格則還需要添加for循環(huán)來遍歷所有的word文件。

到此這篇關(guān)于Python實現(xiàn)批量提取Word中的表格的文章就介紹到這了,更多相關(guān)Python提取Word表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用jpype模塊調(diào)用jar包過程解析

    Python使用jpype模塊調(diào)用jar包過程解析

    這篇文章主要介紹了Python使用jpype模塊調(diào)用jar包過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Pandas中DataFrame的常用用法分享

    Pandas中DataFrame的常用用法分享

    Pandas是Python中最流行的數(shù)據(jù)分析和處理工具之一,它提供了一個名為DataFrame的數(shù)據(jù)結(jié)構(gòu),可以被認為是一個二維表格或電子表格。本文主要來和大家分享一下Pandas中DataFrame的常用用法,希望對大家有所幫助
    2023-04-04
  • OpenCV半小時掌握基本操作之SIFT算法

    OpenCV半小時掌握基本操作之SIFT算法

    這篇文章主要介紹了OpenCV基本操作之SIFT算法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python練習程序批量修改文件名

    python練習程序批量修改文件名

    文件名中卻都含有xxx有聲下載,使用腳本將其去掉。腳本練習了os.rename重命名方法,str.partition方法使用, 及正則match,search方法區(qū)別
    2014-01-01
  • pandas分批讀取大數(shù)據(jù)集教程

    pandas分批讀取大數(shù)據(jù)集教程

    這篇文章主要介紹了pandas分批讀取大數(shù)據(jù)集教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python運行環(huán)境在新舊電腦間遷移的三種方法

    python運行環(huán)境在新舊電腦間遷移的三種方法

    環(huán)境部署或遷移是一項簡單而又考驗應對能力的一項工作,這篇文章主要給大家介紹了關(guān)于python運行環(huán)境在新舊電腦間遷移的三種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Python文件讀寫open函數(shù)詳解

    Python文件讀寫open函數(shù)詳解

    這篇文章主要介紹了Python文件讀寫open函數(shù)詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 基于BCEWithLogitsLoss樣本不均衡的處理方案

    基于BCEWithLogitsLoss樣本不均衡的處理方案

    這篇文章主要介紹了BCEWithLogitsLoss樣本不均衡的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 如何使用Flask-Migrate拓展數(shù)據(jù)庫表結(jié)構(gòu)

    如何使用Flask-Migrate拓展數(shù)據(jù)庫表結(jié)構(gòu)

    這篇文章主要介紹了如何使用Flask-Migrate拓展數(shù)據(jù)庫表結(jié)構(gòu),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python實現(xiàn)將一段話txt生成字幕srt文件

    Python實現(xiàn)將一段話txt生成字幕srt文件

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)將一段話txt生成字幕srt文件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02

最新評論