如何使用apache poi删除excel中的单元格内容

时间:2014-11-19 04:41:09

标签: java excel apache-poi

我想删除单元格内容但保留其样式,但它总是删除样式和内容。这是我的代码:

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();
        }
    }

任何帮助都会很棒。

1 个答案:

答案 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);
}