poi 替换word里的\n 变成 换行

版权声明:本文为博主原创文章,未经博主允许不得转载。 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]);
				                }
							}
						}
					}
				}
			}
	}

猜你喜欢

转载自blog.csdn.net/qijingpei/article/details/83754483