从单元格中提取文本内容(使用粗体,斜体等)

时间:2015-04-28 10:33:17

标签: excel vba excel-vba

我正在尝试使用宏从Excel中提取文本内容。这是我的代码:

Dim i As Integer, j As Integer
Dim v1 As Variant
Dim Txt As String

v1 = Range("A2:C15")
For i = 1 To UBound(v1)
    For j = 1 To UBound(v1, 2)
        Txt = Txt & v1(i, j)
    Next j
    Txt = Txt & vbCrLf
Next i

MsgBox Txt

但它显示原始字符只意味着它不显示任何格式信息,如粗体,斜体,下划线等。

我想提取文本以及格式信息。

示例:这是示例文字

预期输出示例文字

实际输出:这是示例文本

有人可以解释代码有什么问题,并判断是否有错误?

3 个答案:

答案 0 :(得分:2)

消息框不允许在不更改系统默认值的情况下进行格式化,这不是一种明星式的方法。如果要在提示中显示格式化文本,则最简单的方法是创建用户表单并适当地格式化标签。

例如,您可以使用以下命令确定单元格是否具有粗体格式:

*:1728:localhost

使用以下命令将其应用于用户表单标签字体:

Dim isBold As Boolean
isBold = v1(i, j).Font.Bold

如果要输出到文本(即.txt)文件,则无法存储任何格式信息。你可能希望实现的最好的是创建一个标记样式输出:

label.Font.Bold = isBold

If isBold Then txt = "<b >mytext< /b>" 'Ignore the spaces Else txt = "mytext" End If 属性有三个返回选项:

range.Font.Bold

调用v1(i, j).Font.Bold = True 'if the entire cell IS bold v1(i, j).Font.Bold = False 'if the entire cell IS NOT bold v1(i, j).Font.Bold = Null 'if the cell is PARTIALLY bold 会告诉您是否在单元格中有部分填充。不幸的是,您必须单独评估字符串中的每个字符以确定粗体字符。此函数应确定在传递的IsNull(v1(i, j).Font.Bold)对象中包含的字符串中打开或关闭粗体格式的位置,并添加相应的标记标记:

Range

请注意,Function markup(rng As Range) As String Dim chr As Integer Dim isCharBold As Boolean Dim str As String Dim tempChar As Characters isCharBold = False str = "" If IsNull(rng.Font.Bold) Then For chr = 1 To rng.Characters.Count Set tempChar = rng.Characters(chr, 1) If isCharBold Then If tempChar.Font.Bold Then str = str + tempChar.Text Else isCharBold = False str = str & "</b>" & tempChar.Text End If Else If tempChar.Font.Bold Then isCharBold = True str = str + "<b>" & tempChar.Text Else str = str & tempChar.Text End If End If Next chr Else str = rng.Value End If markup = str End Function 只返回默认字符串值。您可以修改此方法以适用于任何Else属性,例如删除线,下划线,斜体....

OP中的框架建议您将一系列单元格的内容分配到类型为.Font的数组中。这基本上会在每个数组索引中留下未格式化的字符串。在这种情况下,您无法从数组字符串中提取任何格式。要访问Variant属性,您必须在Characters().Font.Bold对象上操作,因此最好直接遍历Range中的每个单元格。这可以通过修改你的初始代码来实现,所以它现在调用标记函数:

Range("A2:C15")

答案 1 :(得分:1)

VBA字符串不支持这样的格式。它将纯粹从范围中取出字符串。根本没有格式化。如果要格式化字符串,则无法通过msgbox查看。

唯一的方法是将其存储在单元格中,然后格式化单元格。但是,这并没有将消息框中的输出作为格式化字符串提供给你。

如果您打算将字符串放在带格式的单元格中,则需要在某处保存格式,或者从您从中获取文本的单元格中复制它。然后将格式应用于单元格

答案 2 :(得分:1)

好的,让我们让@stucharo的算法稍微简单一些。

a

要清楚,此功能仅适用于包含单个单元格的范围。但是应该很容易为更大范围内的每个单元调用此函数并将返回的字符串连接成一个。

OP编辑:

我通过以下代码调用了该函数:

SRCS=/home/user/splint_evaluation/my_project/source/*.c