2011-12-14 16 views
5

Używam apache-poi do generowania pliku excel. Muszę ustawić czwartą kolumnę jako tylko do odczytu, a pozostałe 2 kolumny będą mogły być edytowane przez użytkownika.Utwórz kolumnę tylko do odczytu za pomocą apache poi

Używam do tego celu XSSFCellStyle, ale to nie działa dla mnie.

Cały kod jest:

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

Co masz na myśli mówiąc linia robi nie zostać straconym? Czy otrzymujesz wyjątek? – Pieter

+0

mam na myśli kod, który napisałem, aby zablokować komórkę, nie zostanie zablokowany, ale można go edytować przez użytkownika. – simbu94

+0

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

Odpowiedz

12

trzeba chronić cały arkusz i odblokować komórki, które powinny być edytowalne:

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(); 
Powiązane problemy