在 Excel 中显示 MS-Access 记录的富文本格式

Posted

技术标签:

【中文标题】在 Excel 中显示 MS-Access 记录的富文本格式【英文标题】:Display an MS-Access record's Rich Text Format in Excel 【发布时间】:2016-11-07 14:20:41 【问题描述】:

我想做的事

我有一个 Access 数据库( C:\Users\289894\Desktop\Database1.accdb ) [Table1] 的字段之一是 [Memo]。

该字段属于Memo 数据类型,文本格式设置为rich text。 例如,它可以将一些记录保存为 Bold,而将一些记录保存为 Italics

我想从一个 excel 文件打开到这个 Access 数据库的连接,以便读/写这个富文本字段。

我使用的代码如下:

    Dim datab As Database
    Dim rs As Recordset
    Dim path As String

    path = "C:\Users\289894\Desktop\Database1.accdb"

    Set datab = OpenDatabase(path)
    Set rs = datab.OpenRecordset("SELECT * FROM [Table1]")

        Debug.Print rs!Memo
        Range("A1") = rs!Memo

我的问题

这段代码可以很好地打开一个连接并读取普通文本字段,但富文本的行为方式令人惊讶(对我来说)。访问中的原始文本是“aaa”。那是粗体字的“aaa”。

运行代码后,debug.print 和 Range("A1") 都写入了<div><strong>aaa</strong></div>

如何更改我的代码以将格式也发送到 Excel?我想在单元格 A1 中用粗体字写出“aaa”,就像在 Access 中一样。

编辑:解决方法 这解决了问题提出的直接问题,而没有真正回答问题本身。它使用 Internet Explorer 将文本粘贴回为富文本,不带标签。

Sub Sample()
    Dim Ie As Object
    Dim rng As Range

        Set rng = Feuil1.Range("A1")

        Set Ie = CreateObject("InternetExplorer.Application")

        With Ie
            .Visible = False

            .Navigate "about:blank"

            .Document.body.Innerhtml = rng.Value

            .ExecWB 17, 0
            'Select all contents in browser
            .ExecWB 12, 2
            'Copy them
            ActiveSheet.Paste Destination:=rng


            .Quit
        End With

End Sub

【问题讨论】:

这是一个有趣的问题。在设置或用户使用不同的导出方法方面,我没有直接的解决方案,但是您可以使用的一个技巧是在导入后循环行集并删除 html 标记并使单元格变为粗体或斜体,具体取决于标签上。而且标题似乎与问题无关。 @ScottHoltzman 很好理解标题,我不确定那里发生了什么。至于粘贴为 HTML,我想过,但我找到的最佳答案是 ***.com/questions/9999713/…,它给我抛出了一个错误(编辑:它不再适用于较新的 IE 版本)。 您是否从您链接的问题中尝试过这个答案? ***.com/a/14951531/3820271 是的,我的列表中也没有所需的库,并且此代码应该在多台机器上运行,因此导入库并不是一个真正的选择。 我相当肯定每台 Windows 机器都有 FM20.dll,但这没关系 - 还有其他方法可以将字符串放入剪贴板,例如access.mvps.org/access/api/api0049.htm 【参考方案1】:

试一试。循环范围是通用的。此外,函数假定 HTML 非常有限,如您的示例所示。

Sub Test()

Dim cel As Range
For Each cel In Range("A1:A100")

    cel.Font.Bold = InStr(1, cel.Value, "<strong>")
    cel.Font.Italic = InStr(1, cel.Value, "<i>")
    cel.Value = RemoveHTML(cel.Value)

Next

End Sub

Function RemoveHTML(sHTML As String) As String

Dim sTemp As String
sTemp = sHTML

Dim bLeft As Byte, bRight As Byte
bRight = InStr(1, sTemp, "</")
bLeft = InStrRev(sTemp, ">", bRight)

RemoveHTML = Mid(sTemp, bLeft + 1, bRight - bLeft - 1)

End Function

【讨论】:

不幸的是,我的例子只是一个有限的例子。真正的最终目标是能够将我想要的字段及其格式发送到文本框(不是用户表单文本框)。它可以包括字体粗体、斜体、大小和颜色等。我的想法是首先让它在一个单元格中工作(我成功了,将添加我的答案),然后弄清楚如何更改为代码,以便我可以将富文本从单元格发送到文本框。由于这个特殊问题在 SO 中没有得到解答,因此我认为将其分成两部分会更好供以后参考。

以上是关于在 Excel 中显示 MS-Access 记录的富文本格式的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel 中的动态和静态范围导入到 MS-Access 中,而不是从单元格 A1 开始

MS-Access 2007:查询与至少有一条记录符合指定条件的个人相关的所有记录

MS-ACCESS-2007 在表格的表格中可视化研究结果

将 MS-Access 表单结果导出到 Excel?

我能否以编程方式启用和禁用存储在 SharePoint 中并链接到 ms-access 的 xlsx 文件的 ms-excel 文件共享/共同创作?

MS-Access 2013;根据多记录形式的记录数据更改组合框选项