Foxtable(狐表)用户栏目专家坐堂 → [求助]提取word文档字符串


  共有4464人关注过本帖树形打印复制链接

主题:[求助]提取word文档字符串

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/1 16:40:00 [显示全部帖子]

Dim dlg As new OpenFileDialog
dlg.Filter = "word|*.doc;*.docx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open(dlg.fileName)
        Dim count = Doc.Characters.Count
        Dim rng As MSWord.Range = Doc.Range(Start:=0, End:=count)
        msgbox(rng.Text)
        Dim str As String = rng.text
        Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=裁定如下).*?(?=审  判  长)")
        If mc.count >= 1 Then
            msgbox("裁定")
            For i As Integer = 0 To mc.count-1
                msgbox(mc(i).value)
            Next
        Else
            mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=判决如下).*?(?=审  判  长)")
            If mc.count >= 0 Then
                msgbox("判决")
                For i As Integer = 0 To mc.count-1
                    msgbox(mc(i).value)
                Next
            Else
                msgbox("无法识别")
            End If
        End If
        app.Quit
    catch ex As exception
        msgbox(ex.message)
        app.Quit
    End try
End If

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/1 18:27:00 [显示全部帖子]

肯定可以,看红色代码,想办法弄到路径。

 

    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open("d:\test.doc")
        Dim count = Doc.Characters.Count
        Dim rng As MSWord.Range = Doc.Range(Start:=0, End:=count)
        msgbox(rng.Text)
        Dim str As String = rng.text
        Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=裁定如下).*?(?=审  判  长)")
        If mc.count >= 1 Then
            msgbox("裁定")
            For i As Integer = 0 To mc.count-1
                msgbox(mc(i).value)
            Next
        Else
            mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=判决如下).*?(?=审  判  长)")
            If mc.count >= 0 Then
                msgbox("判决")
                For i As Integer = 0 To mc.count-1
                    msgbox(mc(i).value)
                Next
            Else
                msgbox("无法识别")
            End If
        End If
        app.Quit
    catch ex As exception
        msgbox(ex.message)
        app.Quit
    End try


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/1 20:15:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:提取文档内容.table


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/1 22:13:00 [显示全部帖子]

修改代码

 

Dim dr As DataRow = e.DataRow
Dim file = e.SourceFolder & "\" & e.filename
If dr.IsNull("案号") Or dr.IsNull("承办人")  Then
    MessageBox.Show("案号及承办人不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Cancel = True
Else
    e.FileName = dr("案号") & ".doc"
End If

Select Case e.DataCol.Name
    Case "裁判文书"
        e.Subfolder = e.DataRow("承办人")  '将此文件存放在目录名为承办人名称的子目录中.
        Dim app As New MSWord.Application
        try
            Dim doc = app.Documents.Open(file)
            Dim count = Doc.Characters.Count
            Dim rng As MSWord.Range = Doc.Range(Start:=0, End:=count)
            msgbox(rng.Text)
            Dim str As String = rng.text
            Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=裁定如下).*?(?=审  判  长)")
            If mc.count >= 1 Then
                msgbox("裁定")
                For i As Integer = 0 To mc.count-1
                    msgbox(mc(i).value)
                Next
            Else
                mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=判决如下).*?(?=审  判  长)")
                If mc.count >= 0 Then
                    msgbox("判决")
                    For i As Integer = 0 To mc.count-1
                        msgbox(mc(i).value)
                    Next
                Else
                    msgbox("无法识别")
                End If
            End If
            app.Quit
        catch ex As exception
            msgbox(ex.message)
            app.Quit
        End try
End Select

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/2 1:13:00 [显示全部帖子]

以下是引用天一生水在2018/3/1 23:08:00的发言:

请教老师一个问题,上面的代码哪一句是把添加的文件放入“裁判文书”里的,一直没看出来。

这句:Dim file = e.SourceFolder & "\" & e.filename,是来源目录吗?起什么作用?

 

要是局域网路径怎么改?

[此贴子已经被作者于2018/3/1 23:09:03编辑过]

 

关键看afterOpenProject事件的代码,设置 DefaultFolder
 
然后看这句代码 e.Subfolder = e.DataRow("承办人") 

 

局域网路径的话,只需要修改DefaultFolder的路径即可


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/7 9:10:00 [显示全部帖子]

回复13楼,得到的字符串,再用回车符分割,然后读取即可,如

 

Dim str = "123" & vbcrlf & "abc" & vbcrlf & "455"
msgbox(str)
Dim ary() = str.replace(chr(10), "").split(chr(13))
msgbox(ary(0))
msgbox(ary(2))


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/7 16:32:00 [显示全部帖子]

以下是引用天一生水在2018/3/7 16:01:00的发言:

甜老师,因为要提取的字符,开头和结尾的标志字符不固定,所以想用段落来识别提取。

不知可行不?

 

可以,只要是符合规律的,都可以。代码参考14楼。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/7 18:34:00 [显示全部帖子]

Dim str = "123" & vbcrlf & vbcrlf & vbcrlf & "abc" & vbcrlf & "455"
msgbox(str)
Dim ary() = str.replace(chr(10), "").split(chr(13))
Dim ls As new List(Of String)
For Each s As String In ary
    If s.trim() > "" Then
        ls.add(s)
    End If
Next
msgbox(ls(0))
msgbox(ls(1))
msgbox(ls(2))

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/8 11:41:00 [显示全部帖子]

Dim str = "123" & vbcrlf & vbcrlf & vbcrlf & "本院认为:111abc" & vbcrlf & "45aaa5" & vbcrlf & "123"
msgbox(str)
Dim ary() = str.replace(chr(10), "").split(chr(13))
Dim ls As new List(Of String)
For Each s As String In ary
    If s.trim() > "" Then
        ls.add(s)
    End If
Next

For Each s As String In ls
    If s.StartsWith("本院认为") Then
        msgbox(s)
        Exit For
    End If
Next

For Each s As String In ls
    If s.contains("aaa") then
        msgbox(s)
        exit for
    end if
Next

msgbox(ls(3))


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/11 20:51:00 [显示全部帖子]

改成

 

Dim ary() = str.replace(chr(10), chr(13)).split(chr(13))


 回到顶部
总数 17 1 2 下一页