ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 27095|回复: 29

[求助] 如何从多个WORD文件中提取相应的文字和数值到EXCEL里

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-1-1 22:04 | 显示全部楼层 |阅读模式
WORD文件是一个报告单,里面有姓名和检验结果的数值,我想问一下达人,如何把多个文件中的姓名和数值用什么方法能放在EXCL里面,以便于统计分析。如果能把姓名相同的放在一起那就更好啦,因为文件较多,所以不能一个一个打开去复制,先谢谢大家了

TA的精华主题

TA的得分主题

发表于 2012-1-1 23:06 | 显示全部楼层
不知道,同等中。。。

TA的精华主题

TA的得分主题

发表于 2012-1-1 23:53 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-2 21:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2012-1-1 23:53
语焉不详,无所适从,没有附件,无从下手

SZ-HIV-11-321.zip (6.75 KB, 下载次数: 957)

就是从类似N个这样格式的文件中,提取出姓名和CD4 CD3 CD8的检测结果 导入EXCEL里 以便于分析其疾病感染状态

TA的精华主题

TA的得分主题

发表于 2012-1-3 11:04 | 显示全部楼层
可试试如下代码。至于同姓名放在一起的问题,可在Excel中自行排序
  1. Sub test()
  2.     '程序在活动Excel文档运行
  3.     Dim WdApp As Object, myDoc As Object
  4.     Dim TF As Boolean, i As Integer, r As Long
  5.     Dim aTable As Object, a(10), n As Integer
  6.     On Error Resume Next
  7.     With Application.FileDialog(msoFileDialogFilePicker)
  8.         .Title = "请选定要处理的Word文档"
  9.         .Filters.Add "Word文档", "*.doc"  '暂定扩展名为doc的Word文档
  10.         .AllowMultiSelect = True
  11.         If .Show <> -1 Then Exit Sub
  12.         Set WdApp = GetObject(, "Word.Application")
  13.         If Err <> 0 Then
  14.             TF = True
  15.             Set WdApp = CreateObject("Word.Application")
  16.         End If
  17.         'WdApp.Visible = True
  18.         r = ActiveSheet.Range("a65536").End(xlUp).Row
  19.         ActiveSheet.Range("A:A").NumberFormatLocal = "@"  '设置第一列(编号)的数字格式
  20.         Application.ScreenUpdating = False
  21.         For i = 1 To .SelectedItems.Count
  22.             Set myDoc = WdApp.Documents.Open(.SelectedItems(i))
  23.             For Each aTable In myDoc.Tables
  24.                 With aTable  '暂提取10个相关数据
  25.                     If .Range.Cells.Count = 37 Then  '以单元格数为依据对表格进行简单识别
  26.                         a(0) = .Range.Previous(Unit:=4).Text
  27.                         a(0) = Mid(a(0), 4, Len(a(0)) - 4)  '编号
  28.                         a(1) = Replace(.Cell(8, 2).Range.Text, Chr(13) & Chr(7), "") '姓名
  29.                         a(2) = Replace(.Cell(8, 4).Range.Text, Chr(13) & Chr(7), "")
  30.                         a(3) = Replace(.Cell(8, 6).Range.Text, Chr(13) & Chr(7), "")
  31.                         a(4) = Replace(.Cell(9, 2).Range.Text, Chr(13) & Chr(7), "")  '民族
  32.                         a(5) = Replace(.Cell(9, 4).Range.Text, Chr(13) & Chr(7), "")
  33.                         a(6) = Replace(.Cell(9, 6).Range.Text, Chr(13) & Chr(7), "")
  34.                         a(7) = Replace(.Cell(10, 2).Range.Text, Chr(13) & Chr(7), "") '地址
  35.                         a(8) = Replace(.Cell(14, 1).Range.Text, Chr(13) & Chr(7), "") 'CD4
  36.                         a(9) = Replace(.Cell(14, 2).Range.Text, Chr(13) & Chr(7), "")
  37.                         a(10) = Replace(.Cell(14, 3).Range.Text, Chr(13) & Chr(7), "")
  38.                         Range(Cells(r + i, 1), Cells(r + i, 11)).Value = a
  39.                         n = n + 1
  40.                     End If
  41.                 End With
  42.             Next
  43.             myDoc.Close False
  44.         Next i
  45.     End With
  46.     If TF = True Then WdApp.Quit
  47.     Set WdApp = Nothing
  48.     MsgBox "提取完毕!共提取了" & n & "个Word文档。"
  49.     Application.ScreenUpdating = True
  50. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-1-3 11:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sylun 发表于 2012-1-3 11:04
