Dim rtfSample As String
rtfSample = "{\rtf1\ansi\deflang1033\ftnbj\uc1 {\fonttbl{\f0 \froman \fcharset0 Times New Roman;}{\f1 \fswiss \fcharset0 Segoe UI;}} {\colortbl ;\red255\green255\blue255 ;} {\stylesheet{\fs22\cf0\cb1 Normal;}{\cs1\cf0\cb1 Default Paragraph Font;}} \paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\headery720\footery720\deftab720\formshade\aendnotes\aftnnrlc\pgbrdrhead\pgbrdrfoot \sectd\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\headery720\footery720\sbkpage\pgnstarts1\pgncont\pgndec \plain\plain\f1\fs22\lang1033\f1 hello question stem\plain\f1\fs22\par}"
Dim miracle As System_Windows_Forms.RichTextBox
Set miracle = New System_Windows_Forms.RichTextBox
With miracle
.RTF = rtfSample
RTFExtractPlainText = .TEXT
End With
MsgBox RTFExtractPlainText(rtfSample)
Sub rtfToText()
With CreateObject("RICHTEXT.RichtextCtrl") ' or add reference to Microsoft Rich Textbox Control for early binding and With New RichTextLib.RichTextBox
.SelStart = 0 ' needs to be selected
.TextRTF = Join(Application.Transpose(Cells.CurrentRegion.Columns(1)))
[C1] = .Text ' set the destination cell here
' or if you want them in separate cells:
a = Split(.Text, vbNewLine)
Range("C3").Resize(UBound(a) + 1) = Application.Transpose(a)
End With
End Sub
3条答案
按热度按时间mpgws1up1#
.Net Framework RichTextBox类可以执行转换。幸运的是,此类具有ComVisibleAttribute集,因此可以从VBA中轻松使用它。
我必须创建一个.tlb文件来引用。在
%SYSTEMROOT%\Microsoft.NET\框架\当前版本
目录中,运行命令
创建system.windows.forms.tlb文件。我的系统上已经有了这个.tlb文件,但我必须使用此命令重新创建它,才能在VBA中成功创建.Net System.Windows. formsRichTextBox对象。
创建新的.tlb文件后,在VBA中通过VBA IDE中的“工具”-〉“引用”将其链接到您的项目。
我在Access中编写了此测试代码来演示该解决方案。
有了结果
hello question stem
我认为在64位Windows和64位Office上需要在\Framework64\目录中重新创建.tlb文件。我运行的是64位Win10和32位Office 2013,所以我必须有一个32位.tlb文件。
z9smfwbn2#
另一种替代方法是使用Microsoft富文本框控件(但无法在x64 Office上测试)
iezvtpos3#
我重新讨论这个问题是为了提供两个javascript解决方案,而不是一个
.NET
解决方案。方法1
方法2