package test; import org.zkoss.poi.ss.usermodel.DataValidation; import org.zkoss.poi.ss.usermodel.DataValidationConstraint; import org.zkoss.poi.ss.usermodel.DataValidationHelper; import org.zkoss.poi.ss.util.CellRangeAddressList; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.select.SelectorComposer; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zss.engine.Ref; import org.zkoss.zss.engine.event.SSDataEvent; import org.zkoss.zss.model.Worksheet; import org.zkoss.zss.model.impl.BookHelper; import org.zkoss.zss.ui.Spreadsheet; public class DataValidationCtrl extends SelectorComposer { @Wire Spreadsheet ss; Worksheet sheet; DataValidation v1; DataValidation v2; DataValidation v3; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); sheet = ss.getSelectedSheet(); ss.getBook().subscribe(new EventListener() { @Override public void onEvent(SSDataEvent event) throws Exception { if (SSDataEvent.ON_CONTENTS_CHANGE.equals(event.getName())) { Ref ref = event.getRef(); if (ref.getLeftCol() == 0 && ref.getTopRow() == 1) { DataValidation old = sheet.getDataValidation(1, 0); if ("A".equals(BookHelper.getCell(sheet, 1, 0).getStringCellValue())) { if (old != v2) { sheet.addValidationData(v2); // ss.invalidate();//workaround } } else { if (old != v3) { sheet.addValidationData(v3); // ss.invalidate();//workaround } } } } } }); initValidation(); } private void initValidation() { DataValidationHelper dvh = sheet.getDataValidationHelper(); String[] vals = { "A", "B"}; DataValidationConstraint dvc = dvh.createExplicitListConstraint(vals); CellRangeAddressList cral = new CellRangeAddressList(1, 1, 0, 0); v1 = dvh.createValidation(dvc, cral); sheet.addValidationData(v1); dvh = sheet.getDataValidationHelper(); dvc = dvh.createExplicitListConstraint(new String[]{ "A1", "A2", "A3"}); cral = new CellRangeAddressList(1, 1, 1, 1); v2 = dvh.createValidation(dvc, cral); sheet.addValidationData(v2); dvh = sheet.getDataValidationHelper(); dvc = dvh.createExplicitListConstraint(new String[]{ "B1", "B2", "B3"}); cral = new CellRangeAddressList(1, 1, 1, 1); v3 = dvh.createValidation(dvc, cral); // sheet.addValidationData(v1); } }