Method: Writexlsx::Worksheet#filter_column

Defined in:
lib/write_xlsx/worksheet.rb

#filter_column(col, expression) ⇒ Object

Set the column filter criteria.

The filter_column method can be used to filter columns in a autofilter range based on simple conditions.



2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
# File 'lib/write_xlsx/worksheet.rb', line 2432

def filter_column(col, expression)
  raise "Must call autofilter before filter_column" unless @autofilter_area

  col = prepare_filter_column(col)

  tokens = extract_filter_tokens(expression)

  raise "Incorrect number of tokens in expression '#{expression}'" unless [3, 7].include?(tokens.size)

  tokens = parse_filter_expression(expression, tokens)

  # Excel handles single or double custom filters as default filters. We need
  # to check for them and handle them accordingly.
  if tokens.size == 2 && tokens[0] == 2
    # Single equality.
    filter_column_list(col, tokens[1])
  elsif tokens.size == 5 && tokens[0] == 2 && tokens[2] == 1 && tokens[3] == 2
    # Double equality with "or" operator.
    filter_column_list(col, tokens[1], tokens[4])
  else
    # Non default custom filter.
    @filter_cols[col] = Array.new(tokens)
    @filter_type[col] = 0
  end

  @filter_on = 1
end