我想删除单元格内容但保留其样式,但它总是删除样式和内容。这是我的代码:
private static void RefreshReport(String sheetName, String resultColumn) {
try {
InputStream inp = new FileInputStream(getExcelFile());
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheet(sheetName);
int colResult = getColumnResult(sheet, resultColumn);
int rowStart = getRowResult(sheet, resultColumn);
int rowEnd = Math.max(20, sheet.getLastRowNum());
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row r = sheet.getRow(rowNum);
if (r != null) {
Cell cell = r.createCell(colResult);
if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
CellStyle cs = wb.createCellStyle();
cs = cell.getCellStyle();
r.removeCell(cell);
cell = r.createCell(colResult);
cell.setCellStyle(cs);
}
}
}
FileOutputStream fileOut = new FileOutputStream(getExcelFile());
wb.write(fileOut);
fileOut.close();
inp.close();
} catch (Exception e) {
e.printStackTrace();
}
}
任何帮助都会很棒。
答案 0 :(得分:3)
您的方法无法正常工作的原因是,如果行createCell
不是r
,您始终会调用null
。这将覆盖已存在的任何Cell
,包括内容和样式。
您需要做的是致电getCell
。这将检索该列索引处的Cell
(如果存在),或null
(如果不存在)。然后,如果它存在,您可以像处理一样处理Cell
。
if (r != null) {
Cell cell = r.getCell(colResult);
if (cell != null && cell.getCellType() != CellType.BLANK) {
// rest of your code here
除了您拥有的删除/重新创建方法之外,您可以将单元格类型设置为BLANK
。这会将内容设置为空白,但它也会保留当前在该单元格上的单元格样式。无需删除单元格并重新创建它。
if (cell.getCellType() != CellType.BLANK) {
cell.setCellType(CellType.BLANK);
}