gpt4 book ai didi

html - 使用 VBA 将带有 HTML 标记的文本呈现为 Word 表格中的格式化文本

转载 作者:行者123 更新时间:2023-11-28 02:28:37 25 4
gpt4 key购买 nike

我有一个带有 html 标签的 word 文档,我需要将其转换为格式化文本。例如我想要 <strong>Hello</strong>显示为 Hello

我以前从未使用过 VBA,但我一直在尝试拼凑一些东西,让我可以从 Word 中的特定表格单元格复制 html 文本,使用 IE 显示该文本的格式化版本,复制IE 中的格式化文本,然后将其粘贴回同一个 Word 表格单元格中。我想我已经能够找出一些代码,但我认为我没有正确引用表格单元格。谁能帮忙?这是我目前所拥有的:

Dim Ie As Object

Set Ie = CreateObject("InternetExplorer.Application")

With Ie
.Visible = False

.Navigate "about:blank"

.Document.body.InnerHTML = ActiveDocument.Tables(1).Cell(2, 2)

.Document.execCommand "SelectAll"

.Document.execCommand "Copy"

ActiveDocument.Paste Destination = ActiveDocument.Tables(1).Cell(2, 2)

.Quit
End With
End Sub

最佳答案

.cell(2,2) 的两种用途需要两种不同的方法。

要从单元格中获取文本,您需要修改第一行以阅读

.Document.body.InnerHTML = ActiveDocument.Tables(1).Cell(2, 2).range.text  

在第二种情况下,您的术语不正确。应该是

ActiveDocument.Tables(1).Cell(2, 2).range.paste

您可以很容易地获得有关个别关键字/属性的帮助。在 VBA IDE 中,只需将光标放在关键字/属性上,然后按 F1。您将被带到关键字/属性的 MS 帮助页面。有时,当有多个备选方案时,您会有一个额外的选择步骤。

您还应该知道属性 .cell(row,column) 很容易失败,因为它依赖于它们在表中没有合并的单元格。一种更可靠的方法是使用 .cells(index) 属性。

可能您可以采取另一种方法并使用通配符搜索来查找标签,然后在应用合适的链接样式的同时替换您需要的部分(您将无法使用段落样式,因为您将尝试仅格式化部分段落和字符样式似乎不适用于查找/替换)。

下面是删除 HTML 标记并格式化剩余文本的代码示例

Option Explicit

Sub replaceHTML_WithFormattedText()

' a comma seperated list of HTML tags
Const myTagsList As String = "strong,small,b,i,em"

' a list of linked styles chosen or designed for each tag
' Paragraph styles cannot be used as we are replacing only part of a paragraph
' Character styles just don't seem to work
' The linked styles below were just chosen from the default Word styles as an example
Const myStylesList As String = "Heading 1,Heading 9,Comment Subject,Intense Quote,Message Header"

' <, > and / are special characters therefore need escaping with '\' to get the actual character
Const myFindTag As String = "(\<Tag\>)(*)(\<\/Tag\>)"
Const myReplaceStr As String = "\2"

Dim myTagsHTML() As String
Dim myTagsStyles() As String
Dim myIndex As Long

myTagsHTML = Split(myTagsList, ",")
myTagsStyles = Split(myStylesList, ",")

If UBound(myTagsHTML) <> UBound(myTagsStyles) Then
MsgBox "Different number of tags and Styles", vbOKOnly
Exit Sub

End If

For myIndex = 0 To UBound(myTagsHTML)

With ActiveDocument.StoryRanges(wdMainTextStory).Find
.ClearFormatting
.Format = True
.Text = Replace(myFindTag, "Tag", Trim(myTagsHTML(myIndex)))
.MatchWildcards = True
.Replacement.Text = myReplaceStr
.Replacement.Style = myTagsStyles(myIndex)
.Execute Replace:=wdReplaceAll

End With

Next

End Sub

关于html - 使用 VBA 将带有 HTML 标记的文本呈现为 Word 表格中的格式化文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360632/

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