重庆网站建设雪奥科技,如何进行优化,wordpress seo,做直播网站开发教程表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件#xff0c;甚至有时还会要提取题注信息。
今天#xff0c;给大家分享两种批量提取文档中表格的两种方法#xff0c;分别是VBA法和Python法两种。
一、VBA法提取word中…表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件甚至有时还会要提取题注信息。
今天给大家分享两种批量提取文档中表格的两种方法分别是VBA法和Python法两种。
一、VBA法提取word中的表格
1. 代码实现
VBAVisual Basic for Applications操作Word文件时可以执行包括创建、打开、保存、修改文本和格式等多种任务。今天我们使用VBA来批量提取当前文件中的表格在每个表格中间添加一个空行。实现代码如下 Sub ExtractTablesAndPreviousRowToNewFile()Dim docSource As DocumentDim docTarget As DocumentDim tbl As TableDim rng As RangeDim outputPath As StringDim fileName As String 设置输出文件名和路径fileName output.docxoutputPath ActiveDocument.Path \ fileName 当前文档设置为源文档Set docSource ActiveDocument 创建一个新文档作为目标文档Set docTarget Documents.AddFor Each tbl In docSource.Tables 复制表格tbl.Range.CopydocTarget.Content.InsertParagraphAfterdocTarget.Content.Paragraphs.Last.Range.Paste 在表格后添加一个空行docTarget.Content.InsertParagraphAfterdocTarget.Content.Paragraphs.Last.Range.InsertParagraphAfterNext tbl 删除目标文档中的第一个空段落If docTarget.Paragraphs.Count 0 ThendocTarget.Paragraphs(1).Range.DeleteEnd If 保存新文档到指定路径docTarget.SaveAs2 fileName:outputPath, FileFormat:wdFormatXMLDocumentdocTarget.CloseMsgBox 表格及其上方一行内容已经成功提取到 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 osdef 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(rows1, colslen(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 osdef 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(rows1, colslen(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中的表格 四、学后反思
利用VBA和Python均可以实现表格内容提取的功能但是对于文字和表格的样式无法完整提取。后期会进一步探索如何把表格内容和样式完整拷贝出来但是由于涉及字体等特殊格式提取样式会有一定的难度。上面两种方法的优势在于可以批量、高效地提取表格内容但是无法提取样式因此在提取复杂表格时可能会报错。以上代码默认是把表格批量提取到当前目录VBA代码应用的是当前的word文件而python则要求提取的文件名为example.docx如果想批量提取多个文件中的表格则还需要添加for循环来遍历所有的word文件。