2011-12-06 37 views
14

Tôi muốn tạo Excel trong đó chỉ một cột cụ thể bị khóa (Chỉ đọc) và phần còn lại có thể chỉnh sửa được,Khóa cột đơn trong Excel bằng cách sử dụng Apache POI

Tôi đang sử dụng cách tiếp cận sau, nhưng dường như không hoạt động.

Tạo hai kiểu ô, một ô có setLocked (true) và một với setLocked (false).

Sau đó, áp dụng kiểu khóa cho tất cả các ô trong cột cần khóa và kiểu mở khóa cho tất cả các ô khác.

Bảo vệ trang tính bằng sheet.protectSheet ("");

Nhưng khi tôi mở Excel đã tạo trong văn phòng mở, tôi nhận thấy rằng tất cả các ô bị khóa!

Không ai trong số chúng có thể chỉnh sửa được.

Làm cách nào để đạt được yêu cầu trên?

P.S: Tôi không thể sử dụng phương pháp xác thực dữ liệu.

+0

http://stackoverflow.com/questions/8502552/make-column-as-read-only-using-apache-poi – ravi

Trả lời

19

Nếu bạn làm điều ngược lại, nó hoạt động. Bảo vệ toàn bộ trang tính và gọi setLocked(false) cho các ô có thể chỉnh sửa được.

String file = "c:\\poitest.xlsx"; 
FileOutputStream outputStream = new FileOutputStream(file); 
Workbook wb = new XSSFWorkbook(); 

CellStyle unlockedCellStyle = wb.createCellStyle(); 
unlockedCellStyle.setLocked(false); 

Sheet sheet = wb.createSheet(); 
sheet.protectSheet("password"); 
Row row = sheet.createRow(0); 
Cell cell = row.createCell(0); 
cell.setCellValue("TEST"); 
cell.setCellStyle(unlockedCellStyle); 

wb.write(outputStream); 
outputStream.close(); 
+0

phương pháp trên không làm việc cho tôi. Im trên mac mặc dù. – Bobo

+2

để rõ ràng hơn, toàn bộ sổ làm việc bị khóa bao gồm cả ô được cho là sẽ được mở khóa. – Bobo

Các vấn đề liên quan