POI操作excel實現換行問題。
package jp.co.misumi.mdm.batch.common.jobrunner; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.amazonaws.services.devicefarm.model.Test; import jp.co.misumi.mdm.batch.common.def.BatchConstants; import jp.co.misumi.mdm.core.common.excel.writer.ExcelWriterExt; public class Demo { public static void main(String[] args) { // TODO Auto-generated method stub try { Test(); } catch (EncryptedDocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("---END---"); } public static void Test() throws IOException, EncryptedDocumentException, InvalidFormatException { //初始化輸入流 InputStream inp; try { XSSFWorkbook wb = null; try { wb = new XSSFWorkbook("D:/workbook.xlsx"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //創建讀取對應的文件生成對象 //得到第0個工作薄 Sheet sheet = wb.getSheetAt(0); //得到第3行 小標從0開始,所以是2 Row row = sheet.getRow(2); //得到第三行第4個單元格 4D 小標從0開始所以是三 Cell cell = row.getCell(3); //查看該單元格是否定義,如果沒有定義返回NULL //,否則返回一個邏輯上的單元格,如果沒有則創建 //??為什么需要先判斷為空,因為如果該單元格已經 //存在而且已經定義,如果你在創建,原來的單元格 //將會被你重新創建的單元格覆蓋,這樣做可以節約 //你的空間,因為沒有重新創建對象 if (cell == null) cell = row.createCell(3); //設置單元格的類型是String字符串文本類型 cell.setCellType(Cell.CELL_TYPE_STRING); //設定值 //設置單元格中的值 使用有\n換行符 String xxx = "Use \n with word wrap on to create a new line"; cell.setCellValue(xxx); //cell.setCellValue("a test"); CellStyle cs = wb.createCellStyle(); cs.setWrapText(true); cell.setCellStyle(cs); //增加行的高度以適應2行文本的高度,設置高度單位(像素) row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints())); //調整該列寬度適應內容 // sheet.autoSizeColumn((short)2); //重新寫如文件 FileOutputStream fileOut = new FileOutputStream("D:/workbook1.xlsx"); wb.write(fileOut); fileOut.close(); }finally{ } } }
記錄這個是因為就算用了這個方法也換不了,因為我從DB中抽出來的字符串帶\n結果被轉譯成 “\\n”,這個問題怎么也換不了行,沒辦法,只能將抽出的 \n 換成別的標識符然后再去替換了。