在EXCEL中使用PASTE(Java和org.apache.poi)

JAVA + POI >是否有办法无法/阻止系统/ Excel的PASTE命令。 或者在input手动input时给出错误并拒绝。

我用Java 8和org.apache.poi构build这个Excel文件(也许另一个库将工作)。

我实施了各种限制和validation:

constraint =validationHelper.createExplicitListConstraint(new String[]{"0","1","2","3","4","5","6","7","8","9"}); addressList = new CellRangeAddressList(0,999,0,0); dataValidation = validationHelper.createValidation(constraint, addressList); dataValidation.setShowErrorBox(true); sheet.addValidationData(dataValidation); 

我已经实现了各种LOCKING:

 sheet.lockObjects(true); sheet.lockDeleteColumns(true); sheet.lockDeleteRows(true); sheet.lockFormatCells(true); sheet.lockFormatColumns(true); sheet.lockFormatRows(true); sheet.lockInsertColumns(true); sheet.lockInsertRows(true); sheet.enableLocking(); workbook.lockStructure(); 

但是,仍然可以用内存中的粘贴粘贴任何你想要的单元格。 即使当我locking下拉限制:

 Name name = workbook.createName(); name.setNameName("ValidationRange"); String reference = addressList.getCellRangeAddress(0).formatAsString("SHEET", true); name.setRefersToFormula(reference); 

在我的JavaFX应用程序中,作为一个保存通信工具,帮助将是一个好而安全的Excel程序= ^)

一个快速的解决办法是在工作表中定义一个macros,当用户在该工作表中select一个单元格时,将复制到剪贴板的已知为空的单元格的内容:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) [XFD1048576].Copy End Sub 

请注意,这可能会惹恼用户,因为无论他们是否打算将某些东西粘贴到单元格中,都将清空剪贴板。 如果用户select禁用macros或保存为.xlsx,也很容易规避。