Convert RTF (Rich Text Format) code into plain text in Excel

后端 未结 2 950
暗喜
暗喜 2020-12-11 11:38

I exporting a database query as Excel and I am getting rows with RTF formatting.

How can I convert these fields into plain text? I\'ve found answers that

相关标签:
2条回答
  • 2020-12-11 12:02

    Another alternative can be using Microsoft Rich Textbox Control (but can't test it on 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
    
    0 讨论(0)
  • 2020-12-11 12:12

    The .Net Framework RichTextBox class can perform the conversion. Fortunately, this class has the ComVisibleAttribute set, so it can be used from VBA without much difficulty.

    I had to create a .tlb file to Reference. In the

    %SYSTEMROOT%\Microsoft.NET\Framework\currentver\

    directory, run the command

    regasm /codebase system.windows.forms.dll
    

    to create the system.windows.forms.tlb file. I already had this .tlb file on my system, but I had to recreate it using this command to be able to create a .Net System.Windows.Forms RichTextBox object successfully in VBA.

    With the new .tlb file created, in VBA link it to your project via Tools->References in the VBA IDE.

    I wrote this test code in Access to demonstrate the solution.

    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)
    

    With the result

    hello question stem

    I'd assume re-creating the .tlb file in the \Framework64\ directory would be needed on 64-bit Windows with 64-bit Office. I am running 64-bit Win10 with 32-bit Office 2013, so I had to have a 32-bit .tlb file.

    0 讨论(0)
提交回复
热议问题