Apache POI - 如何限制用户清除Excel工作表中的数据验证

时间:2016-06-14 04:26:33

标签: java apache-poi

我使用Apache POI在工作表上设置了数据验证。验证就像只允许十进制数一样。它没有任何问题,工作正常。但是当用户清除excel表上的验证时,他将能够输入我之前使用数据验证限制的任何数据。

如何限制用户使用Apache POI清除数据验证?换句话说,我应该如何使用Apache POI禁用我的数据验证的清除验证选项?

任何帮助将不胜感激。

谢谢,
Rama Krishna

1 个答案:

答案 0 :(得分:1)

您应该考虑锁定工作表以防止更改,只允许解锁的单元格可以编辑。例如:

<script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>
<script>

// Initialize Firebase
var config = {
    apiKey: "*******",
    authDomain: "*******",
    databaseURL: "*******",
    storageBucket: "*******",
};

firebase.initializeApp(config);
firebase.database().ref('my/path/to/data').on('value', function(snapshot) {
    console.log('kk'); //no log in the console
});

</script>

只有这样import java.io.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; class LockDataValidation { public static void main(String[] args) { try { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); sheet.createRow(0).createCell(1).setCellValue("Only numbers 10 to 100"); //DataValidation for cell B2: DataValidationHelper dvHelper = sheet.getDataValidationHelper(); DataValidationConstraint dvConstraint = dvHelper.createNumericConstraint( DataValidationConstraint.ValidationType.INTEGER, DataValidationConstraint.OperatorType.BETWEEN, "10", "100"); CellRangeAddressList addressList = new CellRangeAddressList(1, 1, 1, 1); DataValidation validation = dvHelper.createValidation(dvConstraint, addressList); if(validation instanceof XSSFDataValidation) { validation.setSuppressDropDownArrow(false); validation.setShowErrorBox(true); } else { validation.setSuppressDropDownArrow(true); } sheet.addValidationData(validation); //create cell B2: Cell cell = sheet.createRow(1).createCell(1); //set cell B2 unlocked: CellStyle cellstyle = workbook.createCellStyle(); cellstyle.setLocked(false); cell.setCellStyle(cellstyle); //lock the sheet: ((XSSFSheet)sheet).enableLocking(); FileOutputStream fileOut = new FileOutputStream("Datavalidation.xlsx"); workbook.write(fileOut); fileOut.close(); } catch (FileNotFoundException fnfex) { } catch (IOException ioex) { } } } 是可编辑的,并且数据验证可以防止删除。如果有人将未经验证的复制的单元格粘贴到具有验证的单元格中,则不会锁定数据验证将被删除。

但即使是现在,也可以将错误的值复制/粘贴到B2中,因为数据验证旨在显示消息并仅在用户直接在单元格中键入数据时阻止无效条目。复制或填充数据时,不会显示消息。请参阅https://support.office.com/en-us/article/Apply-data-validation-to-cells-c743a24a-bc48-41f1-bd92-95b6aeeb73c9

野外有B2个宏观解决方案正试图缩小这个差距。请参阅Data validation fails when copy pasting data in excel made through apache poi