如何根据Apache POI中另一个单元格中的值禁用单元格中的编辑?

时间:2018-04-30 07:03:57

标签: java apache-poi

我有一个要求,我只需要询问用户一个标志,如果该标志为真,我需要他在该行的另一个单元格中输入一个数字。 如果它是假的,则该单元格应该是不可编辑的。 我知道如何对细胞进行限制,但我不知道这种条件限制。 enter image description here

1 个答案:

答案 0 :(得分:3)

如果A正在解析工作表时,apache poi列中的标记已经存在,那么CellStyle.setLocked可以设置为False {1}}列中的{1}}。因此,如果工作表受到保护,那么这些单元格将不会被锁定并且可以编辑。

但如果在True GUI中更改ATrueFalse,那么这是不可能的,因为在更改值时它不会有条件地更改在A列中。为此,必须有条件格式化单元格锁定的可能性。但这种可能性并不存在,至少没有使用Excel

然后,只有数据验证才能检查A获取值时VBA是否为真,如果没有则发出警报。可以使用A设置Data Validations

示例:

B

如上所述,在更改列apache poi中的单元格时,可以使用import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.ss.util.CellRangeAddressList; public class CreateExcelDataValidationIfATrueThenB { public static void main(String[] args) throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); DataValidationHelper dvHelper = sheet.getDataValidationHelper(); DataValidationConstraint dvConstraint = dvHelper.createCustomConstraint("AND(A1, B1<>\"\")"); CellRangeAddressList addressList = new CellRangeAddressList(-1, -1, 1, 1); DataValidation validation = dvHelper.createValidation(dvConstraint, addressList); validation.createPromptBox("For column B:", "If column A is True, then please put content in column B, else not."); validation.setShowPromptBox(true); validation.createErrorBox("Bad Value", "Please put content in column B only if column A is True, else not!"); validation.setShowErrorBox(true); sheet.addValidationData(validation); sheet.createRow(0).createCell(0).setCellValue(true); sheet.createRow(1).createCell(0).setCellValue(false); sheet.createRow(2).createCell(0).setCellValue(false); sheet.createRow(3).createCell(0).setCellValue(true); workbook.write(new FileOutputStream("CreateExcelDataValidationIfATrueThenB.xlsx")); workbook.close(); } } 事件条件格式化单元格锁定。但VBA未提供创建A代码。因此,如果这是要求,则必须使用包含这些宏的apache poi模板。