2017-03-03 188 views
1

我將數據庫查詢導出爲Excel,並獲取具有RTF格式的行。在Excel中將RTF(RTF格式)代碼轉換爲純文本格式

Here is a screenshot of the Excel

我如何轉換這些字段爲純文本?我找到了很舊的答案,所以我想知道是否有人知道一個方法。

+0

http://stackoverflow.com/questions/1673025/rich-text-format-with-formatting-tags-in-excel-to-unformatted-text – Slai

+0

@Slai這是我讀的第一本。它很舊。我試過了,它不支持x64。我希望有人在8年後找到更好的辦法。另外,我對VBA不太好。 – Ivan

回答

1

另一種選擇,可以使用Microsoft格式文本框控件(但不能測試它在x64辦事處)

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

謝謝你的回答。我一直在嘗試運行它,但我不斷收到一個錯誤,說'ActiveX組件不能創建對象'。我已經允許宏。 – Ivan

+0

@Ivan是否可以將控件添加到「開發工具」選項卡>插入>更多控件> Microsoft Rich TextBox控件的工作表中? – Slai

+0

我無法在列表中找到該控件。 – Ivan

1

.NET框架RichTextBox類可以執行轉換。幸運的是,這個類具有ComVisibleAttribute集合,因此它可以在VBA中使用,而不會有太大困難。我不得不創建一個.tlb文件來引用。在

%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

我認爲重新創建在\ Framework64 \目錄將需要在64位的Windows與64位Office .tlb文件。我在32位Office 2013上運行64位Win10,所以我必須有一個32位的.tlb文件。