2011-04-12 150 views
0

我正在嘗試閱讀其中某些單元格包含富文本的Excel電子表格。我想將其轉換爲以某種方式編碼格式的純文本格式。例如,給定文字:從Excel單元格讀取富文本

「這裏有一些文字斜體在中間它。」

我想將其轉換爲:

「這裏有一些文字[I]在中間的[/ i]於它斜體」。

問題是,我還沒有找到一種方法來從Excel單元格中提取豐富的文本。 Interop.Office.Excel允許我得到一個Range並檢查它的Style屬性,但這隻告訴我該單元格是否以斜體表示;它沒有給我關於任何單個字符的信息。我發現最好的"solution"包括將單元格的內容複製到剪貼板並調用Clipboard.GetData(System.Windows.DataFormats.Rtf),它太慢而不實用。

是否有一種智能的方式來訪問我所缺少的Excel單元格中包含的豐富文本?

回答

1

的方式訪問字符串中單個字符的格式是使用Range.Characters對象

這裏演示的是VBA中的一個簡單的UDF,它使用您描述的斜體格式。您可以擴展它以檢測您需要的任何其他格式

Function DecodeText(r As Range) As Variant 
    Dim strDecoded As String 
    Dim bItalic As Boolean 
    Dim i As Long, j As Long 

    If TypeName(r.Value) = "String" Then 

     bItalic = False 
     strDecoded = r 
     j = 1 
     For i = 1 To Len(strDecoded) 
      If Not bItalic And r.Characters(i, 1).Font.Italic Then 
       strDecoded = Left(strDecoded, j - 1) & "[i]" & Mid(strDecoded, j) 
       bItalic = True 
       j = j + 3 
      ElseIf bItalic And Not r.Characters(i, 1).Font.Italic Then 
       strDecoded = Left(strDecoded, j - 1) & "[/i]" & Mid(strDecoded, j) 
       bItalic = False 
       j = j + 4 
      End If 
      j = j + 1 
     Next 
     If bItalic Then strDecoded = strDecoded & "[/i]" 
     DecodeText = strDecoded 
    Else 
     DecodeText = r 
    End If 
End Function 
+0

問題是,這比上述將富文本複製到剪貼板的解決方案還要慢。爲了閱讀每個角色而單獨調用excel並不是真的可行。我正在尋找一種方法來一次讀完它,然後自己解析它。 – awall 2011-04-12 17:44:30