以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  麻烦有点蓝等各位老师 帮忙看看 怎么实现读取word文件内容并显示在富文本框内内容?且对应的文本格式不变……  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177244)

--  作者:cnsjroom
--  发布时间:2022/5/13 19:55:00
--  麻烦有点蓝等各位老师 帮忙看看 怎么实现读取word文件内容并显示在富文本框内内容?且对应的文本格式不变……

当前项目有表A(html内容  纯文本内容  两个列名)

 

按图依次点击的按钮

在点击word文件导入后,文本直接写入了表A中的纯文本内容列中,但是没有显示在富文本编辑框中……

点击保存后,获取得到的Word文件会对应的保存到当前行

 

怎么实现读取word文件内容并显示在富文本框内内容?且对应的文本格式不变……


此主题相关图片如下:11.png
按此在新窗口浏览图片

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:kindeditor富文本案例v2.zip

 

代码如下:

初始化按钮代码:

Dim HKCU= Registry.CurrentUser
Dim hkSoftWare = HKCU.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",True)
hkSoftWare.SetValue(System.Diagnostics.Process.GetCurrentProcess.ProcessName &".exe", "11001", Microsoft.Win32.RegistryValueKind.DWord)
HKCU.Close()
hkSoftWare.Close()

Dim wb = e.Form.Controls("WebBrowser1").BaseControl
wb.Url = new System.Uri(ProjectPath & "KindEditor\\e.html", System.UriKind.Absolute)
Dim ke As new KindEditor \'必须创建一个新实例
wb.ObjectForScripting =ke

e.Form.Controls("GroupBox2").Enabled =True

 

读取并绑定当前行:

Dim wb = e.Form.Controls("WebBrowser1").BaseControl
Dim ke As KindEditor = wb.ObjectForScripting

Dim r As Row = Tables("表A").Current
If r IsNot Nothing Then
    \'绑定某个字段,当富文本框变化时,自动变化
    ke.FullHtmlBindingField = "表A.完整html内容" 
    ke.InnerHtmlBindingField = "表A.纯文本内容" 
    wb.refresh \'刷新
End If

 

Word文件导入代码如下:

Dim app As New MSWord.Application
\'Dim wb2 As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
\'Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim r As Row = Tables("表A").Current
try
    Dim dlg As New OpenFileDialog
    dlg.Filter = "|*.*"
    If dlg.ShowDialog =DialogResult.OK Then
        Dim fl As String = dlg.FileName
        \'wb2.Address=fl
        Dim doc = app.Documents.Open(dlg.fileName)
        Dim count = Doc.Characters.Count
        Dim rng As MSWord.Range = Doc.Range(Start:=0, End:=count)
        \'t1.text=rng.Text.replace(chr(13), vbcrlf)
        If r IsNot Nothing Then
            r("纯文本内容")=rng.Text.replace(chr(13), vbcrlf)
        End If
    End If
    app.Quit
catch ex As exception
    msgbox(ex.message)
    app.Quit
End try

 

保存按钮代码:

Dim r As Row = Tables("表A").Current
If r IsNot Nothing Then
    r.Save
    MessageBox.Show("当前行保存成功")
End If

 

 

在点击word文件导入后,文本直接写入了表A中的纯文本内容列中,但是没有显示在富文本编辑框中……

点击保存后,获取得到的Word文件会对应的保存到当前行

 

 

当前项目全局代码内容为:

