2011-12-06 75 views
14

Quiero crear una Excel en la que se bloquea solamente una columna específica (sólo lectura), y el resto son editables,Lock sola columna en Excel usando Apache POI

Estoy utilizando el siguiente enfoque, pero eso no parece funcionar

Crea dos CellStyles, uno con setLocked (verdadero) y otro con setLocked (falso).

A continuación, aplique el estilo bloqueado para todas las celdas de la columna que se debe bloquear y el estilo desbloqueado para todas las demás celdas.

Proteja la hoja utilizando sheet.protectSheet ("");

¡Pero cuando abro el Excel creado en la oficina abierta, veo que todas las celdas están bloqueadas!

Ninguno de ellos es editable.

¿Cómo puedo lograr el requisito anterior?

P.S: No puedo usar el enfoque de validación de datos.

+0

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

Respuesta

19

Si haces lo contrario, funciona. Proteja la hoja completa y llame al setLocked(false) para las celdas que deben ser editables.

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

el enfoque anterior no funciona para mí. Im en mac sin embargo. – Bobo

+2

para ser más claros, todo el libro de trabajo está bloqueado, incluida la celda que se supone que está desbloqueada. – Bobo

Cuestiones relacionadas