概要
SXSSFWorkbookを使ってEXCEL出力するときは、
ver poi-3.17 or laterを使いましょう。
以上。
以下、どうしてもpoi-3.16を使わないといけない場合のメモとして残します。
事象
SXSSFWorkbook使用時、改行コードがCRLFの文字列をセルにセットすると、セル内改行回数が2倍となったのEXCELファイルが生成される。
上記省メモリ版以外を使用時はCRLF改行でも倍増しない。
結論
SXSSFWorkbookを使う場合、セルにセットする文字列の改行コードがCRLFであれば、CRのみ、またはLFのみにしてから渡すようにする。
未テスト例
SXSSFWorkbook wb = new SXSSFWorkbook();
// 略
String setString = "1行目\r\n2行目";
Row row = sheet1.createRow(rowNum);
Cell cell = row.createCell(colNum);
cell.setCellValue(setString.replaceAll("\r\n", "\n"));
不具合の原因
ソースを'\r'でGrepしたらわかる。
org.apache.poi.xssf.streaming.SheetDataWriterのswitchで1文字ずつ走査して、
'\r'と'\n'それぞれ改行に変換しているため。
"\r\n"の考慮漏れ。
poi-3.16でも直ってませんでした。
以上。
2019/3/19追記
3.17で修正されたようです。
ご指摘いただきました、@yuki-teraokaさん、ありがとうございます。
Bugzilla: Bug 61048 - Newlines in cells not rendering with SXSSF
github: [Bug-61048] SXSSF module writes wrong escape sequence for carriage re…