java读取excel表格_Excel 搞不定 PDF?让Word来做二传手!——VBA读取PDF表格的“旁门”技巧...

e4c2cae6bcb7addb1b64785223260173.png

在《全民一起VBA 实战篇》中,我们讲到过怎样使用 Acrobat 官方控件,在VBA程序里显示和浏览 PDF 文件。

cf5d21afbcd4954d94308a12ebf8af64.png

不过仅仅浏览PDF还不能满足需要,因为随着 PDF 文件应用越来越广泛,把 PDF 中的表格读取到Excel现在也已经成为我们最常见的任务。事实上,Acrobat的官方控件本身就支持 PDF 内容读取,而且毫无疑问,其解读能力是最权威、最准确的。但遗憾的是,只有安装了价格昂贵的专业版Acrobat后,才能使用这个控件。

0311544957ee475a0d18db04d38c1473.png

那么我们这些穷人该怎么办呢?如果不敢用盗版,最好的选择当然是 ——

8fe3a84fb6ff370218e544358b0a3268.png

不过远水不解近渴,何况我们要在《全民一起玩Python 实战篇》中才详细介绍PDF处理。所以今天教各位 VBA 学友一个“旁门技巧”—— 用 Word 做二传手!

众所周知:从Word2013版开始,Word就可以直接打开PDF文件、转换成Word格式。而我们在《全民一起VBA 提高篇》中又讲过,Excel VBA 中可以创建Word应用、并控制它去打开文件,所以一条线索就非常清晰了:

  1. 在Excel中编写VBA程序
  2. 在程序中创建Word对象
  3. 让Word对象读取PDF文件
  4. 让Word对象把读到的内容复制一下
  5. 让Excel单元表对象执行粘贴操作

看起来顺理成章,于是现在就可以做个试验。

首先,找一个PDF表格文件。这里为了演示方便,我们的文件内容很简单,就是一行标题加一个表格:

bb16d48e4840c65d0876a84bcd11b7c2.png

然后,我们在Excel中新建一个模块,并用下面的代码打开和操作Word对象。

88dee7a3d754707253cba56de7d8248e.png

上面代码并不复杂,完全都是《全民一起VBA 提高篇》第34回“Office软件互相调用,VBA技术处处开花” 中介绍过的内容,只不过打开的不是Word文件而是PDF而已。那么实际执行会怎样呢?如果没有系统配置方面的问题,稍等片刻就会看到 d:/vbademo/pdf/1.pdf 这个文件的第一行文字被顺利写入B2单元格:

8d2e2bc8e96ba503f23ae9f2367843ae.png

不过这里需要说明一点:读取转换PDF涉及很多系统环节,所以难免会发生一些异常错误。假如我们的程序在运行中,因为异常而导致没有执行最后的关闭Word操作,那么被打开的PDF文件可能就无法及时释放,使得下一次再运行程序读取PDF时,发生程序死锁等问题。所以这里我们加一个简单的错误处理语句,希望在发生错误时也能正常关闭Word程序。

28d881c3ab39afc4a387e74f75f4751e.png

初战告捷,再接再厉,接下来就看看能否把里面的表格也搞定!在《全民一起VBA 实战篇》专题七第一回 “Word操作也能编程优化,Table对象可查所有表格” 中 ,我们介绍了怎样使用Word的Table对象处理表格,所以下面的代码大家应该看着比较熟悉:

c3ef2646765b1cc8a4a4be9da0d7ee2c.png

详细过程看看注释应该可以理解,那么效果怎样呢?执行一下,果然不错:

67082c758501c65801c4eea6e610356b.png

到这里,基本技术点都已清晰。把这个代码套上循环判断、以及我们早已熟悉的各种VBA文件表格处理套路,就能够完成各种批量处理技术。比如:假设我的文件夹中有多个格式相同的PDF文件,都是上面这种 “标题 + 一张表格” 的模式:

413e1a13fa1c21c53a9b9670512f6229.png

那么使用下面的代码,就可以自动读取所有这几个pdf,并在Excel中给每个pdf创建一张工作表、表名就是该pdf第一段的标题;同时在每张表的B2单元格处复制pdf里面的表格。(为了简化演示,这里假设pdf文件名都是顺序数字,从而不必使用 dir 函数或 fso 对象)

4e654e43e21ce9685c5bf8014bc06b7f.png

点击运行,静等片刻,三张可爱的工作表就在那里(第I列显示#,是因为截图时忘了调整列宽,加大列宽即可看到数字):

86b6772681b0313759e342869657edff.png

总结一下,其实这个技巧就是在没有专业控件的情况下,把Word当成了一个“PDF读取控件”。虽然效果不一定有Acrobat自家控件那么完美,但毕竟微软的产品也不是盖的。所以虽然本方法是“旁门”技巧,但如果用熟(特别是各种异常错误的处理),解决起实际问题还是很给力的。

所以还是那句话:动脑筋综合运用我们学过的各种小技巧,组合在一起往往就能解决大问题!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值