文章目录
最近在开发的过程中遇到了批量修改的操作,不过是通过导出的数据在excel修改后在导入进来,来完成修改的效果,这样的话就需要在导出的数据中传入唯一字段用于作为数据标识,比如设备的SN号,以及一些其他的展示字段,但这些字段用户是不可以去修改的,如何限制用户去修改这些字段成为了我们这篇文章的内容。
由于若依框架中excel的导入导出使用的是POI,所以如果使用原生框架遇到问题的也可以参考这篇文章。
思路
1.将需要锁定的单元格为锁定状态;
2.不需要锁定的设置为解锁状态;
3.单元格填充完毕后设置sheet
表格为受保护状态并设置密码。
因为POI不支持直接对单元格设置锁定,所以需要设置保护状态,再对单元格的锁定状态做操作,如果不设置保护状态单元格还是可以编辑的。
期间遇到的问题
将单元格设置为不可编辑状态后,整个表都不可以编辑;
因为单元格默认的状态就是锁定状态,需要将不需要锁定的单元格进行解锁。
若依框架导出时如何让某列或某个单元格不可编辑的功能集成
1.首先在若依的自定义注解类Excel
中加入isLock
注解参数
/**
* @Description: 该列是否被锁定,被锁定的列不可编辑 TODO 2023/5/26 新增让单元格列不可编辑逻辑
* @Param: []
* @return: boolean
* @Author: TangBoBoa
* @Date: 2023/5/26
*/
public boolean isLock() default false;
2.在ExcelUtil
中修改exportExcel
、createCell
和addCell
方法:
新增的代码用start
,end
做了标识
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @return 结果
*/
public void exportExcel(HttpServletResponse response)
{
try
{
writeSheet();
// 设置单元格为保护状态 TODO 2023/5/26 新增让单元格列不可编辑逻辑——————————————————start
sheet.protectSheet("password");
// 设置单元格为保护状态 TODO 2023/5/26 新增让单元格列不可编辑逻辑——————————————————end
wb.write(response.getOutputStream());
}
catch (Exception e)
{
log.error("导出Excel异常{}", e.getMessage());
}
finally
{
IOUtils.closeQuietly(wb);
}
}
/**
* 创建单元格
*/
public Cell createCell(Excel attr, Row row, int column)
{
// 创建列
Cell cell = row.createCell