首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Document.Paragraphs.Add()创建多个单词段落

用Document.Paragraphs.Add()创建多个单词段落
EN

Stack Overflow用户
提问于 2018-05-01 18:11:51
回答 4查看 6.7K关注 0票数 1

我正在使用Excel中的宏向Word文档添加信息。我试图在现有的Word文档中添加10行,如下所示:

代码语言:javascript
复制
Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        Set paragraph = doc.Paragraphs.Add()

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " & CStr(idx)

    Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub

我在C:\temp\document.docs有一个空的Word文档,但是在运行代码之后,只有一行的文本“第10段”。我在等10条线。

据我所知,没有参数的Paragraphs.Add()应该创建一个新的段落。也许我错误地认为,一个新的段落产生了一个新的行?是否有另一种方法在循环中添加10行,其中每个行都可以具有特定(不相同)的样式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-01 18:26:28

您正在添加的“段落”在末尾没有段落标记。

将该行更改为

代码语言:javascript
复制
paragraph.Range.Text = "Paragraph " & CStr(idx) & vbCr

这应该能解决你的问题。

票数 3
EN

Stack Overflow用户

发布于 2018-05-01 19:31:46

实际上,在原始代码中发生的情况是,当您使用

代码语言:javascript
复制
Doc.Paragraphs.Add

所以只有一段。有很多种方法可以绕过这件事。一种是使用InsertAfter,正如注释中提到的那样。(请注意,如果要使用此方法,将新段落指定为字符串的一部分的正确方法是vbCr或Chr(13)。单词很容易误解任何其他东西!)

我个人的偏好是使用可以独立于整个文档操作的Range对象。例如,可以这样做:

代码语言:javascript
复制
Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")
    Dim rng as Word.Range
    Set rng = doc.Content

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        'So that the next thing inserted follows instead of replaces
        rng.Collapse wdCollapseEnd           
        Set paragraph = rng.Paragraphs.Add

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " & CStr(idx)
     Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub
票数 3
EN

Stack Overflow用户

发布于 2019-04-05 18:25:11

我也有过类似的问题。添加doc.Range.InsertParagraphAfter解决了我的问题。下面的代码应该适用于您:

代码语言:javascript
复制
Sub AddParagraphs()

    'Open Word
    Dim wordApp As Word.Application
    Set wordApp = CreateObject("Word.Application")

    'Open
    Dim doc As Word.document
    Set doc = wordApp.Documents.Open("c:\temp\document.docx")

    'Add 10 paragraphs
    Dim idx As Integer
    For idx = 1 To 10

        Dim paragraph As Word.paragraph
        Set paragraph = doc.Paragraphs.Add()

        paragraph.Range.style = wdStyleHeading2
        paragraph.Range.text = "Paragraph " 

        doc.Range.InsertParagraphAfter

    Next

    doc.Save

    doc.Close
    wordApp.Quit

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50121575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档