2013-02-19 289 views
0

我怎樣才能使一張表中的所有單元默認解鎖?Apache POI默認鎖定所有單元格。如何使所有單元格解鎖?

這段代碼創建了所有的細胞片鎖定

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); 
+0

哪裏是你的'row'對象是從哪裏來的? (這不在你的代碼片段中) – Gagravarr 2013-02-19 23:00:57

+0

我對SXSSFWorkbook不熟悉,但在文檔中它看起來像XSSFWorkbook的「輕量級」實現 - 你嘗試過嗎? – 2013-02-20 05:17:39

+0

我忘了發佈我的排隊。我編輯了這個問題。 – Catfish 2013-02-20 14:41:58

回答

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有幾個限制和問題,並沒有很好的文檔。

參見: