答案 0 :(得分:3)
如果A
正在解析工作表时,apache poi
列中的标记已经存在,那么CellStyle.setLocked可以设置为False
{1}}列中的{1}}。因此,如果工作表受到保护,那么这些单元格将不会被锁定并且可以编辑。
但如果在True
GUI中更改A
列True
或False
,那么这是不可能的,因为在更改值时它不会有条件地更改在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
模板。