我正在使用Apache POI生成Excel文件(.xlsx格式)
我遇到了两件事。
首先,
我想在生成的excel文件中禁用格式化单元格等少数功能。
我已经习惯了以下代码来实现它(从Apache POI - How to protect sheet with options?得到它。
sheet.lockDeleteColumns();
sheet.lockDeleteRows();
sheet.lockFormatCells();
sheet.lockFormatColumns();
sheet.lockFormatRows();
sheet.lockInsertColumns();
sheet.lockInsertRows();
sheet.getCTWorksheet().getSheetProtection().setPassword(pwdBytes);
sheet.enableLocking();
workbook.lockStructure();
但是这段代码使生成的工作表成为只读。我无法在生成的Excel工作表中输入任何数据。
请告诉我如何仅禁用少数功能并同时启用读写功能。
其次,Excel文件中有一个日期列。我想在列级应用一些日期验证(类似于isValidDate)。
我已经尝试了 XSSFDataValidationHelper createCustomConstraint ,但没有成功,验证不适用于日期列。当我打开生成的excel文件时,我得到以下错误
Excel在文件中找到了不可读的内容。
我猜函数中有问题(createCustomConstraint(“ISNUMBER()”);.
以下是我使用的代码段。
XSSFDataValidationConstraint dateConstraint = (XSSFDataValidationConstraint) dvHelper
.createCustomConstraint("ISNUMBER()");
CellRangeAddressList dateAddressList = new CellRangeAddressList(0,
10000, 2, 3);//1000rows and 3rd & 4th column
DataValidation dateValidation = dvHelper.createValidation(
dateConstraint, dateAddressList);
dateValidation.setEmptyCellAllowed(true);
dateValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dateValidation.createErrorBox("Error", "InValid Date.");
dateValidation.setShowErrorBox(true);
sheet.addValidationData(dateValidation);
请帮我解决这两个问题。
先谢谢。
答案 0 :(得分:1)
我相信你的问题有两部分。
第一部分: - 我认为锁定和保护是两回事。
sheet.protectSheet(String password);
将使表格变为只读。要设置锁定选项,调用lockFormatCells() and lockDeleteColumns()
和sheet.enableLocking()
等函数就足够了。
第二部分: - 如果你想应用DateValidation,你应该调用类似的东西。
DataValidationConstraint activationDateConstraint = validationHelper.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=VLOOKUP($D3,Offices!$B$2:$D$6,3,FALSE)", "=TODAY()", "dd/mm/yy");