亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

一、VBA法提取word中的表格

1. 代碼實(shí)現(xiàn)

VBA(Visual Basic for Applications)操作Word文件時(shí),可以執(zhí)行包括創(chuàng)建、打開、保存、修改文本和格式等多種任務(wù)。今天,我們使用VBA來批量提取當(dāng)前文件中的表格,在每個(gè)表格中間添加一個(gè)空行。實(shí)現(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
 
 ' 設(shè)置輸出文件名和路徑
 fileName = "output.docx"
 outputPath = ActiveDocument.Path & "\" & fileName
 
 ' 當(dāng)前文檔設(shè)置為源文檔
 Set docSource = ActiveDocument
 ' 創(chuàng)建一個(gè)新文檔作為目標(biāo)文檔
 Set docTarget = Documents.Add
 
 For Each tbl In docSource.Tables
 
 ' 復(fù)制表格
 tbl.Range.Copy
 docTarget.Content.InsertParagraphAfter
 docTarget.Content.Paragraphs.Last.Range.Paste
 
 ' 在表格后添加一個(gè)空行
 docTarget.Content.InsertParagraphAfter
 docTarget.Content.Paragraphs.Last.Range.InsertParagraphAfter
 Next tbl
 
 ' 刪除目標(biāo)文檔中的第一個(gè)空段落
 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. 代碼分析

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

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

3. 使用方法

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

二、Python法

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

1.代碼實(shí)現(xiàn)

我們首先從docx中導(dǎo)入Document模塊,然后讀取指定的word文件,提取表格及其內(nèi)容到一個(gè)新的文件當(dāng)中并保存。實(shí)現(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)置的表格樣式,這樣會(huì)自動(dòng)添加框線
        # 復(fù)制表頭
        for j, cell in enumerate(table.rows[0].cells):
            t.cell(0, j).text = cell.text
        # 復(fù)制其他行
        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
 
        # 除了最后一個(gè)表格外,在每個(gè)表格后添加一個(gè)空行(空段落)
        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文件中,同時(shí)使用了表格的內(nèi)置樣式,給新生成的表格自動(dòng)添加框線,基本實(shí)現(xiàn)表格文本內(nèi)容的提取,但是表格中的字體顏色、大小和邊框樣式均無法提取。同時(shí)這里也沒有提取題注,這時(shí)我們需要對(duì)代碼進(jìn)一步修改,以使其可以提取表格上方的題注。

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

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

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):
        # 嘗試定位并復(fù)制表格上方的居中文字
        # 查找表格前的段落
        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)置的表格樣式,這樣會(huì)自動(dòng)添加框線
 
        # 復(fù)制表頭
        for j, cell in enumerate(table.rows[0].cells):
            t.cell(0, j).text = cell.text
        # 復(fù)制其他行
        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
 
        # 除了最后一個(gè)表格外,在每個(gè)表格后添加一個(gè)空行(空段落)
        if i < len(doc.tables) - 1:
            new_doc.add_paragraph()
 
    # 保存新文檔
    new_doc.save(output_path)
 
# 使用示例
extract_tables_with_titles('example.docx', 'output.docx')

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

三、學(xué)后反思

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

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

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

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

相關(guān)文章

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

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

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

    Pandas中DataFrame的常用用法分享

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

    OpenCV半小時(shí)掌握基本操作之SIFT算法

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

    python練習(xí)程序批量修改文件名

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論