当前位置: 首页 > article >正文

Excel+VBA实现PDF批量提取文本:5分钟搞定办公自动化

ExcelVBA实现PDF批量提取文本5分钟搞定办公自动化在财务对账、合同归档、报表分析等日常办公场景中处理大量PDF文件是许多职场人士的痛点。手动复制粘贴不仅效率低下还容易出错。本文将介绍如何利用Excel自带的VBA功能快速搭建一个自动化文本提取工具让非技术人员也能轻松实现批量处理。1. 环境准备与基础配置1.1 必备软件检查在开始之前请确保您的电脑已安装以下软件Microsoft Excel2013及以上版本Adobe Acrobat Reader DC完整版非精简版注意必须安装完整版Acrobat Reader而非仅浏览器插件因为VBA需要通过其提供的COM接口进行交互。1.2 启用Excel开发者选项打开Excel点击文件→选项选择自定义功能区在右侧勾选开发工具复选框点击确定保存设置此时Excel功能区将出现开发工具选项卡这是后续操作的基础入口。2. VBA核心代码解析2.1 基础代码框架以下是一个完整的PDF文本提取模块可直接复制到VBA编辑器中Sub ExtractPDFText() Dim pdfApp As Object, pdfDoc As Object Dim txtData As String, filePath As String Dim outputFolder As String, outputFileName As String 初始化Acrobat对象 Set pdfApp CreateObject(AcroExch.App) pdfApp.Show 设置工作路径实际使用时需修改 filePath ThisWorkbook.Path \pdf_files\ outputFolder ThisWorkbook.Path \output\ 自动创建输出目录 If Dir(outputFolder, vbDirectory) Then MkDir outputFolder 获取目录下第一个PDF文件 filePath filePath Dir(filePath *.pdf) 批量处理循环 While filePath Set pdfDoc CreateObject(AcroExch.PDDoc) If pdfDoc.Open(filePath) Then ProcessPDF pdfDoc, outputFolder, filePath End If filePath Dir() 获取下一个文件 Wend 清理对象 pdfApp.Exit Set pdfApp Nothing MsgBox 文本提取完成, vbInformation End Sub2.2 关键功能分解代码中的核心功能模块文件遍历机制使用Dir()函数实现文件夹内PDF文件的自动检索While...Wend循环确保处理所有匹配文件文本提取逻辑Function ProcessPDF(pdfDoc As Object, outputPath As String, srcPath As String) Dim pdfPage As Object, pageText As String Dim pageNum As Integer, fileName As String fileName Replace(Mid(srcPath, InStrRev(srcPath, \) 1), .pdf, ) For pageNum 0 To pdfDoc.GetNumPages() - 1 Set pdfPage pdfDoc.AcquirePage(pageNum) pageText pdfPage.GetText() SaveTextToFile pageText, outputPath fileName _p pageNum 1 .txt pdfDoc.ReleasePage(pdfPage) Next End Function文本保存方法Sub SaveTextToFile(textData As String, filePath As String) Dim fileNum As Integer fileNum FreeFile() Open filePath For Output As #fileNum Print #fileNum, textData Close #fileNum End Sub3. 实战优化技巧3.1 路径智能设置方案为避免每次修改代码路径推荐使用以下动态获取方式 获取当前工作簿所在目录 basePath ThisWorkbook.Path 设置子文件夹路径 pdfPath basePath \source_pdf\ outputPath basePath \extracted_text\3.2 性能提升关键点处理大量PDF时这些优化可显著提高效率延迟屏幕更新Application.ScreenUpdating False 执行提取操作... Application.ScreenUpdating True错误处理机制On Error Resume Next Set pdfDoc CreateObject(AcroExch.PDDoc) If Err.Number 0 Then MsgBox Acrobat组件加载失败请检查安装, vbCritical Exit Sub End If On Error GoTo 03.3 结果自动整理方案将提取的文本直接存入Excel工作表Sub SaveToSheet(textData As String) Dim ws As Worksheet Set ws Worksheets.Add ws.Range(A1).Value 文件名 ws.Range(B1).Value 页码 ws.Range(C1).Value 内容 With ws .Cells(lastRow 1, 1).Value fileName .Cells(lastRow 1, 2).Value pageNum .Cells(lastRow 1, 3).Value textData End With End Sub4. 常见问题解决方案4.1 错误代码对照表错误现象可能原因解决方案运行时错误429Acrobat未正确安装重新安装完整版Acrobat Reader DC提取内容乱码PDF使用特殊编码在GetText前添加pdfPage.SetTextCharset(1)仅提取部分文本PDF为扫描件使用OCR软件先转换PDF4.2 特殊格式处理技巧表格数据提取 在GetText后添加格式处理 textData Replace(textData, Chr(9), ,) 制表符转逗号保留原始换行textData Replace(textData, vbCrLf, [换行符])4.3 自动化扩展思路定时自动执行Application.OnTime Now TimeValue(17:00:00), ExtractPDFText邮件自动发送Dim outlookApp As Object Set outlookApp CreateObject(Outlook.Application) 创建邮件并添加附件...与Power Query整合ThisWorkbook.Connections.AddFromFile outputFolder combined.txt5. 进阶应用场景5.1 合同关键信息提取通过正则表达式匹配特定内容Function ExtractContractNo(text As String) As String Dim regex As Object Set regex CreateObject(VBScript.RegExp) With regex .Pattern 合同编号[:]\s*([A-Z0-9-]) .Global False .IgnoreCase True End With If regex.Test(text) Then ExtractContractNo regex.Execute(text)(0).SubMatches(0) End If End Function5.2 财务报表数据清洗典型的数据处理流程数值提取 匹配货币金额 regex.Pattern ([0-9,]\.\d{2})数据校验If Not IsNumeric(extractedValue) Then LogError 数值格式异常, fileName End If自动汇总Worksheets(汇总).Cells(1, 1).Value SUM(Sheet1!C2:C100)5.3 多语言文档处理针对不同语言编码的设置 中文编码 pdfPage.SetTextCharset GB18030 日文编码 pdfPage.SetTextCharset Shift_JIS 西文编码 pdfPage.SetTextCharset Windows-1252在实际项目中这套方案帮助某贸易公司实现了每周300份报关单的自动处理节省了约15小时/周的人工操作时间。关键是要根据具体需求调整文本处理逻辑比如添加特定的关键词过滤或格式转换规则。

