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效果如下





如有錯誤,請各位指正


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章