Android Studio开发中如何保存之前的HSSF单元格数值
问题根源
你当前每次执行逻辑都会创建全新的空HSSFWorkbook实例,没有读取本地已经存储的旧Excel文件内容,写入新数据后生成的新文件会直接覆盖原有文件,自然就丢失了旧的单元格数值。
修复方案
按以下流程调整代码即可:
- 先判断目标Excel文件是否存在,存在就读取文件流加载已有工作簿,不存在再新建工作簿
- 操作工作表/行/单元格时,先判断对应对象是否已存在,存在就直接读取复用,不存在再新建
- 所有数据写入完成后,统一将工作簿写入文件流覆盖原文件,做好资源关闭
示例代码参考:
File excelFile = new File(getExternalFilesDir(null), "test.xls"); HSSFWorkbook hssfWorkbook; // 先加载已有文件 if (excelFile.exists()) { FileInputStream fis = new FileInputStream(excelFile); hssfWorkbook = new HSSFWorkbook(fis); fis.close(); } else { hssfWorkbook = new HSSFWorkbook(); } // 处理工作表:先获取下标为0的sheet,不存在再新建 HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); if (hssfSheet == null) { hssfSheet = hssfWorkbook.createSheet(); } // 处理行:这里示例写第targetRowNum行,按需调整行号逻辑 int targetRowNum = 0; HSSFRow hssfRow = hssfSheet.getRow(targetRowNum); if (hssfRow == null) { hssfRow = hssfSheet.createRow(targetRowNum); } // 处理单元格 int targetCellNum = i; HSSFCell hssfCell = hssfRow.getCell(targetCellNum); if (hssfCell == null) { hssfCell = hssfRow.createCell(targetCellNum); } hssfCell.setCellValue(name.getText().toString()); // 写入文件覆盖原文件 FileOutputStream fos = new FileOutputStream(excelFile); hssfWorkbook.write(fos); fos.flush(); fos.close(); hssfWorkbook.close();
注意事项
- 以上代码需要适配Android版本申请对应的文件读写权限,Android 13及以上版本按场景申请对应文件权限
- HSSF仅支持操作
.xls格式的Excel文件,如果需要操作.xlsx格式请改用XSSF相关API - 流操作记得加try-catch捕获IO异常,避免崩溃
内容的提问来源于stack exchange,提问作者Hassan Zulfiqar
相关产品推荐
相关产品推荐

