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