我在Word模板中使用内容控件,并在其中以编程方式添加文本(使用java)。这工作正常。现在我想在文本中的每个新句子中插入一个新行。有没有办法配置内容控件,以便它自动执行此操作?在Word中配置内容控件以添加新行
回答
恐怕你不能配置内容控件来自动执行此操作。但是,如果通过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”(或任何指示你喜欢),并且你让你的文件启用宏。
谢谢,你能告诉我你是如何将VBA代码添加到内容控制的? – 2015-03-12 12:09:25
我没有将VBA代码添加到内容控件,而是仅将文档添加到测试中。将代码添加到Content Control是不可能的。如果您确实希望在您的文档中发生换行而不是Java代码,则可以为Document.Open事件编写处理程序,并处理所有ContentControl以添加换行符。我会更新我的答案,向您展示必要的步骤。 – 2015-03-12 12:15:08
感谢您的帮助,您赢得了赏金! – 2015-03-13 07:37:30
可以使用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
谢谢,我希望配置内容控制本身,而不是使用Java,但如果没有其他选项将尝试此操作。 – 2015-03-03 08:41:34
当你说“新行”时,你是指新段落还是软回报?你是否满足控制块级别(即包含段落)或内联? – JasonPlutext 2015-03-02 22:19:12
内容控件不包含段落。每个句子都应该出现在新的一行中(每句话之后都会有一个硬性的回复)。 – 2015-03-03 07:51:50