You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:54:05