2017-06-16 17 views
1

JAVA + POI>是否有办法无法/阻止System/Excel PASTE命令。或者在输入手动输入时给出错误并拒绝。在EXCEL中使用PASTE(Java和org.apache.poi)

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

我实现了各种限制和验证:

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

我已经inplemented各种锁定:

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

但目前仍处于可以粘贴任何你想要从内存中粘贴一个单元格。甚至当我锁与下拉限制:

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

帮助将是巨大的,在我的JavaFX应用程序安全Excel作为一种节省通信工具= ^)

+0

将VBA'Worksheet.SelectionChange'宏清除剪贴板解决问题? – jsheeran

+1

请参阅https://stackoverflow.com/questions/37802988/apache-poi-how-to-restrict-the-user-to-clear-the-data-validations-in-excel-she/37817030#37817030,“Excel作为保存沟通工具“:不,它不是。 'Excel'是*一个*可能的数据*导出*格式。但要依靠'Excel'作为数据输入源还是数据交换格式?你不应该这样做。当然只有我的愚见。 –

+0

Hi @jsheeran和Axel Richter感谢您的评论。我的工作中的人沉迷于Excel,用于数据收集,沟通和报告。我喜欢并且同时讨厌Excel。这是一个功能强大但非常草率的工具,但无论如何,我们必须找到一种最好的方式来处理它,并将它与他们的工作方式= ^)结合起来。复制粘贴在表单打开时发生,所以如果我在开始时清除它,伤害仍将完成。也许jsheeran你可以分享一些可以工作的代码或宏,这样我就可以测试它。 – irJvV

回答

0

速战速决是定义在一个宏其中,当用户在该工作表中选择一个单元格的工作表,将复制到剪贴板,这是众所周知的空单元格的内容:

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

注意,这可能会惹恼用户,因为它会清空剪贴板无论他们是否打算粘贴int一个细胞或其他。如果用户选择禁用宏或保存为.xlsx,也很容易规避。

+0

我会尝试在Java中创建这种方式,用户不能拒绝脚本,并给我在这里找到的解决方案= ^) – irJvV