0

シート内のすべてのセルをデフォルトでロック解除するにはどうすればよいですか?

このスニペットは、すべてのセルがロックされたシートを作成します

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
cell.setCellValue("test");

このスニペットにより、Excel ファイルを開こうとすると、一部のデータが破損します。

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setLocked(false);
cell.setCellStyle(cellStyle);
cell.setCellValue("test");

このスニペットは問題を引き起こしませんが、セルのロックも解除します。すべてのセルを変更できますが、[フォーマット] をクリックすると、[セルのロック] リンクが強調表示されます。

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(rowCounter);
Cell cell = row.createCell(counter);
cell.setCellValue("test");
cell.getCellStyle().setLocked(false);
4

1 に答える 1

1

最初のスニペットは、POI 3.9 を使用してセルがロックされたドキュメントを生成しません。

SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Results");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("test");

FileOutputStream fileOut = new FileOutputStream("/tmp/test.xlsx");
wb.write(fileOut);
fileOut.close();

予想どおり、セルは結果のワークブックで編集可能です。

SXSSF はストリーミング POI API です。XML ベースのスプレッドシートに大量のデータを書き込むために最適化されています (通常の XSSF API は XML ドキュメントをメモリに保持し、大きなドキュメントを作成するときに大量のメモリを使用できます)。大規模な XML ベースのドキュメントを出力する必要がない場合は、XSSF API のみを使用することをお勧めします。SXSSF にはいくつかの制限と落とし穴があり、十分に文書化されていないためです。

以下も参照してください。

于 2013-03-29T21:07:38.410 に答える