从文件中读取字符串时查找字符串中的上标

时间:2018-09-07 11:07:13

标签: excel vba

我正在尝试将Word文档中的表格中的文本导入excel。我需要从阅读的文本中删除上标。从excel文档中删除上标很简单,但是在将上标字符写入excel文档时,我需要删除它们。原因是单词文档包含许多相同的字符串,但是随机添加了上标数字或商标符号,因此我的电子表格无法将这些字符串识别为相同的字符串。

我的代码很长,但是相关的位在这里

Dim myDoc As Word.Document
Dim i As Integer 
Dim iTable        As Integer  'table number index
Dim iRow          As Long     'row index in Excel
Dim iCol          As Integer  'column index in Excel
Dim j as integer, i as integer, c as integer

With myDoc.Tables(1) ‘the table I want to read in strings from
    j=3
         For iRow = 1 To .Rows.Count
               Cells(i, j) = WorksheetFunction.Clean(.Cell(iRow, 1).Range.Text)  ‘i is set elsewhere in code
               For c = 1 To Len(Cells(i, j))
                    If Cells(i, j).Characters(c, 1).Font.Superscript = True Then
                    MsgBox “superscript found”
                    End If
                Next c
               j = j + 1
          Next iRow
End With

但这是行不通的,因为它永远不会提醒我任何上标(我可以稍后稍后再尝试删除它们,以确保它能找到它们)。如果我对其进行更改,以便在找到不是上标的字符时提醒我,那么它将正常工作。奇怪的是,当我检查它写到电子表格的内容时,很多字符都是上标,所以它们就在那里。

任何帮助将不胜感激!

欢呼

1 个答案:

答案 0 :(得分:0)

您的代码非常适合在Excel单元格中查找上标。这意味着,如果范围内有任何上标字符,它将找到它们。

问题出在这一行: Cells(i, j) = WorksheetFunction.Clean(.Cell(iRow, 1).Range.Text),其中完整引用为myDoc.Tables(1).Cell(iRow, 1).Range.Text,其中myDoc是Word文档。
通过引用Range的.Text属性,您只能获得一个String值作为回报。这种类型永远无法保留上/下标,字体大小等元数据。因此,实际上,该信息在过程中丢失,并且永远不会到达Excel工作表! (这就是为什么您找不到它的原因。)

不幸的是,我不知道Word对象模型,所以我也无法告诉您如何传输此元数据。希望有这方面经验的人能对此有所了解。

或者,看看some search results on SO。也许那里有一些帮助。