1. 程式人生 > >poi 替換word裡的\n 變成 換行

poi 替換word裡的\n 變成 換行

需求

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]);
				                }
							}
						}
					}
				}
			}
	}