2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SXSSFWorkbook(3.16 or older)を使ってEXCEL出力するときにセル内改行が増幅される問題の解決方法

Last updated at Posted at 2017-08-17

概要

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…

2
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?