\'富文本框 WebBrowser里的KindEditor方法属性
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class KindEditor
    Public isReadOnly As Boolean =False \'是否只读 

    Private _FullHtmlBindingField As String 
    Private _InnerHtmlBindingField As String 
    Private _FullHtml As String
    Private _InnerHtml As String

    \'完整html内容
    Property FullHtml() As String
        Get \'获取属性的值
            Return _FullHtml
        End Get
        Set(ByVal value As String) \'设定属性的值
            _FullHtml = value

            \'同步更新绑定的列
            If _FullHtmlBindingField <> "" Then
                Dim vs() As String = _FullHtmlBindingField.split(".")
                If vs.Length =2 Then
                    Tables(vs(0)).Current(vs(1)) = value
                End If
            End If
        End Set
    End Property

    \'纯文本内容
    Property InnerHtml() As String
        Get \'获取属性的值
            Return _InnerHtml
        End Get
        Set(ByVal value As String) \'设定属性的值
            \'1用正则表达式去掉所有空格和换行符
            Static rgx As New RegularExpressions.Regex("\\s")
            value = rgx.Replace(value,"")

            \'2去掉base64的图片
            Dim si As Integer = value.IndexOf("<imgsrc=""data:image/png;base64,")
            If si>-1 Then
                Dim ei As Integer = value.IndexOf("/>",si)
                Do While (ei>si AndAlso si >-1)
                    value = value.Remove(si,ei-si+2)   
                    si = value.IndexOf("<imgsrc=""data:image/png;base64,")
                    If si >-1 Then
                        ei = value.IndexOf("/>",si)
                    End If
                Loop
            End If

            _InnerHtml =value

            \'同步更新绑定的列
            If _InnerHtmlBindingField <> "" Then
                Dim vs() As String = _InnerHtmlBindingField.split(".")
                If vs.Length =2 Then
                    Tables(vs(0)).Current(vs(1)) = value
                End If
            End If
        End Set
    End Property

    \'把html内容绑定到某个列
    Property FullHtmlBindingField() As String
        Get \'获取属性的值
            Return _FullHtmlBindingField
        End Get
        Set(ByVal value As String) \'设定属性的值
            \'把当前列内容写入到FullHtml
            If value <> "" Then
                Dim vs() As String = value.split(".")
                If vs.Length =2 Then
                    _FullHtml = Tables(vs(0)).Current(vs(1))
                End If
            End If

            _FullHtmlBindingField= value
        End Set
    End Property

    \'把纯文本内容绑定到某个列
    Property InnerHtmlBindingField() As String
        Get \'获取属性的值
            Return _InnerHtmlBindingField
        End Get
        Set(ByVal value As String) \'设定属性的值
            \'把当前列内容写入到InnerHtml
            If value <> "" Then
                Dim vs() As String = value.split(".")
                If vs.Length =2 Then
                    _InnerHtml = Tables(vs(0)).Current(vs(1))
                End If
            End If

            _InnerHtmlBindingField =value
        End Set
    End Property
End Class

[此贴子已经被作者于2022/5/16 13:00:47编辑过]

--  作者:cnsjroom
--  发布时间:2022/5/14 17:07:00
--  回复:(cnsjroom)怎么实现读取word文件内容并显示在...

如果是先点击word文件导入按钮,将word文件读取并保存到指定行后,怎么生成HTML内容呢?
红色部分代码只能生成带格式的文本内容,不是HTML格式的内容……
如果能够解决这个问题,那对应的读取也就和富文本中点击word图标ctrl+v复制后保存的效果一样了 ,那自然在打开就实现了预期效果!


完整的html内容该如何根据当前已经读取到的Word文件内容来生成呢?


Dim app As New MSWord.Application
\'Dim wb2 As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
\'Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim r As Row = Tables("表A").Current
try
    Dim dlg As New OpenFileDialog
    dlg.Filter = "|*.*"
    If dlg.ShowDialog =DialogResult.OK Then
        Dim fl As String = dlg.FileName
        \'wb2.Address=fl
        Dim doc = app.Documents.Open(dlg.fileName)
        Dim count = Doc.Characters.Count
        Dim rng As MSWord.Range = Doc.Range(Start:=0, End:=count)
        \'t1.text=rng.Text.replace(chr(13), vbcrlf)
        If r IsNot Nothing Then
            r("纯文本内容")=rng.Text.replace(chr(13), vbcrlf)
            r("完整html内容")=rng.Text.replace(chr(13), vbcrlf)
        End If
    End If
    app.Quit
catch ex As exception
    msgbox(ex.message)
    app.Quit
End try