ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 新手研究半天没研究出来,希望大神帮忙修改下代码从word中提取到Excel中

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 11:30 | 显示全部楼层
哪位大哥能给个解决思路么?我自己研究嘛……新手跨程序的有点弄不明白?谢谢

TA的精华主题

TA的得分主题

发表于 2018-8-9 12:33 | 显示全部楼层
给你一个思路

提取数据.rar

373.82 KB, 下载次数: 19

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-8-9 13:11 | 显示全部楼层
手工活,找学生成本低点,学习也是要成本的。

TA的精华主题

TA的得分主题

发表于 2018-8-9 14:07 | 显示全部楼层
仅基于你的附件做的,请自行测试其它的。
  1. Sub ReadFromWord()
  2.     Dim oWordApp As Object, oDoc As Object, txt$
  3.     Dim myPath$, MyName$, k%, findTxt$, Result
  4.     Dim arr, Num%, j%
  5.    
  6.     'On Error Resume Next
  7.     Range("A2:G2000").ClearContents
  8.     myPath = ThisWorkbook.Path & ""
  9.     MyName = Dir(myPath & "*.doc*")
  10.     Set oWordApp = CreateObject("Word.Application")

  11.     Set oDoc = GetObject(myPath & MyName)
  12.     txt = oDoc.Range.Text
  13.    
  14.     arr = Split(txt, "房屋安全鉴定报告")
  15.     Num = UBound(arr)
  16.     ReDim Result(1 To Num, 1 To 7)
  17.    
  18.     For i = 1 To Num
  19.         txt = arr(i)
  20.         
  21.         findTxt = RegxFind(txt, "鉴定编号:[^\u4e00-\u9fa5]*(\d+)", 0)
  22.         Result(i, 1) = Format(findTxt, "000")
  23.         
  24.         findTxt = Trim(RegxFind(txt, "房屋地址:([^鉴定]+)", 0))
  25.         Result(i, 2) = findTxt
  26.         
  27.         Result(i, 3) = oDoc.Tables(i * 2 - 1).Cell(1, 2).Range.Text
  28.         Result(i, 4) = oDoc.Tables(i * 2 - 1).Cell(3, 5).Range.Text
  29.         Result(i, 5) = oDoc.Tables(i * 2 - 1).Cell(7, 2).Range.Text
  30.         Result(i, 6) = oDoc.Tables(i * 2 - 1).Cell(9, 5).Range.Text
  31.         Result(i, 7) = oDoc.Tables(i * 2 - 1).Cell(16, 2).Range.Text
  32.         
  33.         For j = 3 To 7
  34.            Result(i, j) = Left(Result(i, j), Len(Result(i, j)) - 1)
  35.         Next
  36.         
  37.     Next
  38.         
  39.     Range("A2").Resize(Num, 7).NumberFormatLocal = "@"
  40.     Range("A2").Resize(Num, 7) = Result
  41.    
  42.     oDoc.Close True
  43.     oWordApp.Quit
  44.     Set oWordApp = Nothing
  45. End Sub


  46. Function RegxFind(strValue As String, strFind As String, Num As Integer) As String
  47.     Dim RegX As Object, objMatchs As Object
  48.     Dim strTemp As String
  49.    
  50.     On Error GoTo Err:
  51.     Set RegX = CreateObject("vbscript.regexp")
  52.     RegX.Pattern = strFind
  53.    
  54.     Set objMatchs = RegX.Execute(strValue)
  55.     strTemp = objMatchs(0).SubMatches(Num)
  56.    
  57.     Set RegX = Nothing
  58.     RegxFind = strTemp
  59.    
  60.     Exit Function
  61. Err:
  62.     myFind = ""
  63. End Function
复制代码

案例.rar

371.47 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 14:24 | 显示全部楼层
mzbao 发表于 2018-8-9 14:07
仅基于你的附件做的,请自行测试其它的。

谢谢你的帮助,我看看,学习一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 14:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢你的帮助

TA的精华主题

TA的得分主题

发表于 2018-8-9 15:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
另一个思路
  1. Sub ReadFromWord()
  2.     Dim oWordApp As Object, oDoc As Object, txt$
  3.     Dim myPath$, MyName$, k%, tempTxt$, Result(1 To 2000, 1 To 7) As String
  4.     Dim j%, pNum%, arr, JD%
  5.    
  6.     'On Error Resume Next
  7.     Range("A2:G2000").ClearContents
  8.     myPath = ThisWorkbook.Path & ""
  9.     MyName = Dir(myPath & "*.doc*")
  10.     Set oWordApp = CreateObject("Word.Application")

  11.     Set oDoc = GetObject(myPath & MyName)
  12.     pNum = oDoc.Paragraphs.Count
  13.    
  14.     For i = 1 To pNum
  15.         txt = oDoc.Paragraphs(i).Range.Text
  16.         If InStr(1, txt, "房屋安全鉴定报告") Then k = k + 1
  17.         If InStr(1, txt, "户主姓名") > 0 Then
  18.             tempTxt = oDoc.Paragraphs(i - 1).Range.Text
  19.             arr = Split(tempTxt, ":")
  20.             Result(k, 2) = Trim(Left(arr(1), InStr(1, arr(1), "鉴") - 1))
  21.             Result(k, 1) = Trim(arr(2))
  22.             Result(k, 3) = oDoc.Paragraphs(i + 1).Range.Text
  23.         End If
  24.         
  25.         If InStr(1, txt, "第一次鉴定") Then JD = 1
  26.         If InStr(1, txt, "第二次鉴定") Then JD = 2
  27.         
  28.         If InStr(1, txt, "建筑结构") Then
  29.             Result(k, 2 + JD * 2) = oDoc.Paragraphs(i + 1).Range.Text
  30.         End If
  31.         
  32.         If InStr(1, txt, "房屋危险等级评定") Then
  33.             Result(k, 5) = oDoc.Paragraphs(i + 1).Range.Text
  34.         End If
  35.         
  36.         If InStr(1, txt, "房屋综合等级") Then
  37.             Result(k, 7) = oDoc.Paragraphs(i + 1).Range.Text
  38.         End If
  39.     Next
  40.    
  41.     For j = 3 To 7
  42.         For i = 1 To k
  43.             Result(i, j) = Left(Result(i, j), Len(Result(i, j)) - 1)
  44.         Next
  45.     Next
  46.    
  47.     Range("A2").Resize(k, 7) = Result
  48.    
  49.     oDoc.Close True
  50.     oWordApp.Quit
  51.     Set oWordApp = Nothing
  52. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 16:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

你好,谢谢你的帮助,在学习你的代码思路后,还有一句不太明白,希望您能指点一下:
add = Trim(Left(addNum, posEnd)
这句是为了获取家庭地址,但是家庭地址跟编号是一个文本行,中间有空格 ,这句是如何来区分的呢?同时在实际运用中,有的农户运行到这一代码就中断了,希望您能帮忙解惑,谢谢……

TA的精华主题

TA的得分主题

发表于 2018-8-9 16:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

发表于 2018-8-9 16:42 来自手机 | 显示全部楼层
ybx4646008 发表于 2018-8-9 16:01
你好,谢谢你的帮助,在学习你的代码思路后,还有一句不太明白,希望您能指点一下:
add = Trim(Left(ad ...

你把中断的数据发给我,我调试一下。另,自己在字符处理那里加几个debug.print add,查看一下add的输出

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 21:38 , Processed in 0.027554 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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