前言
最近遇到一個bug,項目里使用openoffice處理附件的上傳、下載和預(yù)覽,但在預(yù)覽時出現(xiàn)excel內(nèi)容異常問題荸百,具體表現(xiàn)為預(yù)覽的時候某個單元格出現(xiàn)大量重復(fù)內(nèi)容,下載下來卻還是正常的滨攻。
解決思路
在大量嘗試復(fù)現(xiàn)后發(fā)現(xiàn)够话,導(dǎo)致重復(fù)內(nèi)容的原因是這個單元格有換行符號,又因為源文件下載下來其實沒有錯誤铡买,所以我只在預(yù)覽接口添了一個遍歷單元格的方法更鲁,把所有換行符去掉。
// 預(yù)覽時如果excel單元格里存在換行符會導(dǎo)致內(nèi)容異常 在這里去掉所有換行符
// 輸入的是input流 輸出也是input流
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(newFileBytes);
Workbook workbook = WorkbookFactory.create(arrayInputStream);
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i);
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == CellType.STRING) {
String cellValue = cell.getStringCellValue();
cellValue = cellValue.replaceAll("\\r|\\n", "");
cell.setCellValue(cellValue);
}
}
}
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
workbook.write(os);
newFileBytes = os.toByteArray();
然后把結(jié)果轉(zhuǎn)成input流交給openoffice做預(yù)覽奇钞,結(jié)果也如預(yù)期一樣澡为,單元格內(nèi)所有的換行符都去掉后內(nèi)容不再出現(xiàn)重復(fù)。