Создание листа Excel только для чтения - PullRequest
0 голосов
/ 19 сентября 2010

Я хочу использовать лист Excel только для чтения после его создания с использованием Apache POI HSSF. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 19 сентября 2010

Подробное описание можно найти здесь: http://systeminetwork.com/article/locking-cells-hssf

В основном вы должны назначить своим ячейкам пользовательские CellStyle с CellStyle.setLocked(true)

Отредактировано

Привет, Гаурав, вот полный и рабочий код:

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
/* password required for locks to become effective */
sheet.protectSheet("secretPassword");

/* cell style for locking */
CellStyle lockedCellStyle = workbook.createCellStyle();
lockedCellStyle.setLocked(true);
/* cell style for editable cells */
CellStyle unlockedCellStyle = workbook.createCellStyle();
unlockedCellStyle.setLocked(false);

/* cell which will be locked */
Cell lockedCell = sheet.createRow(0).createCell(0);
lockedCell.setCellValue("Hi, I'm locked...");
lockedCell.setCellStyle(lockedCellStyle);

/* unlocked cell */
Cell unlockedCell = sheet.createRow(1).createCell(0);
unlockedCell.setCellValue("Just edit me...");
unlockedCell.setCellStyle(unlockedCellStyle);

OutputStream out = new FileOutputStream("sample.xls");
workbook.write(out);
out.flush();
out.close();
2 голосов
/ 20 сентября 2010

Вот некоторый проверенный код, который работает для создания определенной ячейки только для чтения .На основании вашего комментария в ответе @Thomas Weber.

Это устанавливает начальное значение в ячейке, а затем использует ограничение данных, чтобы гарантировать, что фиксированное значение не может быть изменено пользователем в Excel.Попробуйте.

HSSFWorkbook      workBook = new HSSFWorkbook ();
HSSFSheet         sheet1    = workBook.createSheet();

HSSFRow row1 = sheet1.createRow(10); 
HSSFCell cell1 = row1.createCell(0);
cell1.setCellValue("text: The new line which should be locked"); // SETTING INITIAL VALUE

HSSFCell displayNameCell = cell1;

String[] displayNameList = new String[]{"text: The new line which should be locked"}; //ADDING SAME VALUE INTO A STRING ARRAY AS THE RESTRICTED VALUE 

DVConstraint displayNameConstraint = DVConstraint.createExplicitListConstraint(displayNameList);

CellRangeAddressList displayNameCellRange = new CellRangeAddressList(displayNameCell.getRowIndex(),displayNameCell.getRowIndex(),displayNameCell.getColumnIndex(),displayNameCell.getColumnIndex());

HSSFDataValidation displayNameValidation = new HSSFDataValidation(displayNameCellRange,displayNameConstraint);

displayNameValidation.createErrorBox("Not Applicable","Cannot change the value");

displayNameValidation.setSuppressDropDownArrow(true);
displayNameCell.getSheet().addValidationData(displayNameValidation);





  // Write the output to a file
     FileOutputStream fileOut1 = new FileOutputStream("D:\\book.xls");
     workBook.write(fileOut1);
     fileOut1.close();      

Этот код основан на этой теме http://osdir.com/ml/user-poi.apache.org/2009-07/msg00056.html

0 голосов
/ 19 сентября 2010
new File("/path/to/file.xls").setReadOnly();
...