2011-12-14 15 views
5

Sto usando apache-poi per generare il file excel. Devo rendere la 4a colonna di sola lettura e le restanti 2 colonne saranno modificabili dall'utente.Crea colonna di sola lettura usando apache poi

Sto utilizzando XSSFCellStyle per raggiungere questo obiettivo ma non funziona per me.

L'intero codice è:

Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>(); 

XSSFCellStyle style5 = wb.createCellStyle(); 
XSSFFont headerFont = wb.createFont(); 
headerFont.setBold(true); 
style5.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); 
style5.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 
style5.setFont(headerFont); 
style5.setLocked(true); // this line does not get executed. 
styles.put("header", style5); 
+0

Che cosa si intende quando si dice la linea fa non essere eseguito? Hai un'eccezione? – Pieter

+0

Intendo dire che il codice che ho scritto per bloccare la cella non viene bloccato è modificabile dall'utente. – simbu94

+0

http://stackoverflow.com/questions/8397169/lock-single-column-in-excel-using-apache-poi – ravi

risposta

12

Dovete proteggere l'intero foglio e sbloccare le cellule che dovrebbero essere modificabili:

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();