我正在尝试使用宏从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
但它显示原始字符只意味着它不显示任何格式信息,如粗体,斜体,下划线等。
我想提取文本以及格式信息。
示例:这是示例文字
预期输出:示例文字
实际输出:这是示例文本
有人可以解释代码有什么问题,并判断是否有错误?
答案 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