繁体   English   中英

在Word中配置内容控件以添加新行

[英]Configuring a Content Control in Word to add New Lines

我在Word模板中使用内容控件,在其中以编程方式添加文本(使用Java)。 这很好。 现在,我想在文本中的每个新句子处插入一行。 有没有一种方法可以配置内容控件,使其自动执行此操作?

恐怕您无法将内容控件配置为自动执行此操作。

但是,如果通过Word对象模型填充内容控件,则可以简单地使用RTF内容控件或纯文本内容控件,后者具有“允许回车(多段)”选项(对象中的MultiLine)模型”),并用包含换行符的文本填充。

为了进行快速测试,我将这样的纯文本内容控件添加到了一个空文档中,并使用了以下VBA代码:

Sub FillContentControl()
    ContentControls(1).Range.Text = "Sentence One." & vbNewLine & "Sentence Two."""
End Sub 

在我的示例中,这产生了以下输出:

Sentence One.
Sententce Two.

当然,您应该在Java代码中添加换行符。 您只需要检测句子的结尾即可。

如果,正如您对基于docx4j的解决方案的要求所表明的那样,您没有通过Word填写内容控件,而是直接在docx中填写内容,那么我想到了另一个涉及VBA宏的解决方法(我通常不建议这样做):为Document.Open事件添加事件处理程序,以更新文档中所有已标记的内容控件。 它可能看起来像这样:

Private Sub Document_Open()
    For Each ContentControl In ThisDocument.ContentControls
        If ContentControl.Tag = "TODO_Add_Linebreaks" Then
            ContentControl.Range.Text = Replace(ContentControl.Range.Text, ". ", "." & vbNewLine)
            ContentControl.Tag = ""
        End If
    Next
End Sub

第二种解决方案要求您添加带有标签“ TODO_Add_Linebreaks”(或您喜欢的指示)的内容控件,并使您的文档启用宏。

您可以使用w:br元素,如下所示:

<w:p>
  <w:sdt>
    <w:sdtPr>
      <w:id w:val="711844519"/>
    </w:sdtPr>
    <w:sdtContent>
      <w:r>
        <w:t>foo</w:t>
        <w:br/>
        <w:t>bar</w:t>
      </w:r>
    </w:sdtContent>
  </w:sdt>
  <w:r>
</w:p>

有关如何使用docx4j添加其中之一,请参见linebreaks-in-strings

暂无
暂无

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

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