700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【踩坑笔记】java使用poi导出word文档换行

【踩坑笔记】java使用poi导出word文档换行

时间:2021-01-09 04:29:21

相关推荐

【踩坑笔记】java使用poi导出word文档换行

【踩坑笔记】java使用poi导出word文档换行

poi导出word,没有使用模板替换方式,而是设置创建paragraph和cell生成word。单元格内容填充的段落没有自动换行,原来换行是这么写的:

infoTableRow.getCell(1).setText(changeLine(entry.getValue()));

/*** word表格内换行* @param value* @return*/private static String changeLine(String value) {StringBuffer buffer = new StringBuffer();if (value.indexOf("\n") > 0) {String[] strings = value.split("\n");for (int i = 0; i < strings.length; i++) {if (i == 0) {buffer.append(strings[i].trim());} else {buffer.append("\r\n");buffer.append(strings[i].trim());}}} else {buffer.append(value);}return buffer.toString();}

java换行符“\n”在word文档中不生效,使用“\r”,“\r\n”,“(char)11”,“^p”,“< br>”,“<w:br>”,“<w:p><w:p/>” 等替换均无法实现单元格内换行的功能(“\r\n”没有换行,但是有空格效果)。

实现单元格内自动换行:

String value = entry.getValue();// 设置单元格内段落XWPFParagraph contentParagraph = infoTableRow.getCell(1).getParagraphs().get(0);XWPFRun run = contentParagraph.createRun();setWrap(value, contentParagraph, run);

/*** 设置换行** @param value需要换行的内容* @param paragraph 当前段落* @param run*/private static void setWrap(Object value, XWPFParagraph paragraph, XWPFRun run) {if (((String) value).indexOf("\n") > 0) {//设置换行String[] text = value.toString().split("\n");run = paragraph.insertNewRun(0);for (int f = 0; f < text.length; f++) {if (f == 0) {run.setText(text[f].trim());} else {//run.addCarriageReturn();//硬回车// 换行run.addBreak();run.setText(text[f].trim());}}} else {run.setText((String) value);}}

单元格cell相当于一个小的document。原始代码中使用setText()方法填充内容,为了实现分行效果修改为paragraph。addCarriageReturn依然没有实现单元格内分行的效果(单元格外可以),更改为addBreak()分行正常。

参考链接:/bdy9600/article/details/45688855

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。