可试试如下代码。至于同姓名放在一起的问题,可在Excel中自行排序

你好,我想问一下这个宏里面如果要提取其他表格样式里面的数据,我需要从那部分入手修改这段宏

TA的精华主题

TA的得分主题

发表于 2012-1-3 11:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
木人无心 发表于 2012-1-3 11:19
你好,我想问一下这个宏里面如果要提取其他表格样式里面的数据,我需要从那部分入手修改这段宏

5楼代码中涉及表格中内容信息提取的是For each aTable ... Next这部分,是先将文档中各表格中的10个指定单元格内容(a(0)为表格前一段落的部分内容)导入数组a,然后将数组数据写入excel工作表。其中的各行代码的意思有哪行你是不清楚的?

TA的精华主题

TA的得分主题

发表于 2012-1-15 18:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jrtzxjh 于 2012-1-20 15:07 编辑
sylun 发表于 2012-1-3 11:04
可试试如下代码。至于同姓名放在一起的问题,可在Excel中自行排序


看论坛里这么多代码,就这个写的好,运行了一下真的不错
这个写的真好,能帮忙替我写一个吗,我是一个门外汉,还请多多帮忙哈

TA的精华主题

TA的得分主题

发表于 2012-1-19 13:07 | 显示全部楼层
本帖最后由 sylun 于 2012-1-19 13:07 编辑
jrtzxjh 发表于 2012-1-15 18:51
看论坛里这么多代码,就这个写的好,运行了一下真的不错
这个写的真好,能帮忙替我写一个吗,我是一个 ...


对代码大概修改了一下,注释可看前面的代码,只是单元格地址的表示方法不同(前者用cell方法,后者用cells属性)。代码如下:
  1. Sub test2()
  2.     '程序在活动Excel文档运行
  3.     Dim WdApp As Object, myDoc As Object
  4.     Dim TF As Boolean, i As Integer, r As Long
  5.     Dim aTable As Object, a(15)
  6.     Dim c As Byte, n As Integer
  7.     On Error Resume Next
  8.     With Application.FileDialog(msoFileDialogFilePicker)
  9.         .Title = "请选定要处理的Word文档"
  10.         .Filters.Add "Word文档", "*.doc"  '暂定扩展名为doc的Word文档
  11.         .AllowMultiSelect = True
  12.         If .Show <> -1 Then Exit Sub
  13.         Set WdApp = GetObject(, "Word.Application")
  14.         If Err <> 0 Then
  15.             TF = True
  16.             Set WdApp = CreateObject("Word.Application")
  17.         End If
  18.         'WdApp.Visible = True
  19.         r = ActiveSheet.Range("a65536").End(xlUp).Row
  20.         Application.ScreenUpdating = False
  21.         For i = 1 To .SelectedItems.Count
  22.             Set myDoc = WdApp.Documents.Open(.SelectedItems(i))
  23.             For Each aTable In myDoc.Tables
  24.                 With aTable.Range  '共提取16个相关数据
  25.                     If .Cells(1).Range.Text Like "姓名:*" Then '以第1个单元格内容为依据对表格进行简单识别
  26.                         For c = 0 To 3
  27.                             a(c) = Replace(.Cells(c * 2 + 2).Range.Text, Chr(13) & Chr(7), "")
  28.                         Next
  29.                         For c = 4 To 15
  30.                             a(c) = Replace(.Cells(c * 2 + 11).Range.Text, Chr(13) & Chr(7), "")
  31.                         Next
  32.                         Range(Cells(r + i, 1), Cells(r + i, 16)).Value = a
  33.                         n = n + 1
  34.                     End If
  35.                 End With
  36.             Next
  37.             myDoc.Close False
  38.         Next i
  39.     End With
  40.     If TF = True Then WdApp.Quit
  41.     Set WdApp = Nothing
  42.     MsgBox "提取完毕!共提取了" & n & "个Word文档。"
  43.     Application.ScreenUpdating = True
  44. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-1-19 20:16 | 显示全部楼层
{:soso_e134:}菜鸟,越看越迷糊,只能路过,不晓得死不是要发帖攒分,才能开主题
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 10:38 , Processed in 0.049645 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表