web-dev-qa-db-ja.com

ApachePOIを使用してExcelで単一の列をロックする

特定の列のみがロックされ(読み取り専用)、残りは編集可能なExcelを作成したいのですが、

私は次のアプローチを使用していますが、それはうまくいかないようです。

2つのCellStyleを作成します。1つはsetLocked(true)を使用し、もう1つはsetLocked(false)を使用します。

次に、ロックする必要がある列のすべてのセルにロックスタイルを適用し、他のすべてのセルにロック解除スタイルを適用します。

Sheet.protectSheet( "");を使用してシートを保護します。

しかし、作成したExcelをOpen Officeで開くと、すべてのセルがロックされていることに気付きます。

それらのどれも編集可能ではありません。

上記の要件をどのように達成できますか?

追伸:データ検証アプローチを使用できません。

15
justshams

あなたが反対をするならば、それは働きます。シート全体を保護し、編集可能なセルに対してsetLocked(false)を呼び出します。

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