Python和VBA批量提取Word中的表格

这篇具有很好参考价值的文章主要介绍了Python和VBA批量提取Word中的表格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件,甚至有时还会要提取题注信息。

今天,给大家分享两种批量提取文档中表格的两种方法,分别是VBA法和Python法两种。

一、VBA法提取word中的表格

1. 代码实现

VBA(Visual Basic for Applications)操作Word文件时,可以执行包括创建、打开、保存、修改文本和格式等多种任务。今天,我们使用VBA来批量提取当前文件中的表格,在每个表格中间添加一个空行。实现代码如下:

 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
 ' 创建一个新文档作为目标文档
 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 "表格及其上方一行内容已经成功提取到 " & outputPath, vbInformation
End Sub

2. 代码分析

以上代码首先激活当前文档作为源文档,然后创建一个新文档output.docx用来放置提取的表格和题注。它会遍历源文档中的所有表格,对于每个表格,尝试复制表格本身到目标文档中。

每个表格后面,还会插入一个空行以保持文件中多个表格间清晰的视觉分隔。

3. 使用方法

首先,在Word中打开你想提取表格的文档,然后按下 Alt + F11 打开VBA编辑器。在【项目】窗格中,选择你的文档,然后插入一个新的模块(右键点击你的文档名称,选择【插入】 > 【模块】)。将以上VBA代码复制并粘贴到新模块中。关闭VBA编辑器,然后运行宏(在Word中,可以通过【视图】 > 【宏】> 【查看宏】,选择这个宏,然后点击【运行】即可。

二、Python法

Python在office办公自动化方面有非常广泛的用途,它有专门的库来处理office中的各个组件,而且这些都是开源免费使用的。操作word文件就要用到python-docx这个库,在编写程序之前要安装新版的Python程序,然后在cmd下面用pip install python-docx来安装这个库,也可以在thonny这个轻量版的集成开发环境中安装python-docx用于操作word文件。

1.代码实现

我们首先从docx中导入Document模块,然后读取指定的word文件,提取表格及其内容到一个新的文件当中并保存。实现代码如下:

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'  # 使用内置的表格样式,这样会自动添加框线
        # 复制表头
        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文件中,同时使用了表格的内置样式,给新生成的表格自动添加框线,基本实现表格文本内容的提取,但是表格中的字体颜色、大小和边框样式均无法提取。同时这里也没有提取题注,这时我们需要对代码进一步修改,以使其可以提取表格上方的题注。

3. 提取题注和表格内容

本代码把表格上方居中的文字默认识别为表格的题注,提取表格内容时会一并提取出来。

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'  # 使用内置的表格样式,这样会自动添加框线

        # 复制表头
        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')

以上代码在原有代码基础上增加了题注内容的提取,通过调用extract_tables_with_titles这个函数,批量把example.docx文件中的表格和题录提取出来,并放到了output.docx当中,并且每个表格之间会有一个空行。

三、演示视频

本人录制了相关视频,供大学参考使用。

VBA和Python提取Word中的表格文章来源地址https://www.toymoban.com/news/detail-825858.html

四、学后反思

  1. 利用VBA和Python均可以实现表格内容提取的功能,但是对于文字和表格的样式无法完整提取。后期会进一步探索如何把表格内容和样式完整拷贝出来,但是由于涉及字体等特殊格式,提取样式会有一定的难度。
  2. 上面两种方法的优势在于可以批量、高效地提取表格内容,但是无法提取样式,因此在提取复杂表格时可能会报错。
  3. 以上代码默认是把表格批量提取到当前目录,VBA代码应用的是当前的word文件,而python则要求提取的文件名为example.docx,如果想批量提取多个文件中的表格则还需要添加for循环来遍历所有的word文件。

到了这里,关于Python和VBA批量提取Word中的表格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# 操作word中的表格 批量复制和批量插入

    用的是windows自带的dll包,没有引用第三方 批量插入表格后,原理就是整个文档会从前到后编制表格索引,从一开始意思是前面序号为1.2.3表格,1复制3个在后面,那么原先的2表格序号就标为2+3=5!为表格设置各种值也是按这个序号来!

    2024年02月08日
    浏览(23)
  • Python批量调整Word文档中的字体、段落间距及格式python调用函数批量调整word格式

        最近关于批处理格式的问题我查了很多资料,但是都没有找到自己想要的答案。 接上期,上篇博文我简单介绍了python操作Word的一些基本操作,本篇重点介绍如何批量将python中的文字导入到Word中,评设置其字体字号、间距、样式等。 Python读写word文档 用python 处理docx文档

    2024年02月13日
    浏览(17)
  • 用python实现提取word中的所有图片

    你可以使用python-docx库来处理word文件,然后遍历文件中的所有形状,找到图片。 首先,你需要安装python-docx库。在命令行中输入以下命令进行安装: 复制代码 pip install python-docx 然后,你可以使用以下代码提取word文件中的所有图片: python复制代码 from docx import Document from doc

    2024年01月21日
    浏览(17)
  • ChatGPT炒股:批量自动提取股票公告中的表格并合并数据

    首先,在ChatGPT中输入提示词: 写一段Python代码: F盘文件夹“新三板 2023年日常性关联交易20230704”中很多个PDF文件,用 Tabula提取这些PDF文件中第1页中的第2个表格,然后保存到表格文件中,文件标题名和原PDF文件保持一致; 注意:表格中的元素,如果为None,则替换为空字符

    2024年02月13日
    浏览(22)
  • Python批量替换Excel和Word中的关键字

    有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉。因为这么多文件,要一个一个地打开文件,再进行批量替换修改,几个文件还好,如果是成百上千的文件,我想你一会儿就感觉自己被搞晕了,不仅搞不清

    2024年02月12日
    浏览(10)
  • 【办公自动化】使用Python一键提取PDF中的表格到Excel

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理Excel 二、提取PDF表格到excel 三、往期推荐 文末推荐  文末福利   Pyth

    2024年02月13日
    浏览(22)
  • Python提取JSON文件中的指定数据并保存在CSV或Excel表格文件内

      本文介绍基于 Python 语言,读取 JSON 格式的数据,提取其中的指定内容,并将提取到的数据保存到 .csv 格式或 .xlsx 格式的表格文件中的方法。    JSON 格式的数据在数据信息交换过程中经常使用,但是相对而言并不直观;因此,有时我们希望将 JSON 格式的数据转换为 E

    2024年02月11日
    浏览(13)
  • 【办公自动化】使用Python一键提取PDF中的表格到Excel(文末送书5本)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、Python处理Excel 二、提取PDF表格到excel 三、往期推荐 文末推荐  文末福利   Pyth

    2024年02月14日
    浏览(19)
  • 【办公类-19-03】办公中的思考——Python批量制作word单元格照片和文字(小照片系列)

    全部材料路径(红框两个必备) 每位老师的序号和名言都不同   必须调整图片质量(制作小图)的意义            

    2024年02月09日
    浏览(10)
  • python提取word文本和word图片

    提取文本 docx只支持docx格式,所以如果想读取doc需要另存为docx格式即可 提取图片

    2024年02月09日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包