繁体   English   中英

Word 2 HTML VBA宏

[英]Word 2 HTML VBA Macro

我有多个Word文档,都使用相同的格式。 现在,我将所有这些内容都作为HTML页面放置在内部帮助门户中。 我想到创建一个宏,该宏在运行时会自动生成有效的HTML文件,可以将其直接上传到Web服务器。 我可以使用vba代码将所有内容作为HTML代码获得。 但是我停留在列表段落中。 我正在为所有列表项获取<Li></Li>标签,但是如何获得环绕它们的<ol><ul>标签?

此处提供示例文档

下面是我的VBA代码。

    Sub ListParagraphs()
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs

If p.Style = ActiveDocument.Styles("Title") Then
Debug.Print "<h2>" & p.Range.Text & "</h2>"
End If

If p.Style = ActiveDocument.Styles("Heading 1") Then
Debug.Print "<h3>" & p.Range.Text & "</h3>"
End If

If p.Style = ActiveDocument.Styles("Heading 2") Then
Debug.Print "<h4>" & p.Range.Text & "</h4>"
End If

If p.Style = ActiveDocument.Styles("Normal") Then
Debug.Print "<p>" & p.Range.Text & "<p>"
End If

If p.Style = ActiveDocument.Styles(wdStyleListParagraph) Then
    p.Range.Select
    Selection.EndKey Unit:=wdLine
    Debug.Print "<li>" & p.Range.Text & "</li>"
End If

Next p

End Sub

我得到的输出是:

        <h2>Main Title of page
    </h2>
    <p>On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document. You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks. When you create pictures, charts, or diagrams, they also coordinate with your current document look.
    <p>
    <h3>Sub topic heading – number 1
    </h3>
    <p>On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document. You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks.
    <p>
    <li>Instruction number one. You can use these galleries to insert tables, headers, footers, lists.
    </li>
    <li>/
    </li>
    <li>Instruction number two. This is a small step.
    </li>
    <li>/
    </li>
    <li>More instructions go here. 
    </li>
    <li>/
    </li>
    <h3>Subtopic heading - number 2
    </h3>
    <p>On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document. You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks. When you create pictures, charts, or diagrams, they also coordinate with your current document look.
    <p>
    <h4>Sub sub-topic under number 2
    </h4>
    <p>On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document.
    <p>
    <li>Remember the following points. 
    </li>
    <li>/
    </li>
    <li>More instructions.
    </li>
    <li>/
    </li>
    <h4>Second sub topic under number 2
    </h4>
    <li>Line one.
    </li>
    <li>/
    </li>
    <li>Line 2.
    </li>
    <li>/
    </li>
    <p>
    <p>
    <p>
    <p>
    <p>
    <p>

哦,是的! 非常感谢enhzflep给我的提示! 下面的代码按预期工作。

Dim lastElement As String
Dim typeElement As String

lastElement = "none"
typeElement = "none"
For Each p In ActiveDocument.Paragraphs

If p.Style = ActiveDocument.Styles("Title") Then
    If lastElement = "list" Then
        stream.WriteLine "</" & typeElement & ">"
    End If

    stream.WriteLine "<h2>" & p.Range.Text & "</h2>"
    lastElement = "title"

End If

If p.Style = ActiveDocument.Styles("Heading 1") Then
    If lastElement = "list" Then
            stream.WriteLine "</" & typeElement & ">"
    End If

stream.WriteLine "<h3>" & p.Range.Text & "</h3>"
lastElement = "heading1"

End If

If p.Style = ActiveDocument.Styles("Heading 2") Then
    If lastElement = "list" Then
            stream.WriteLine "</" & typeElement & ">"
    End If

stream.WriteLine "<h4>" & p.Range.Text & "</h4>"
lastElement = "heading2"

End If

If p.Style = ActiveDocument.Styles("Normal") Then
    If lastElement = "list" Then
            stream.WriteLine "</" & typeElement & ">"
    End If

stream.WriteLine "<p>" & p.Range.Text & "</p>"
lastElement = "normal"

End If

If p.Style = ActiveDocument.Styles(wdStyleListParagraph) Then
    If p.Range.ListFormat.ListType = wdListSimpleNumbering Then
       typeElement = "ol"
       ElseIf p.Range.ListFormat.ListType = wdListBullet Then
       typeElement = "ul"
    End If

    If lastElement <> "list" Then
        stream.WriteLine "<" & typeElement & ">"
    End If
    stream.WriteLine "<li>" & p.Range.Text & "</li>"
    lastElement = "list"

End If

Next p

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM