JAVA8で、Apache POIを使用して<br>タグを含む文字列をExcel出力しています。
出力前に<br>を\nに変換して以下のように出力していますが、
行末の\nが出力時に消えてしまうのを解決したいです(出力するようにしたい)
java
1// 抜粋です 2import org.apache.poi.ss.usermodel.CellStyle; 3import org.apache.poi.ss.usermodel.CreationHelper; 4import org.apache.poi.ss.usermodel.Font; 5import org.apache.poi.ss.usermodel.IndexedColors; 6import org.apache.poi.ss.usermodel.Row; 7import org.apache.poi.ss.usermodel.Sheet; 8import org.apache.poi.ss.usermodel.Workbook; 9import org.apache.poi.xssf.usermodel.XSSWorkbool; 10 11Workbook wb = new XSSFWorkbook(); 12Sheet sheet = wb.createSheet("hoge"); 13CreationHelper helpser = wb.getCreationHelper(); 14Font font = wb.createFont(); 15font.setFontName("MS Pゴシック"); 16 17CellStyle defaultStyle = wb.createCellStyle(); 18defaultStyle.setFont(font); 19defaultStyle.setDataFormat(helper.createDataFormat().getFormat("text")); 20defaultStyle.setBorderTop(CellStyle.BORDER_THIN); 21defaultStyle.setBorderRight(CellStyle.BORDER_THIN); 22defaultStyle.setBorderBottom(CellStyle.BORDER_THIN); 23defaultStyle.setBorderLeft(CellStyle.BORDER_THIN); 24 25Row row = sheet.createRow(2); 26 27row.createCell(7).setCellStyle(defaultStyle); 28row.getCell(7).setCellValue(hoge.getHoge().replace("<br>", "\n")); 29 30sheet.autoSizeColumn(7, true); 31 32wb.write(fos);
例えば、hoge.getHoge()が以下の値だとすると
1行目<br>2行目<br>3行目<br><br>
replaceの結果は以下になりますが
1行目\n2行目\n3行目\n\n
Excelの出力内容(セル内改行)は、以下になってしまいます。
/_/_/_/_/_/_/_/_/_/_/_/_行頭 1行目 2行目 3行目 /_/_/_/_/_/_/_/_/_/_/_/_行末
期待している出力内容は以下なのですが、
解決方法をご教示いただきたいです。
/_/_/_/_/_/_/_/_/_/_/_/_行頭 1行目 2行目 3行目 /_/_/_/_/_/_/_/_/_/_/_/_行末
因みに以下のように、別の文字で挟むと出力はされます。
(”_”の代わりに半角スペースでも同じような出力が可能です。)
java
1row.getCell(7).setCellValue(hoge.getHoge().replace("<br>", "\n") + "_");
/_/_/_/_/_/_/_/_/_/_/_/_行頭 1行目 2行目 3行目 _ /_/_/_/_/_/_/_/_/_/_/_/_行末
記載がわかりづらかったらすみません。
不足点などあればご指摘ください。
使用ライブラリは以下です
poi-3.7.jar poi-ooxml-3.7.jar
以上、よろしくお願いいたします。
追記(2020/04/18 3時42分)
以下のように、空文字で挟むのは駄目でした。(当たり前かもしれませんが)
他には”¥r¥n”で挟むことも試しました。がこちらも駄目
java
1row.getCell(7).setCellValue(hoge.getHoge().replace("<br>", "\n") + "");
/_/_/_/_/_/_/_/_/_/_/_/_行頭 1行目 2行目 3行目 /_/_/_/_/_/_/_/_/_/_/_/_行末
追記(2020/04/18 4時04分)
追記書いてて思い立ったのでメモ
半角スペースで挟んで出力
→出力内容をgetCellValueして最終行のスペースを除いてsetすると?
根本解決ではないし、力技だし、
同じことが起きそうだし、ですが念の為確認します。
追記(2020/04/20 19時00分)
上記のgetStringCellValueで取得したものをsetする方法でもだめでした。
setRichStringする方法も試したかったのですが、RichText形式の変換方法などよくわからず断念
お手上げです。
マクロ仕込んで何とかする方法を調べてみます。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/17 18:40
2020/04/20 09:57