class ReplaceColumnAndRowFunctionsAST

Attributes

count_replaced[RW]
current_reference[RW]
replacement_made[RW]

Public Class Methods

new() click to toggle source
# File src/simplify/replace_column_with_column_number.rb, line 7
def initialize
  @count_replaced = 0
end

Public Instance Methods

function(ast) click to toggle source

Should be of the form [:function, “COLUMN”, [:sheet_reference, sheet, ref]]

# File src/simplify/replace_column_with_column_number.rb, line 26
def function(ast)
  return unless (ast[1] == :COLUMN || ast[1] == :ROW)
  if ast[2]
    if ast[2][0] == :cell || ast[2][0] == :area
      reference = Reference.for(ast[2][1])
    elsif ast[2][0] == :array && ast[2][1][0] == :row
      r = ast[2][1][1]
      if r[0] == :cell || r[0] == :area
        reference = Reference.for(r[1])
      elsif r[0] == :sheet_reference
        reference = Reference.for(r[2][1])
      end
    elsif ast[2][0] == :sheet_reference
      reference = Reference.for(ast[2][2][1])
    else
      raise ExcelToCodeException.new("COLUMN/ROW not replaced in #{@current_reference} #{ast}")
    end
  else
    reference = Reference.for(@current_reference)
  end 
  reference.calculate_excel_variables
  @count_replaced += 1
  @replacement_made = true
  if ast[1] == :COLUMN
    ast.replace( CachingFormulaParser.map([:number, reference.excel_column_number]))
  else
    ast.replace( CachingFormulaParser.map([:number, reference.excel_row_number]))
  end
end
map(ast) click to toggle source
# File src/simplify/replace_column_with_column_number.rb, line 17
def map(ast)
  return ast unless ast.is_a?(Array)
  ast.each { |a| map(a) }
  function(ast) if ast[0] == :function
  ast
end
replace(ast) click to toggle source
# File src/simplify/replace_column_with_column_number.rb, line 11
def replace(ast)
  @replacement_made = false
  map(ast)
  @replacement_made
end