小白的總結,大神勿噴;需要轉載請說明出處,如果有什么問題,歡迎留言
一、需求:
1、某一列 、某一行或某些單元格不可編輯,其他列可以編輯
二、期間遇到的問題
1、無法設置成不可編輯
2、設置為不可編輯,導出后發現所有單元格均不可編輯;
原因:createCell();創建單元格后,單元格默認是鎖定狀態;protectSheet("密碼");保護工作表是保護所有鎖定的單元格;
三、解決問題
不多BB,直接上代碼
HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("sheet名稱"); HSSFCellStyle lockstyle = wb.createCellStyle(); lockstyle.setLocked(true);//設置鎖定 lockstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); lockstyle.setFillForegroundColor(IndexedColors.RED.getIndex());//設置上鎖的單元格背景色 HSSFCellStyle unlockStyle=wb.createCellStyle(); unlockStyle.setLocked(false);//設置未鎖定 for(int i=0;i<10;i++){ HSSFRow row = sheet.createRow(i); for (int j = 0; j < 10; j++) { HSSFCell cell = row.createCell(j); cell.setCellStyle(unlockStyle);//默認是鎖定狀態;將所有單元格設置為:未鎖定;然后再對需要上鎖的單元格單獨鎖定 if(j==1){//這里可以根據需要進行判斷;我這就將第2列上鎖了 cell.setCellStyle(lockstyle);//將需要上鎖的單元格進行鎖定 cell.setCellValue("上鎖了"); }else{ cell.setCellValue("沒上鎖了"); } } } //sheet添加保護,這個一定要否則光鎖定還是可以編輯的 sheet.protectSheet("123456"); FileOutputStream os = new FileOutputStream("D:\\workbook.xls"); wb.write(os); os.close();
四:結果