gpt4 book ai didi

vba - 从单元格中提取文本内容(粗体、斜体等)

转载 作者:行者123 更新时间:2023-12-02 16:12:13 24 4
gpt4 key购买 nike

我正在尝试使用宏从 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

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

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

示例:这是示例文本

预期输出:这是示例文本

实际输出:这是示例文本

有人可以解释一下代码有什么问题并判断是否有问题吗?

最佳答案

消息框不允许在不更改系统默认值的情况下进行格式化,这不是一种直接的方法。如果您想在提示中显示格式化文本,那么您可能最简单的方法是创建一个用户表单并适本地设置标签格式。

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

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

并将其应用到用户表单标签字体,使用:

label.Font.Bold = isBold

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

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 情况仅返回默认字符串值。您可以修改此方法以适用于任何 .Font 属性,例如删除线、下划线、斜体......

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

Sub OutputText()

Dim i As Integer, j As Integer
Dim rng As Range
Dim Txt As String

Set rng = Range("A2:C15")
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
Txt = Txt & markup(rng(i, j)) & " "
Next j
Txt = Txt & vbCrLf
Next i

Debug.Print Txt

End Sub

关于vba - 从单元格中提取文本内容(粗体、斜体等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29916992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com