synchronized (_sheet) {
AutoFilter af = _sheet.getAutoFilter();
if (af == null) {
af = autoFilter();
}
final FilterColumn fc = BookHelper.getOrCreateFilterColumn(af, field-1);
BookHelper.setProperties(fc, criteria1, filterOp, criteria2, visibleDropDown);
//update rows
final CellRangeAddress affectedArea = af.getRangeAddress();
final int row1 = affectedArea.getFirstRow();
final int col1 = affectedArea.getFirstColumn();
final int col = col1 + field - 1;
final int row = row1 + 1;
final int row2 = affectedArea.getLastRow();
final Set cr1 = fc.getCriteria1();
final Set<Ref> all = new HashSet<Ref>();
for (int r = row; r <= row2; ++r) {
final Cell cell = BookHelper.getCell(_sheet, r, col);
final String val = BookHelper.isBlankCell(cell) ? "=" : BookHelper.getCellText(cell); //"=" means blank!