2015-03-02 84 views
0

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

+0

当你说“新行”时,你是指新段落还是软回报?你是否满足控制块级别(即包含段落)或内联? – JasonPlutext 2015-03-02 22:19:12

+0

内容控件不包含段落。每个句子都应该出现在新的一行中(每句话之后都会有一个硬性的回复)。 – 2015-03-03 07:51:50

回答

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”(或任何指示你喜欢),并且你让你的文件启用宏。

+0

谢谢,你能告诉我你是如何将VBA代码添加到内容控制的? – 2015-03-12 12:09:25

+0

我没有将VBA代码添加到内容控件,而是仅将文档添加到测试中。将代码添加到Content Control是不可能的。如果您确实希望在您的文档中发生换行而不是Java代码,则可以为Document.Open事件编写处理程序,并处理所有ContentControl以添加换行符。我会更新我的答案,向您展示必要的步骤。 – 2015-03-12 12:15:08

+0

感谢您的帮助,您赢得了赏金! – 2015-03-13 07:37:30

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

+0

谢谢,我希望配置内容控制本身,而不是使用Java,但如果没有其他选项将尝试此操作。 – 2015-03-03 08:41:34