Java 如何使用ApachePOI删除excel中的单元格内容

Java 如何使用ApachePOI删除excel中的单元格内容,java,excel,apache-poi,Java,Excel,Apache Poi,我想删除单元格内容,但保留其样式,但它总是删除样式和内容。这是我的密码: private static void RefreshReport(String sheetName, String resultColumn) { try { InputStream inp = new FileInputStream(getExcelFile()); Workbook wb = WorkbookFactory.create(inp);

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

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();
        }
    }
private static void RefreshReport(字符串sheetName、字符串resultColumn){
试一试{
InputStream inp=新文件InputStream(getExcelFile());
工作簿wb=WorkbookFactory.create(inp);
Sheet Sheet=wb.getSheet(sheetName);
int colResult=getColumnResult(工作表,结果列);
int rowStart=getRowResult(工作表,结果列);
int rowEnd=Math.max(20,sheet.getLastRowNum());
对于(int-rowNum=rowStart;rowNum

任何帮助都很好。

方法不起作用的原因是,如果行
r
不是
null
,您总是调用
createCell
。这将覆盖任何已存在的
单元格
,包括内容和样式

您需要做的是调用
getCell
。这将检索该列索引处的
单元格
,前提是它存在;如果它不存在,则检索
null
。然后,如果它存在,您可以按您正在执行的操作处理
单元格

if (r != null) {
   Cell cell = r.getCell(colResult);
   if (cell != null && cell.getCellType() != CellType.BLANK) {
       // rest of your code here
除了删除/重新创建方法之外,您还可以将单元格类型设置为
空白
。这会将内容设置为空白,但也会保留该单元格上当前的单元格样式。无需删除单元格并重新创建它

if (cell.getCellType() != CellType.BLANK) {
   cell.setCellType(CellType.BLANK);
}

那你有什么问题。。。请分享您想要的,但此代码无法执行的内容…@Sankumarsingh我想删除单元格内容,但保留其样式。我只是想知道为什么您不设置单元格值而不是删除它?@zawhtut set Cell value将删除单元格样式,这听起来不太正确,但如果为真:拉出样式,设置内容,然后从临时存储样式的位置再次设置样式。