相关文章:

Excel+VBA实现PDF批量提取文本:5分钟搞定办公自动化

ExcelVBA实现PDF批量提取文本:5分钟搞定办公自动化 在财务对账、合同归档、报表分析等日常办公场景中,处理大量PDF文件是许多职场人士的痛点。手动复制粘贴不仅效率低下,还容易出错。本文将介绍如何利用Excel自带的VBA功能,快速搭…...

LCM模组制造全解析:从TFT到背光系统的技术整合

1. LCM模组制造的核心技术解析 第一次拆解液晶模组时,我盯着那些比纸还薄的膜层直发愣——这堆看似塑料片的玩意儿居然能显示4K视频?后来在产线蹲了三个月才明白,LCM(液晶显示模组)制造堪称现代工业的微缩景观。今天我…...

Mindie服务化推理实战:关键参数调优与性能优化指南

1. Mindie服务化推理的核心参数解析 第一次接触Mindie服务化推理时,我被各种环境变量和配置参数搞得晕头转向。经过半年多的实战调优,我发现理解这些参数就像掌握汽车的油门和刹车——用对了能让模型推理飞驰,用错了随时可能"翻车"…...

游戏开发必备技能:2D坐标系中角色移动的三角函数原理(Unity/Cocos案例)

游戏开发必备技能:2D坐标系中角色移动的三角函数原理(Unity/Cocos案例) 在2D游戏开发中,角色的移动逻辑往往需要依赖数学计算来实现精确控制。无论是实现一个简单的圆周运动,还是设计复杂的弹道系统,三角函…...

