2015-03-02 88 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