ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求各位大侠帮帮我,如何实现从Word中批量提取数据到Excel中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-7-27 11:38 | 显示全部楼层
首先,打开党员信息的word文件,alt+F11━→粘贴代码进去:
  1. Sub sbc()
  2.     Dim arr, cx As Object
  3.     Dim ex As Object
  4.     Set ex = GetObject(, "Excel.application")
  5.     Set cx = ex.workbooks("dyxxhzb.xls").sheets(1) ’Excel文件名。必须一致
  6.     Set re = CreateObject("vbscript.regexp")
  7.     re.Global = 1
  8.     re.Pattern = "姓名[:\s]*(\S+).+?性别[:\s]*(\S+).+?民" & _
  9.         "族[:\s]*(\S+).+?公民身份证号[:\s]*(\S+).+?出生日期" _
  10.         & "[:\s]*(\S+).+?学历(参照《学历代码》填写相应代码)" & _
  11.         "[:\s]*(\S+).+?人员类别[:\s]*(\S+).+?所在党支部(填写全称)" _
  12.         & "[:\s]*(\S+).+?加入党组织日期[:\s]*(\S+).+?转为正式党员日期" & _
  13.         "[:\s]*(\S+).+?工作岗位(参照《工作岗位代码》填写相应代码)" & _
  14.         "[:\s]*(\S+).+?联系电话(手机号)[:\s]*(\d+).+?(固定电话)" & _
  15.         "[:\s]*(\d+).+?家庭住址(具体到门牌号)[:\s]*(\S+).+?党籍状态" & _
  16.         "[:\s]*(\S+).+?是否为失联党员[:\s]*(\S+).+?失去联系日期[:\s]*?(\S+)是否为流动党员(由流出地党组织负责采集)" & _
  17.         "[:\s]*(\S+).+?外出流向:(.*?)\r"
  18.     Set Ma = re.Execute(ActiveDocument.Range.Text)
  19.     i = 4
  20.     For Each g In Ma
  21.         i = i + 1
  22.         j = 1
  23.         For Each sb In g.submatches
  24.             j = j + 1
  25.             cx.Cells(i, j) = sb
  26.         Next
  27.     Next
  28. End Sub
复制代码
然后打开Excel文件,将你的excel解除保护(你懂的),运行以上代码。
最后将不对应的列手动调整下即可。

360截图20170727113646713.jpg

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-7-27 19:11 | 显示全部楼层
论坛里有从word 提数据到excel,不过那个是从word表格中提取,楼主这种情况没有到过。

TA的精华主题

TA的得分主题

发表于 2017-7-27 19:13 | 显示全部楼层
zhanglei1371 发表于 2017-7-27 11:38
首先,打开党员信息的word文件,alt+F11━→粘贴代码进去:
然后打开Excel文件,将你的excel解除保护(你 ...

正则表达式,值得学习。

TA的精华主题

TA的得分主题

发表于 2017-7-27 23:08 | 显示全部楼层
Sub sbc()
      .........  
       xb = cx.Cells(i, 3)
        mz = cx.Cells(i, 4)
        rq = cx.Cells(i, 6)
        xl = cx.Cells(i, 7)
        lb = cx.Cells(i, 8)
        cx.Cells(i, 3) = cx.Cells(i, 9)
        cx.Cells(i, 4) = cx.Cells(i, 5)
        cx.Cells(i, 5) = xb
        cx.Cells(i, 6) = mz
        cx.Cells(i, 7) = rq
        cx.Cells(i, 8) = xl
        cx.Cells(i, 9) = lb
        ........
    Next


TA的精华主题

TA的得分主题

发表于 2017-7-27 23:18 | 显示全部楼层
见截图,无需手动调整。。。
123.png

TA的精华主题

TA的得分主题

发表于 2017-7-27 23:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-28 08:27 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jiaxinl 于 2017-7-28 08:37 编辑

不知道大家有没有发现   失去联系日期 后面不管有没有数据  提取到的都是 "16."正则表达式入门与提高---VBA平台的正则学习参考资料
http://club.excelhome.net/forum.php?mod=viewthread&tid=1128647&extra=&mobile=2

Sub s()

Dim arr, cx As Object
Dim ex As Object
Set ex = GetObject(, "Excel.application")
Set cx = ex.workbooks("dyxxhzb.xls").sheets(1) 'Excel
Set re = CreateObject("vbscript.regexp")
re.Global = 1
re.Pattern = "姓名[:\\s]*(\\S+).+?性别[:\\s]*(\\S+).+?民族[:\\s]*(\\S+).+?公民身份证号[:\\s]*(\\S+).+?出生日期" & _
"[:\\s]*(\\S+).+?学历(参照《学历代码》填写相应代码)[:\\s]*(\\S+).+?人员类别[:\\s]*(\\S+).+?所在党支部(填写全称)" & _
"[:\\s]*(\\S+).+?加入党组织日期[:\\s]*(\\S+).+?转为正式党员日期" & _
"[:\\s]*(\\S+).+?工作岗位(参照《工作岗位代码》填写相应代码)" & _
"[:\\s]*(\\S+).+?联系电话(手机号)[:\\s]*(\\d+).+?(固定电话)" & _
"[:\\s]*(\\d+).+?家庭住址(具体到门牌号)[:\\s]*(\\S+).+?党籍状态" & _
"[:\\s]*(\\S+).+?是否为失联党员[:\\s]*(\\S+).+?失去联系日期[:\\s]*?(\\S+)是否为流动党员(由流出地党组织负责采集)" & _
"[:\\s]*(\\S+).+?外出流向:(.*?)\\r"

Set Ma = re.Execute(ActiveDocument.Range.Text)
  i = 4
For Each g In Ma
  i = i + 1
  j = 1
cx.Cells(i, j) = i - 4   '填写序号列
  For Each sb In g.submatches
    j = j + 1
    '调整栏位顺序
    If j = 3 Then
      cx.Cells(i, j + 2) = sb
    ElseIf j = 4 Then
      cx.Cells(i, j + 2) = sb
    ElseIf j = 5 Then
      cx.Cells(i, j - 1) = sb
    ElseIf j = 6 Then
      cx.Cells(i, j + 1) = sb
    ElseIf j = 7 Then
      cx.Cells(i, j + 1) = sb
    ElseIf j = 8 Then
      cx.Cells(i, j + 1) = sb
    ElseIf j = 9 Then
      cx.Cells(i, j - 6) = sb
    ElseIf sb = "16." Then
      cx.Cells(i, j) = ""
    Else
      cx.Cells(i, j) = sb
    End If
  Next sb
Next g
End Sub


TA的精华主题

TA的得分主题

发表于 2017-7-28 09:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-28 09:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢zhanglei1371分享,学习了

TA的精华主题

TA的得分主题

发表于 2017-7-28 09:53 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 15:22 , Processed in 0.036196 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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