提问人:Kris 提问时间:9/19/2023 最后编辑:Kris 更新时间:9/20/2023 访问量:62
使用 VBA 将带有 HTML 标签的文本转换为 Word 中的格式化文本
Converting text with HTML tags to formatted text in Word using VBA
问:
分页符中带有问号的框我正在使用 HTML 标签修改 Word 中的文本,以将其更改为 Word 识别的格式。下面的代码是我到目前为止所拥有的,但我希望对其进行修改以包含以下内容:
- 将所有内容格式化为特定尺寸和格式(例如,Calibri 尺寸 11)。
- 识别换行符 (<br>) 并与实际换行符交换。
- 不仅要识别粗体或下划线,还要识别同时使用两者的情况。
Sub ReformatHTML()
Application.ScreenUpdating = False
With ActiveDocument.Range.Find
.ClearFormatting
.Format = True
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
' Remove <p>
.Replacement.Text = "\2"
.Replacement.ClearFormatting
.Text = "\<(p\>)(*)\</\1"
.Execute Replace:=wdReplaceAll
.Replacement.Text = "\2"
.Replacement.ClearFormatting
.Text = "\<(u\>)(*)\</\1"
.Replacement.Font.Underline = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(strong\>)(*)\</\1"
.Replacement.Style = "Strong"
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(i\>)(*)\</\1"
.Replacement.Font.Italic = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(h\>)(*)\</\1"
.Replacement.Highlight = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
' line break
.Replacement.Text = vbCrLf
.Replacement.ClearFormatting
.Text = "\<br\>"
.Execute Replace:=wdReplaceAll
End With
With ActiveDocument.Range
.Font.Name = "Calibri"
.Font.Size = 11
End With
Application.ScreenUpdating = True
End Sub
到目前为止,除了我询问的修改之外,我所拥有的代码运行良好。标题为使用 VBA 将带有 HTML 标签的文本呈现为 Word 表格中的格式化文本的帖子在一定程度上有所帮助,但我仍在苦苦挣扎,无法提出后续问题。
这是我尝试修改的文本示例(我无法弄清楚如何使用文本并且没有将 HTML 转换为格式,所以我包含一张图片......呃):
答:
0赞
taller
9/19/2023
#1
恳请尝试。
Sub ReformatHTML()
Application.ScreenUpdating = False
With ActiveDocument.Range.Find
.ClearFormatting
.Format = True
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
' replace <u>
.Replacement.Text = "\2"
.Replacement.ClearFormatting
' set font style
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Text = "\<(u\>)(*)\</\1"
.Replacement.Font.Underline = True
.Execute Replace:=wdReplaceAll
' line break
.Replacement.Text = vbCr
.Replacement.ClearFormatting
.Text = "\<br\>"
.Execute Replace:=wdReplaceAll
End With
Application.ScreenUpdating = True
End Sub
更新
删除标签 <p> 并在 OP 上与代码集成
Sub ReformatHTML()
Application.ScreenUpdating = False
With ActiveDocument.Range.Find
.ClearFormatting
.Format = True
.Forward = True
.MatchWildcards = True
.Wrap = wdFindContinue
' Remove <p>
.Replacement.Text = "\2"
.Replacement.ClearFormatting
.Text = "\<(p\>)(*)\</\1"
.Execute Replace:=wdReplaceAll
.Replacement.Text = "\2"
.Replacement.ClearFormatting
.Text = "\<(u\>)(*)\</\1"
.Replacement.Font.Underline = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(strong\>)(*)\</\1"
.Replacement.Style = "Strong"
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(i\>)(*)\</\1"
.Replacement.Font.Italic = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
.Replacement.ClearFormatting
.Text = "\<(h\>)(*)\</\1"
.Replacement.Highlight = True
.Replacement.Font.Name = "Calibri"
.Replacement.Font.Size = 11
.Execute Replace:=wdReplaceAll
' line break
.Replacement.Text = vbCrLf
.Replacement.ClearFormatting
.Text = "\<br\>"
.Execute Replace:=wdReplaceAll
End With
Application.ScreenUpdating = True
End Sub
为整个文档设置字体样式,然后和不是必需的。.Replacement.Font.Name
.Replacement.Font.Size
With ActiveDocument.Range.Font
.Name = "Calibri"
.Size = 11
End With
评论
0赞
Kris
9/19/2023
非常感谢。这让我离得更近了一点。我尝试将您的代码与我已经拥有的内容一起包含,但我仍然感到困惑。我编辑了我的帖子,以包含我正在处理的文本类型的屏幕截图。不幸的是,我无法弄清楚如何在没有堆栈溢出的情况下仅粘贴文本,将 HTML 标签转换为实际格式。此外,还有一些字符(<p>,</p>)我似乎无法摆脱。
0赞
taller
9/19/2023
请仔细检查您的样本文档。 第一个 </strong> 是 overlap w/ <p> 标签。是否要删除所有 p 标签?
0赞
Kris
9/19/2023
谢谢你,taller_ExcelHome。第一个</strong>与 <p> 重叠只是因为用户在 Excel 中进行了大量更新而发生的事情,这很麻烦,他们不会听我的。但是,是的,我希望删除所有 <p> 标签,因为它们似乎与此任务无关紧要。当我尝试删除它们时,只会删除“p”,但“</>”字符会保留。不知道为什么?
0赞
taller
9/20/2023
我已经更新了代码。
0赞
Kris
9/20/2023
哇,太感谢你了。我做了一个调整并粘贴了上面的代码,以便能够使整个文档的 Calibri 大小为 11。唯一剩下的就是在所有有分页符的情况下,分页间距看起来是正确的;然而,留下的是里面有问号的盒子。我将在上面添加另一个屏幕截图,标题为“带有分页符问号的框”。
上一个:在电子邮件草稿中添加默认签名
下一个:设置自动 word 文件的格式
评论