版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qijingpei/article/details/83754483
需求
poi库,将word里的\n变成换行,这样才能把数据库里有换行的数据原样复制到word里,使用了run.addCarriageReturn();回车符,但是不起作用,所以用的是run.addBreak();
参考stackoverflow
代码
public void forverseTableCells(String sourceFile, String targetFile) {
XWPFDocument doc = new XWPFDocument(new FileInputStream(sourceFile));
for(XWPFTable table : doc.getTables()) {//表格
for(XWPFTableRow row : table.getRows()) {//行
for(XWPFTableCell cell : row.getTableCells()) {//单元格 : 直接cell.setText()只会把文字加在原有的后面,删除不了文字
addBreakInCell(cell);
}
}
}
FileOutputStream fos = new FileOutputStream(targetFile);
doc.write(fos);
fos.close();
System.out.println("结束");
}
private void addBreakInCell(XWPFTableCell cell) {
if(cell.getText() != null && cell.getText().contains("\n")) {
for (XWPFParagraph p : cell.getParagraphs()) {
for (XWPFRun run : p.getRuns()) {//XWPFRun对象定义具有一组公共属性的文本区域
if(run.getText(0)!= null && run.getText(0).contains("\n")) {
String[] lines = run.getText(0).split("\n");
if(lines.length > 0) {
run.setText(lines[0], 0); // set first line into XWPFRun
for(int i=1;i<lines.length;i++){
// add break and insert new text
run.addBreak();//中断
// run.addCarriageReturn();//回车符,但是不起作用
run.setText(lines[i]);
}
}
}
}
}
}
}