在 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:查询与至少有一条记录符合指定条件的个人相关的所有记录
我能否以编程方式启用和禁用存储在 SharePoint 中并链接到 ms-access 的 xlsx 文件的 ms-excel 文件共享/共同创作?