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

时间:2015-03-02 10:27:29

标签: java ms-word

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

2 个答案:

答案 0 :(得分:1)

我担心您无法配置内容控件来自动执行此操作。

但是,如果通过Word对象模型填充内容控件,则只需使用富文本内容控件或纯文本内容控件,后者可以选择“允许回车(多个段落)”(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”(或您喜欢的任何指示)添加内容控件,并使文档启用宏。

答案 1 :(得分:0)

您可以使用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