最近在處理word文檔導出時遇到了一個問題就是當導出數據需要換行時不論是使用“\r\n”還是“^p”等等各種網上說的方法都沒辦法解決,“\n”在這里打出來也只是個空格,后來找到了解決辦法:
xwpfRun.AddBreak(BreakType.TEXTWRAPPING)
xwpfRun.AddBreak(BreakClear.ALL)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/// <summary>
/// 創建Word文檔中表格段落實例和設置表格段落文本的基本樣式(字體大小,字體,字體顏色,字體對齊位置)
/// </summary>
/// <param name="document">document文檔對象</param>
/// <param name="table">表格對象</param>
/// <param name="fillContent">要填充的文字</param>
/// <param name="paragraphAlign">段落排列(左對齊,居中,右對齊)</param>
/// <param name="rowsHeight">設置文本位置(設置兩行之間的行間),從而實現table的高度設置效果 </param>
/// <param name="isBold">是否加粗(true加粗,false不加粗)</param>
/// <param name="fontSize">字體大小</param>
/// <returns></returns>
private
static
XWPFParagraph SetTableParagraphInstanceSetting(XWPFDocument document, XWPFTable table,
string
fillContent, ParagraphAlignment paragraphAlign,
int
rowsHeight,
bool
isBold,
int
fontSize = 10)
{
var
para =
new
CT_P();
XWPFParagraph paragraph =
new
XWPFParagraph(para, table.Body);
//創建表格中的段落對象
paragraph.Alignment = paragraphAlign;
//文字顯示位置,段落排列(左對齊,居中,右對齊)
XWPFRun xwpfRun = paragraph.CreateRun();
//創建段落文本對象
xwpfRun.AddBreak(BreakType.TEXTWRAPPING);
//換行
xwpfRun.SetText(fillContent);
xwpfRun.FontSize = fontSize;
//字體大小
xwpfRun.IsBold = isBold;
//是否加粗
xwpfRun.SetFontFamily(
"宋體"
, FontCharRange.None);
//設置字體(如:微軟雅黑,華文楷體,宋體)
xwpfRun.SetTextPosition(rowsHeight);
//設置文本位置(設置兩行之間的行間),從而實現table的高度設置效果
return
paragraph;
}
|
實現效果:
注意:這里的換行是為了改變文字的位置。所以AddBreak()需要放在SetText()之前由此實現以上效果。
我看到有人說 xwpfRun.AddCarriageReturn()這個也可以換行,但是試過之后也是只有空格的效果,還試過用(char)11進行內容換行,但是導出來的word打不開,暫時只有以上兩種方法有效果;
如果想指定某個單元格內容換行的話,這里需要把這個方法加個參數修改一下
調用:
效果:
BreakType
參考:
https://www.iteye.com/blog/elim-2037193
https://blog.csdn.net/alai7150/article/details/103802834
https://blog.csdn.net/s1040342522/article/details/78456042
https://www.cnblogs.com/fger/p/11187954.html
https://www.cnblogs.com/sun-flower1314/p/10128796.html
http://poi.apache.org/apidocs/dev/org/apache/poi/xwpf/usermodel/XWPFRun.html