在RT中将RTF(富文本格式)代码转换为纯文本

时间:2017-03-03 10:22:24

标签: excel vba excel-vba 64-bit rtf

我将数据库查询导出为Excel,并且我获得了具有RTF格式的行。

Here is a screenshot of the Excel

如何将这些字段转换为纯文本?我找到了很老的答案,所以我想知道是否有人知道方法。

2 个答案:

答案 0 :(得分:1)

另一种替代方法是使用Microsoft Rich Textbox Control(但无法在x64 Office上测试)

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

答案 1 :(得分:1)

.Net Framework RichTextBox类可以执行转换。幸运的是,这个类具有ComVisibleAttribute设置,因此可以毫不费力地从VBA中使用它。

我必须创建一个.tlb文件到Reference。在

  

%SYSTEMROOT%\ Microsoft.NET \框架\ currentver \

目录,运行命令

regasm /codebase system.windows.forms.dll

创建system.windows.forms.tlb文件。我已经在我的系统上安装了这个.tlb文件,但我不得不使用此命令重新创建它,以便能够在VBA中成功创建.Net System.Windows.Forms RichTextBox对象。

创建新的.tlb文件后,在VBA中通过VBA IDE中的Tools-> References将其链接到您的项目。

我在Access中编写了这个测试代码以演示解决方案。

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)

结果

hello question stem

我假设在使用64位Office的64位Windows上需要在\ Framework64 \目录中重新创建.tlb文件。我正在使用32位Office 2013运行64位Win10,所以我必须有一个32位的.tlb文件。