HSSFWorkbook 锁定部分单元格,或者锁定一个单元格

最近的项目中用到了poi方式创建excel文件,

某些单元格要进行锁定,某些单元格需要进行填写选项的预设值,

发现有两种需求

1、锁定大部分的单元格

2、只锁定某一个单元格

就以上两种情况,有不同的解决办法

 需求1:锁定大部分的单元格

1.1创建Excel 及其sheet

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("锁定大部分单元格的Excel");

1.2如果要锁定单元格,必须给shee设置密码,默认excel的sheet对应的单元格全部锁定

给锁定的单元格设置密码 !!,密码为  ”edit“

    sheet.protectSheet("edit");
1.3 给不需要锁定的单元格解锁

1.3.1 创建一个不锁定的cellstyle

        public HSSFCellStyle unLockStyle(HSSFWorkbook workbook) {
                HSSFCellStyle cellStyle = workbook.createCellStyle();
                cellStyle.setLocked(false);
                return cellStyle;
        }

1.3.2 创建不锁定的单元格并解锁

  for (int i = 3; i < 100; i++) {
                        row = sheet.createRow(i);
                        // 创建普通单元格,这个单元格是最普通的锁定状态的
                        for (int j = 0; j < width; j++) {
                                cell = row.createCell(j);
                                HSSFCellStyle cellStyle2 = workbook.createCellStyle();

                                cell.setCellStyle(unLockStyle(workbook));
                        }
                }

以上就创建了不锁定的单元格,除了第3行到100行的0到width列外,其他都是锁定状态


 需求2:只锁定某一个单元格


2.1创建excel及其sheet

 HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet sheet = workbook.createSheet("只锁定某一个单元格");

2.2 创建锁定的方法

  void setDataValidation(HSSFCell cell) {
                // 单元格设置数据有效性
                DVConstraint constraint = DVConstraint.createNumericConstraint(
                        DVConstraint.ValidationType.INTEGER, DVConstraint.OperatorType.GREATER_OR_EQUAL, "0", null);
                //设置数据有效性加载在哪个单元格上。
                //四个参数分别是:起始行、终止行、起始列、终止列
                CellRangeAddressList regions = new CellRangeAddressList(
                        cell.getRowIndex(), cell.getRowIndex(), cell.getColumnIndex(), cell.getColumnIndex());
                //数据有效性对象
                HSSFDataValidation data_validation = new HSSFDataValidation(regions, constraint);
                //加入sheet
                sheet.addValidationData(data_validation);
        }


2.3 创建第3行第6列的单元格

 HSSFRow row = sheet.createRow(3);
            
 HSSFCell cell = row.createCell(6);



2.4 锁定这个单元格

this.setDataValidation(cell, sheet);
2.2里面分方法可以不懂,只要调用,并将cell和sheet作为实参传入就可以了

2.5效果如下





如有错误,请各位指正


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值