最近,有小伙伴跟我提了一个需求,小伙伴是做扶贫工作的,从扶贫系统里面可以批量的导出每一户的信息到一个word文档中,导出的内容是在word中是以表格的形式存在的。小伙伴的需求是如何批量的将每个word文档中的贫困户信息汇总到Excel表格中,生成一个汇总的表格,方便进行数据分析比对。为了模拟以上需求,本人设计了一个模拟的业务场景。Word文档中存储了每一位学生的考试成绩信息,模板如下:
每一位学生的成绩是一个word文档,文件以学生姓名命名,如下所示:
内容如下:
我们需要得到的结果是以下形式:
如何实现该业务逻辑呢?没错,VBA就是一个不错的选择。学过VBA的小伙伴都知道,在Excel VBA中我们可以直接打开word文档,然后在word文档中是以表格的形式存放数据,此时我们可以直接获取到表格对象,获取到表格对象以后就可以采用和Excel表格类似的办法取出单元格中的数据。下面就给大家介绍一下VBA代码的实现。
1.定义变量
定义wordapp为word应用程序对象,mydoc为word文档对象,mytab为word表格对象。代码如下:
Dim wordapp As Object, mytab As Object,mydoc as Object
定义字符串类型的变量dirpath用于存储需要合并的word文档所在文件夹的路径,myfile用于存储文件的名称。
Dim dirpath$, myfile$
2.创建word应用程序对象
通过创建对象的方式创建word应用程序对象,代码如下:
Set wordapp = CreateObject("word.application")
3.定义word文件存放路径
定义需要合并的word文档所在的路径,ThisWorkbook.Path获取到的是本Excel文件所在的路径。
dirpath = ThisWorkbook.Path & "/word/"
4.获取路径下word文档合集
通过Dir函数可以获取到指定文件夹下的所有文件。
myfile = Dir(dirpath & "*.docx")
5.清空汇总的Excel表中的内容
在开始新的合并之前,需要将Excel中指定区域的内容清空。
Range("a2:h10000").ClearContents
6.循环读取文件夹下文档
使用Do While循环语句循环读取文件夹的文件
Do While myfile ""
Loop
7.打开word文件
使用Open方法可以打开word文档。
Set mydoc = wordapp.Documents.Open(dirpath & myfile)
8.获取表格对象
Set mytab = mydoc.tables(1)
9.获取word表格中单元格内容,存储到excel
通过表格的cell方法(类似Excel中的cells的用法,注意这里没有s),读取单元格的内容,然后存储到Excel汇总表中。此时,在读取内容的过程中,最后会读取出一个特殊字符,此时我们可以自定义一个函数,将读取内容的最后一个字符去除。函数如下:
Function tt(rtext)
tt = Left(rtext, Len(rtext) - 1)
End Function
读取的代码如下:
Cells(i, 1) = tt(mytab.Cell(1, 2).Range.Text)
Cells(i, 2) = tt(mytab.Cell(1, 4).Range.Text)
Cells(i, 3) = tt(mytab.Cell(2, 2).Range.Text)
Cells(i, 4) = tt(mytab.Cell(3, 2).Range.Text)
Cells(i, 5) = tt(mytab.Cell(4, 2).Range.Text)
Cells(i, 6) = tt(mytab.Cell(4, 4).Range.Text)
Cells(i, 7) = tt(mytab.Cell(5, 2).Range.Text)
Cells(i, 8) = tt(mytab.Cell(5, 4).Range.Text)
10.读取完成后跳转到下一个文件
myfile = Dir
11.关闭文档
Word文档和word程序在所有操作完成后,需要进行关闭操作。
mydoc.Close False
wordapp.Quit
完整的代码如下:
您看此文用
·
秒,转发只需1秒呦~
领取专属 10元无门槛券
私享最新 技术干货
两个鬼故事猪宝宝适宜用字起名白狼御魂定中间字起名字生辰八字李性男孩起什么名字会计事务所起名大全灯箱门头lpk造梦江湖冰封王座地图编辑器战争机器3qq空间免费皮肤代码曼特宁咖啡姓惠起什么名字公司起名 有寓意血蛮谷姓少女起名字奢侈品店起名宝宝起名大全,在线起名2019年猪年宝起名大全起名网好没自动商标起名米线起名字大全集农氏男孩起名大全神界危机4.6下载免漆门十大品牌大学附近饭店起名水泥预制板辽宁卫视在线直播观看湖北卫视地址军少的小甜心少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了