Star CCM+旋风分离器后处理实战:从压力分布到流线绘制的完整流程

Star CCM旋风分离器后处理实战:从压力分布到流线绘制的完整流程 在计算流体力学(CFD)领域,旋风分离器的模拟分析一直是工业应用中的重点课题。作为一款功能强大的CFD软件,Star CCM提供了完整的仿真解决方案&#xff0c…...

Vue2中利用$attrs和$listeners实现el-input的高效二次封装

1. 为什么需要二次封装el-input组件 在实际的Vue2项目开发中,我们经常会遇到需要对Element UI的el-input组件进行二次封装的情况。这通常出于以下几个原因: 首先,项目往往有统一的设计规范。比如所有输入框都需要有特定的边框样式、圆角大小或…...

Boost库编译避坑指南:从下载到测试的完整流程(VS2013实战)

Boost库编译避坑指南:从下载到测试的完整流程(VS2013实战) Boost库作为C开发者必备的工具集,其强大的功能与跨平台特性使其在项目开发中占据重要地位。然而,对于初次接触Boost的开发者而言,编译过程往往充…...

避坑指南:为什么MATLAB的geotiffread无法识别你手动修改的TIF文件?从底层解析TIFF格式差异

深度解析:MATLAB处理手动修改TIF文件失败的底层机制与解决方案 1. TIFF与GeoTIFF格式的本质差异 许多开发者在使用MATLAB处理遥感或地理空间数据时,常常会遇到一个令人困惑的问题:为什么通过专业GIS软件(如ENVI、ArcMap&#xff0…...

Simulink模型连线太乱?试试这3个隐藏功能,一键自动整理清爽又高效

Simulink模型整洁度提升实战:3个被低估的高效功能详解 当你打开一个布满蜘蛛网般连线的Simulink模型时,是否曾感到一阵眩晕?那些交错缠绕的信号线、随意堆放的模块和难以追踪的数据流向,不仅影响视觉体验,更会显著降低…...

AUKF算法在DSP28335上的实现与CCS6编译之旅

AUKF/自适应无迹卡尔曼滤波算法C代码,CCS6软件编译,微控为DSP28335,可下载运行。最近在研究滤波算法,其中自适应无迹卡尔曼滤波(AUKF)算法特别吸引我,于是决定在DSP28335微控上用C代码实现它&am…...

Harmonyos应用实例162:二次函数图象变换实验室

应用实例二:二次函数图象变换实验室 知识点:第二十二章《二次函数》—— 图象与性质。 功能:通过滑块控制参数 a,h,ka, h, ka,h,k,实时绘制 y=a(x−h)2+ky=a(x-h)^2+k...

Harmonyos应用实例161:一元二次方程求根公式推导器

应用实例一:一元二次方程求根公式推导器 知识点:第二十一章《一元二次方程》—— 配方法与公式法。 功能:学生输入方程 ax2+bx+c=0ax^2+bx+c=0ax2<...

Harmonyos应用实例160:数据分析与决策

应用实例十:数据分析与决策 知识点:第二十章《数据的分析》—— 用样本估计总体。 功能:模拟“鱼塘捕鱼”问题。学生先捕捞一部分鱼做标记放回,再随机捕捞抽样,输入抽样中有标记的鱼的数量,应用估算鱼塘总数,体验样本估计总体的统计思想。 @Entry @Component struct …...

安卓逆向实战:用Node.js一键清理混淆dex中的Unicode垃圾代码(附完整工具链)

安卓逆向工程中的Unicode混淆清理实战&#xff1a;基于Node.js的高效自动化方案 在移动安全研究领域&#xff0c;安卓应用的逆向分析是获取关键信息的重要手段。然而&#xff0c;开发者常采用各种混淆技术增加分析难度&#xff0c;其中Unicode组合符号和无效方法调用是最常见的…...

我的世界皮肤格式转换神器SkinConvertingSheep使用指南(附下载链接)

我的世界皮肤格式转换神器SkinConvertingSheep使用指南 在《我的世界》的丰富自定义生态中&#xff0c;皮肤作为玩家个性化表达的重要载体&#xff0c;其格式兼容性问题常常困扰着创作者和普通玩家。当你在PCL2启动器中尝试应用心仪的皮肤时&#xff0c;突然弹出的"请使用…...

AMD FSR 1.0源码实战:手把手教你实现边缘自适应升频(附完整代码解析)

AMD FSR 1.0源码实战&#xff1a;手把手教你实现边缘自适应升频&#xff08;附完整代码解析&#xff09; 在游戏开发领域&#xff0c;实时渲染的性能与画质始终是一对难以调和的矛盾。AMD开源的FidelityFX Super Resolution&#xff08;FSR&#xff09;技术为解决这一矛盾提供了…...

GWAS新手必看:从PLINK到GEMMA的完整分析流程(附代码)

GWAS实战指南&#xff1a;从数据质控到结果解读的全流程解析 对于刚接触全基因组关联分析&#xff08;GWAS&#xff09;的生物信息学研究者来说&#xff0c;如何从海量的基因型数据中挖掘出有意义的遗传关联是个不小的挑战。本文将带你系统掌握GWAS分析的核心流程&#xff0c;重…...

从单机到分布式:MySQL与GaussDB架构差异详解(附性能测试数据)

从单机到分布式&#xff1a;MySQL与GaussDB架构差异详解&#xff08;附性能测试数据&#xff09; 在数据库技术快速迭代的今天&#xff0c;架构设计的选择往往决定了系统未来的扩展边界。当业务从初创期的小流量发展到百万级并发时&#xff0c;单机数据库的瓶颈会突然暴露——连…...

手机也能做PCB设计?这款Droid PCB APP让你随时随地搞定电路板布局

手机也能做PCB设计&#xff1f;Droid PCB APP重新定义移动办公的电子工程师效率 作为一名经常需要现场调试电路的电子工程师&#xff0c;我曾在高铁站、咖啡厅甚至机场候机室里无数次打开笔记本电脑&#xff0c;只为修改一个简单的PCB走线。直到发现Droid PCB这款移动端设计工具…...

嵌入式内存管理“潜规则”:从.data/.bss段搬运,看ld脚本如何影响启动速度和功耗

嵌入式内存管理的性能优化艺术&#xff1a;从.data/.bss段搬运到ld脚本的实战精要 在资源受限的嵌入式系统中&#xff0c;每一个字节的内存和每一微秒的启动时间都弥足珍贵。当我们谈论物联网设备或电池供电产品的开发时&#xff0c;内存管理不再是简单的变量声明与使用&#x…...

【银河麒麟高级服务器操作系统】安全配置基线实战:从问题定位到参数调优的深度解析

1. 问题定位&#xff1a;当安全基线配置突然失效时 第一次在银河麒麟V10 SP1系统上执行安全加固时&#xff0c;我盯着终端反复确认了三次——明明按照标准文档配置了groupwheel参数&#xff0c;为什么普通用户还是能随意切换到root&#xff1f;这个发现让我后背发凉&#xff0c…...

Win10蓝屏CRITICAL_PROCESS_DIED:从错误诊断到系统修复全流程解析

1. 当Win10突然蓝屏&#xff1a;CRITICAL_PROCESS_DIED意味着什么&#xff1f; 电脑用得好好的&#xff0c;突然屏幕一蓝&#xff0c;跳出一行"CRITICAL_PROCESS_DIED"的白字——这大概是每个Windows用户最不想看到的画面之一。这个错误直译为"关键进程死亡&quo…...

Windows11+WSL2+Ubuntu22.04环境下,5分钟搞定Qemu虚拟VExpress-A9开发板环境配置

Windows 11 WSL2 Ubuntu 22.04 极速搭建 QEMU 虚拟开发环境指南 对于嵌入式开发者而言&#xff0c;拥有一套随时可用的开发环境至关重要。本文将带你快速在 Windows 11 系统上&#xff0c;通过 WSL2 和 Ubuntu 22.04 搭建完整的 QEMU 虚拟开发环境&#xff0c;无需实体开发板…...

FT8430-LRT非隔离5V100MA电源芯片:小家电、智能照明与MCU供电的高效解决方案(附典型电路图)

1. FT8430-LRT芯片&#xff1a;小功率设备的"能量心脏" 当你拆开一个智能灯泡或者电动牙刷&#xff0c;总会发现一块小小的电路板&#xff0c;上面密密麻麻的元件中藏着一个不起眼但至关重要的部件——电源管理芯片。FT8430-LRT就是这样一款专为小功率设备设计的非隔…...

【Redis】Redis常用命令速查表(完整版)

文章目录Redis常用命令速查表一、基础核心类型常用命令二、其他类型常用命令Redis 常用命令-具体命令行使用示例一、基础核心类型常用命令示例二、其他类型常用命令示例Redis常用命令速查表 一、基础核心类型常用命令 数据类型命令核心作用StringSET设置key-value对&#xff0…...

OpenMVS在文化遗产保护中的应用:如何用多视图立体视觉重建敦煌壁画

OpenMVS在文化遗产保护中的应用&#xff1a;如何用多视图立体视觉重建敦煌壁画 敦煌莫高窟的壁画艺术是人类文明的瑰宝&#xff0c;但时间的流逝和自然环境的侵蚀让这些珍贵文物面临不可逆的损伤。如何用数字技术将这些文化遗产永久保存下来&#xff1f;OpenMVS作为工业级多视图…...

FileZilla FTP服务器搭建全攻略:从安装到被动模式配置(附防火墙设置)

FileZilla FTP服务器搭建全攻略&#xff1a;从安装到被动模式配置&#xff08;附防火墙设置&#xff09; 在企业内部文件共享或远程协作场景中&#xff0c;FTP&#xff08;文件传输协议&#xff09;仍然是跨平台文件传输的可靠选择。作为开源FTP解决方案的标杆&#xff0c;File…...

从HTTP到HTTPS:用OpenSSL自制证书实现gRPC双向认证(2024最新版)

2024实战指南&#xff1a;基于OpenSSL构建gRPC双向认证体系 在微服务架构盛行的今天&#xff0c;gRPC凭借其高性能、跨语言特性成为服务间通信的首选方案。但当涉及敏感数据传输时&#xff0c;仅依赖HTTP/2的默认加密远远不够——我们需要建立完整的证书信任链。本文将带您从零…...

Western blot (WB) 灰度分析进阶指南:ImageJ 自动化批处理技巧

1. 为什么需要自动化WB灰度分析&#xff1f; 做过Western blot的人都知道&#xff0c;手动分析十几张甚至几十张膜图像有多痛苦。每次都要重复"画框-测量-记录"的机械操作&#xff0c;不仅效率低下&#xff0c;还容易因为手抖选错区域。我实验室曾经有个博士生&#…...

SecureCRT密钥登录Linux服务器保姆级教程(含SFTP下载私钥全流程)

SecureCRT密钥登录Linux服务器全流程实战指南 对于需要频繁登录Linux服务器的运维人员和开发者来说&#xff0c;每次输入密码既低效又存在安全隐患。SecureCRT作为一款专业终端工具&#xff0c;配合SSH密钥验证可以实现安全高效的免密登录。本文将手把手带你完成从密钥生成到成…...