我在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