excel_to_code 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +41 -0
- data/bin/excel_to_c +63 -0
- data/bin/excel_to_ruby +9 -0
- data/src/commands.rb +2 -0
- data/src/commands/excel_to_c.rb +858 -0
- data/src/commands/excel_to_ruby.rb +620 -0
- data/src/compile.rb +2 -0
- data/src/compile/c.rb +5 -0
- data/src/compile/c/compile_to_c.rb +62 -0
- data/src/compile/c/compile_to_c_header.rb +26 -0
- data/src/compile/c/compile_to_c_unit_test.rb +42 -0
- data/src/compile/c/excel_to_c_runtime.c +2029 -0
- data/src/compile/c/map_formulae_to_c.rb +184 -0
- data/src/compile/c/map_sheet_names_to_c_names.rb +19 -0
- data/src/compile/c/map_values_to_c.rb +85 -0
- data/src/compile/c/map_values_to_c_structs.rb +37 -0
- data/src/compile/ruby.rb +3 -0
- data/src/compile/ruby/compile_to_ruby.rb +33 -0
- data/src/compile/ruby/compile_to_ruby_unit_test.rb +28 -0
- data/src/compile/ruby/excel_to_ruby_runtime.rb +1 -0
- data/src/compile/ruby/map_formulae_to_ruby.rb +95 -0
- data/src/compile/ruby/map_sheet_names_to_ruby_names.rb +19 -0
- data/src/compile/ruby/map_values_to_ruby.rb +65 -0
- data/src/excel.rb +5 -0
- data/src/excel/area.rb +93 -0
- data/src/excel/excel_functions.rb +84 -0
- data/src/excel/excel_functions/abs.rb +14 -0
- data/src/excel/excel_functions/add.rb +18 -0
- data/src/excel/excel_functions/and.rb +30 -0
- data/src/excel/excel_functions/apply_to_range.rb +17 -0
- data/src/excel/excel_functions/average.rb +12 -0
- data/src/excel/excel_functions/choose.rb +18 -0
- data/src/excel/excel_functions/cosh.rb +9 -0
- data/src/excel/excel_functions/count.rb +9 -0
- data/src/excel/excel_functions/counta.rb +8 -0
- data/src/excel/excel_functions/divide.rb +23 -0
- data/src/excel/excel_functions/excel_equal.rb +20 -0
- data/src/excel/excel_functions/excel_if.rb +8 -0
- data/src/excel/excel_functions/excel_match.rb +51 -0
- data/src/excel/excel_functions/find.rb +39 -0
- data/src/excel/excel_functions/iferror.rb +10 -0
- data/src/excel/excel_functions/index.rb +48 -0
- data/src/excel/excel_functions/left.rb +12 -0
- data/src/excel/excel_functions/less_than.rb +26 -0
- data/src/excel/excel_functions/less_than_or_equal.rb +26 -0
- data/src/excel/excel_functions/max.rb +12 -0
- data/src/excel/excel_functions/min.rb +12 -0
- data/src/excel/excel_functions/mod.rb +15 -0
- data/src/excel/excel_functions/more_than.rb +26 -0
- data/src/excel/excel_functions/more_than_or_equal.rb +26 -0
- data/src/excel/excel_functions/multiply.rb +24 -0
- data/src/excel/excel_functions/negative.rb +12 -0
- data/src/excel/excel_functions/not_equal.rb +19 -0
- data/src/excel/excel_functions/number_argument.rb +30 -0
- data/src/excel/excel_functions/pi.rb +7 -0
- data/src/excel/excel_functions/pmt.rb +16 -0
- data/src/excel/excel_functions/power.rb +18 -0
- data/src/excel/excel_functions/round.rb +13 -0
- data/src/excel/excel_functions/rounddown.rb +14 -0
- data/src/excel/excel_functions/roundup.rb +17 -0
- data/src/excel/excel_functions/string_join.rb +19 -0
- data/src/excel/excel_functions/subtotal.rb +13 -0
- data/src/excel/excel_functions/subtract.rb +18 -0
- data/src/excel/excel_functions/sum.rb +8 -0
- data/src/excel/excel_functions/sumif.rb +7 -0
- data/src/excel/excel_functions/sumifs.rb +74 -0
- data/src/excel/excel_functions/sumproduct.rb +32 -0
- data/src/excel/excel_functions/vlookup.rb +49 -0
- data/src/excel/formula_peg.rb +238 -0
- data/src/excel/formula_peg.txt +45 -0
- data/src/excel/reference.rb +56 -0
- data/src/excel/table.rb +108 -0
- data/src/excel_to_code.rb +7 -0
- data/src/extract.rb +13 -0
- data/src/extract/check_for_unknown_functions.rb +20 -0
- data/src/extract/extract_array_formulae.rb +23 -0
- data/src/extract/extract_formulae.rb +36 -0
- data/src/extract/extract_named_references.rb +38 -0
- data/src/extract/extract_relationships.rb +10 -0
- data/src/extract/extract_shared_formulae.rb +23 -0
- data/src/extract/extract_shared_strings.rb +20 -0
- data/src/extract/extract_simple_formulae.rb +18 -0
- data/src/extract/extract_table.rb +24 -0
- data/src/extract/extract_values.rb +29 -0
- data/src/extract/extract_worksheet_dimensions.rb +11 -0
- data/src/extract/extract_worksheet_names.rb +10 -0
- data/src/extract/extract_worksheet_table_relationships.rb +10 -0
- data/src/extract/simple_extract_from_xml.rb +19 -0
- data/src/rewrite.rb +10 -0
- data/src/rewrite/ast_copy_formula.rb +42 -0
- data/src/rewrite/ast_expand_array_formulae.rb +180 -0
- data/src/rewrite/rewrite_array_formulae.rb +71 -0
- data/src/rewrite/rewrite_array_formulae_to_arrays.rb +18 -0
- data/src/rewrite/rewrite_cell_references_to_include_sheet.rb +56 -0
- data/src/rewrite/rewrite_formulae_to_ast.rb +24 -0
- data/src/rewrite/rewrite_merge_formulae_and_values.rb +18 -0
- data/src/rewrite/rewrite_relationship_id_to_filename.rb +22 -0
- data/src/rewrite/rewrite_shared_formulae.rb +38 -0
- data/src/rewrite/rewrite_values_to_ast.rb +28 -0
- data/src/rewrite/rewrite_whole_row_column_references_to_areas.rb +90 -0
- data/src/rewrite/rewrite_worksheet_names.rb +20 -0
- data/src/simplify.rb +16 -0
- data/src/simplify/count_formula_references.rb +58 -0
- data/src/simplify/identify_dependencies.rb +56 -0
- data/src/simplify/identify_repeated_formula_elements.rb +37 -0
- data/src/simplify/inline_formulae.rb +77 -0
- data/src/simplify/map_formulae_to_values.rb +157 -0
- data/src/simplify/remove_cells.rb +18 -0
- data/src/simplify/replace_arrays_with_single_cells.rb +27 -0
- data/src/simplify/replace_blanks.rb +58 -0
- data/src/simplify/replace_common_elements_in_formulae.rb +19 -0
- data/src/simplify/replace_formulae_with_calculated_values.rb +21 -0
- data/src/simplify/replace_indirects_with_references.rb +44 -0
- data/src/simplify/replace_named_references.rb +82 -0
- data/src/simplify/replace_ranges_with_array_literals.rb +54 -0
- data/src/simplify/replace_shared_strings.rb +49 -0
- data/src/simplify/replace_table_references.rb +71 -0
- data/src/simplify/replace_values_with_constants.rb +47 -0
- data/src/simplify/simplify_arithmetic.rb +54 -0
- data/src/util.rb +2 -0
- data/src/util/not_supported_exception.rb +2 -0
- data/src/util/try.rb +9 -0
- metadata +207 -0
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            class ReplaceSharedStringAst 
         | 
| 2 | 
            +
              
         | 
| 3 | 
            +
              attr_accessor :shared_strings
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              def initialize(shared_strings)
         | 
| 6 | 
            +
                @shared_strings = shared_strings.map do |s|
         | 
| 7 | 
            +
                  s[/^(.*?)\n$/,1]
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
              def map(ast)
         | 
| 12 | 
            +
                if ast.is_a?(Array)
         | 
| 13 | 
            +
                  operator = ast.shift
         | 
| 14 | 
            +
                  if respond_to?(operator)
         | 
| 15 | 
            +
                    send(operator,*ast)
         | 
| 16 | 
            +
                  else
         | 
| 17 | 
            +
                    [operator,*ast.map {|a| map(a) }]
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                else
         | 
| 20 | 
            +
                  return ast
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              def shared_string(string_id)
         | 
| 25 | 
            +
                [:string,shared_strings[string_id.to_i]]
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            class ReplaceSharedStrings
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              def self.replace(values,shared_strings,output)
         | 
| 33 | 
            +
                self.new.replace(values,shared_strings,output)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
              # Rewrites ast with shared strings to strings
         | 
| 37 | 
            +
              def replace(values,shared_strings,output)
         | 
| 38 | 
            +
                rewriter = ReplaceSharedStringAst.new(shared_strings.readlines)
         | 
| 39 | 
            +
                values.lines do |line|
         | 
| 40 | 
            +
                  # Looks to match shared string lines
         | 
| 41 | 
            +
                  if line =~ /\[:shared_string/
         | 
| 42 | 
            +
                    ref, ast = line.split("\t")
         | 
| 43 | 
            +
                    output.puts "#{ref}\t#{rewriter.map(eval(ast)).inspect}"
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    output.puts line
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
| @@ -0,0 +1,71 @@ | |
| 1 | 
            +
            class ReplaceTableReferenceAst
         | 
| 2 | 
            +
              
         | 
| 3 | 
            +
              attr_accessor :tables, :worksheet, :referring_cell
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              def initialize(tables, worksheet = nil, referring_cell = nil)
         | 
| 6 | 
            +
                @tables, @worksheet, @referring_cell = tables, worksheet, referring_cell
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def map(ast)
         | 
| 10 | 
            +
                return ast unless ast.is_a?(Array)
         | 
| 11 | 
            +
                operator = ast[0]
         | 
| 12 | 
            +
                if respond_to?(operator)
         | 
| 13 | 
            +
                  send(operator,*ast[1..-1])
         | 
| 14 | 
            +
                else
         | 
| 15 | 
            +
                  [operator,*ast[1..-1].map {|a| map(a) }]
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
              def table_reference(table_name,table_reference)
         | 
| 20 | 
            +
                return [:error,"#REF!"] unless tables.has_key?(table_name.downcase)
         | 
| 21 | 
            +
                tables[table_name.downcase].reference_for(table_name,table_reference,worksheet,referring_cell)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              def local_table_reference(table_reference)
         | 
| 25 | 
            +
                table = tables.values.find do |table|
         | 
| 26 | 
            +
                  table.includes?(worksheet,referring_cell)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                return [:error,"#REF!"] unless table
         | 
| 29 | 
            +
                table.reference_for(table.name,table_reference,worksheet,referring_cell)
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
             | 
| 35 | 
            +
            class ReplaceTableReferences
         | 
| 36 | 
            +
              
         | 
| 37 | 
            +
              attr_accessor :sheet_name
         | 
| 38 | 
            +
              
         | 
| 39 | 
            +
              def self.replace(*args)
         | 
| 40 | 
            +
                self.new.replace(*args)
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
              
         | 
| 43 | 
            +
              def replace(input,table_data,output)
         | 
| 44 | 
            +
                tables = {}
         | 
| 45 | 
            +
                table_data.each do |line|
         | 
| 46 | 
            +
                  table = Table.new(*line.strip.split("\t"))
         | 
| 47 | 
            +
                  tables[table.name.downcase] = table
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
                    
         | 
| 50 | 
            +
                rewriter = ReplaceTableReferenceAst.new(tables,sheet_name)
         | 
| 51 | 
            +
              
         | 
| 52 | 
            +
                input.lines do |line|
         | 
| 53 | 
            +
                  # Looks to match shared string lines
         | 
| 54 | 
            +
                  begin
         | 
| 55 | 
            +
                    if line =~ /\[(:table_reference|:local_table_reference)/
         | 
| 56 | 
            +
                      cols = line.split("\t")
         | 
| 57 | 
            +
                      ast = cols.pop
         | 
| 58 | 
            +
                      ref = cols.first
         | 
| 59 | 
            +
                      rewriter.referring_cell = ref
         | 
| 60 | 
            +
                      output.puts "#{cols.join("\t")}\t#{rewriter.map(eval(ast)).inspect}"
         | 
| 61 | 
            +
                    else
         | 
| 62 | 
            +
                      output.puts line
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                  rescue Exception => e
         | 
| 65 | 
            +
                    puts "Exception at line #{line}"
         | 
| 66 | 
            +
                    raise
         | 
| 67 | 
            +
                  end      
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
              
         | 
| 71 | 
            +
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            class MapValuesToConstants
         | 
| 2 | 
            +
              
         | 
| 3 | 
            +
              attr_accessor :constants
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              def initialize
         | 
| 6 | 
            +
                count = 0
         | 
| 7 | 
            +
                @constants = Hash.new do |hash,key|
         | 
| 8 | 
            +
                  count += 1
         | 
| 9 | 
            +
                  hash[key] = "C#{count}"
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              def map(ast)
         | 
| 14 | 
            +
                return ast unless ast.is_a?(Array)
         | 
| 15 | 
            +
                operator = ast[0]
         | 
| 16 | 
            +
                if [:number,:percentage,:string].include?(operator)
         | 
| 17 | 
            +
                  [:constant, constants[ast]]
         | 
| 18 | 
            +
                else
         | 
| 19 | 
            +
                  [operator,*ast[1..-1].map {|a| map(a) }]
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
             | 
| 26 | 
            +
            class ReplaceValuesWithConstants
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              attr_accessor :rewriter
         | 
| 29 | 
            +
              
         | 
| 30 | 
            +
              def self.replace(*args)
         | 
| 31 | 
            +
                self.new.replace(*args)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
              def replace(input,output)
         | 
| 35 | 
            +
                @rewriter ||= MapValuesToConstants.new
         | 
| 36 | 
            +
                input.lines do |line|
         | 
| 37 | 
            +
                  begin
         | 
| 38 | 
            +
                    ref, ast = line.split("\t")
         | 
| 39 | 
            +
                    output.puts "#{ref}\t#{rewriter.map(eval(ast)).inspect}"
         | 
| 40 | 
            +
                  rescue Exception => e
         | 
| 41 | 
            +
                    puts "Exception at line #{line}"
         | 
| 42 | 
            +
                    raise
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            class SimplifyArithmeticAst
         | 
| 2 | 
            +
                
         | 
| 3 | 
            +
              def map(ast)
         | 
| 4 | 
            +
                return ast unless ast.is_a?(Array)
         | 
| 5 | 
            +
                operator = ast[0]
         | 
| 6 | 
            +
                if respond_to?(operator)
         | 
| 7 | 
            +
                  send(operator,*ast[1..-1])
         | 
| 8 | 
            +
                else
         | 
| 9 | 
            +
                  [operator,*ast[1..-1].map {|a| map(a) }]
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              def brackets(*args)
         | 
| 14 | 
            +
                raise NotSupportedException.new("Multiple arguments not supported in brackets #{args.inspect}") if args.size > 1
         | 
| 15 | 
            +
                map(args.first)
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def arithmetic(*args)
         | 
| 19 | 
            +
                return map(args.first) if args.size == 1
         | 
| 20 | 
            +
                return [:arithmetic,*args.map {|a| map(a) }] if args.size == 3
         | 
| 21 | 
            +
                [['^'],['*','/'],['+','-']].each do |op|
         | 
| 22 | 
            +
                  i = args.find_index { |a| a[0] == :operator && op.include?(a[1])}
         | 
| 23 | 
            +
                  next unless i
         | 
| 24 | 
            +
                  pre_operation = i == 1 ? [] : args[0..(i-2)]
         | 
| 25 | 
            +
                  operation = args[(i-1)..(i+1)]
         | 
| 26 | 
            +
                  post_operation = (i + 2) > args.size ? [] : args[(i+2)..-1]
         | 
| 27 | 
            +
                  return arithmetic(*pre_operation.map {|a| map(a) },[:arithmetic,*operation],*post_operation.map {|a| map(a) })
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                return [:arithmetic,*args.map {|a| map(a) }]
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            class SimplifyArithmetic
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
              def self.replace(*args)
         | 
| 38 | 
            +
                self.new.replace(*args)
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
              def replace(input,output)
         | 
| 42 | 
            +
                rewriter = SimplifyArithmeticAst.new
         | 
| 43 | 
            +
                input.lines do |line|
         | 
| 44 | 
            +
                  # Looks to match lines with references
         | 
| 45 | 
            +
                  if line =~ /:arithmetic/
         | 
| 46 | 
            +
                    content = line.split("\t")
         | 
| 47 | 
            +
                    ast = eval(content.pop)
         | 
| 48 | 
            +
                    output.puts "#{content.join("\t")}\t#{rewriter.map(ast).inspect}"
         | 
| 49 | 
            +
                  else
         | 
| 50 | 
            +
                    output.puts line
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
    
        data/src/util.rb
    ADDED
    
    
    
        data/src/util/try.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | @@ -0,0 +1,207 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: excel_to_code
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors:
         | 
| 8 | 
            +
            - Thomas Counsell, Green on Black Ltd
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: bin
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
            date: 2012-04-13 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: nokogiri
         | 
| 16 | 
            +
              requirement: &70298839691560 !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: 1.5.0
         | 
| 22 | 
            +
              type: :runtime
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: *70298839691560
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: rspec
         | 
| 27 | 
            +
              requirement: &70298839691040 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ! '>='
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: 2.7.0
         | 
| 33 | 
            +
              type: :runtime
         | 
| 34 | 
            +
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: *70298839691040
         | 
| 36 | 
            +
            description: ! "# excel_to_code\n\nConverts some excel spreadsheets (.xlsx, not .xls)
         | 
| 37 | 
            +
              into some other programming languages (currently ruby or c).\nThis allows the excel
         | 
| 38 | 
            +
              spreadsheets to be run programatically, without excel.\n\nIts cannonical source
         | 
| 39 | 
            +
              is at http://github.com/tamc/excel2code\n\n# Running excel_to_code\n\nTo just have
         | 
| 40 | 
            +
              a go:\n\n\t./bin/excel_to_c <excel_file_name>\n\t\nNB:For small spreadsheets this
         | 
| 41 | 
            +
              will take a minute or so. For large spreadsheets it is best to run it overnight.\n\t\nfor
         | 
| 42 | 
            +
              more detail:\n\t\n\t./bin/excel_to_c --compile --run-tests --settable <name of input
         | 
| 43 | 
            +
              worksheet> --prune-except <name of output worksheet> <excel file name> \n\t\nthis
         | 
| 44 | 
            +
              should work:\n\n\t./bin/excel_to_c --help\n\n# Testing excel_to_code\n\n1. Make
         | 
| 45 | 
            +
              sure you have ruby 1.9.2 or later installed\n2. gem install bundler # May need to
         | 
| 46 | 
            +
              use sudo\n3. bundle\n4. rspec spec/*\n\n# Hacking excel_to_code\n\nThere are some
         | 
| 47 | 
            +
              how to guides in the doc folder. \n\n# Limitations\n\n1. Not tested at all on Windows\n2.
         | 
| 48 | 
            +
              INDIRECT formula must be convertable at runtime into a standard formula\n3. Doesn't
         | 
| 49 | 
            +
              implement all functions (see doc/Which_functions_are_implemented.md)\n4. Doesn't
         | 
| 50 | 
            +
              implement references that involve range unions and lists\n5. Sometimes gives cells
         | 
| 51 | 
            +
              as being empty, when excel would give the cell as having a numeric value of zero\n"
         | 
| 52 | 
            +
            email: tamc@greenonblack.com
         | 
| 53 | 
            +
            executables:
         | 
| 54 | 
            +
            - excel_to_c
         | 
| 55 | 
            +
            - excel_to_ruby
         | 
| 56 | 
            +
            extensions: []
         | 
| 57 | 
            +
            extra_rdoc_files: []
         | 
| 58 | 
            +
            files:
         | 
| 59 | 
            +
            - README
         | 
| 60 | 
            +
            - src/commands/excel_to_c.rb
         | 
| 61 | 
            +
            - src/commands/excel_to_ruby.rb
         | 
| 62 | 
            +
            - src/commands.rb
         | 
| 63 | 
            +
            - src/compile/c/compile_to_c.rb
         | 
| 64 | 
            +
            - src/compile/c/compile_to_c_header.rb
         | 
| 65 | 
            +
            - src/compile/c/compile_to_c_unit_test.rb
         | 
| 66 | 
            +
            - src/compile/c/excel_to_c_runtime.c
         | 
| 67 | 
            +
            - src/compile/c/map_formulae_to_c.rb
         | 
| 68 | 
            +
            - src/compile/c/map_sheet_names_to_c_names.rb
         | 
| 69 | 
            +
            - src/compile/c/map_values_to_c.rb
         | 
| 70 | 
            +
            - src/compile/c/map_values_to_c_structs.rb
         | 
| 71 | 
            +
            - src/compile/c.rb
         | 
| 72 | 
            +
            - src/compile/ruby/compile_to_ruby.rb
         | 
| 73 | 
            +
            - src/compile/ruby/compile_to_ruby_unit_test.rb
         | 
| 74 | 
            +
            - src/compile/ruby/excel_to_ruby_runtime.rb
         | 
| 75 | 
            +
            - src/compile/ruby/map_formulae_to_ruby.rb
         | 
| 76 | 
            +
            - src/compile/ruby/map_sheet_names_to_ruby_names.rb
         | 
| 77 | 
            +
            - src/compile/ruby/map_values_to_ruby.rb
         | 
| 78 | 
            +
            - src/compile/ruby.rb
         | 
| 79 | 
            +
            - src/compile.rb
         | 
| 80 | 
            +
            - src/excel/area.rb
         | 
| 81 | 
            +
            - src/excel/excel_functions/abs.rb
         | 
| 82 | 
            +
            - src/excel/excel_functions/add.rb
         | 
| 83 | 
            +
            - src/excel/excel_functions/and.rb
         | 
| 84 | 
            +
            - src/excel/excel_functions/apply_to_range.rb
         | 
| 85 | 
            +
            - src/excel/excel_functions/average.rb
         | 
| 86 | 
            +
            - src/excel/excel_functions/choose.rb
         | 
| 87 | 
            +
            - src/excel/excel_functions/cosh.rb
         | 
| 88 | 
            +
            - src/excel/excel_functions/count.rb
         | 
| 89 | 
            +
            - src/excel/excel_functions/counta.rb
         | 
| 90 | 
            +
            - src/excel/excel_functions/divide.rb
         | 
| 91 | 
            +
            - src/excel/excel_functions/excel_equal.rb
         | 
| 92 | 
            +
            - src/excel/excel_functions/excel_if.rb
         | 
| 93 | 
            +
            - src/excel/excel_functions/excel_match.rb
         | 
| 94 | 
            +
            - src/excel/excel_functions/find.rb
         | 
| 95 | 
            +
            - src/excel/excel_functions/iferror.rb
         | 
| 96 | 
            +
            - src/excel/excel_functions/index.rb
         | 
| 97 | 
            +
            - src/excel/excel_functions/left.rb
         | 
| 98 | 
            +
            - src/excel/excel_functions/less_than.rb
         | 
| 99 | 
            +
            - src/excel/excel_functions/less_than_or_equal.rb
         | 
| 100 | 
            +
            - src/excel/excel_functions/max.rb
         | 
| 101 | 
            +
            - src/excel/excel_functions/min.rb
         | 
| 102 | 
            +
            - src/excel/excel_functions/mod.rb
         | 
| 103 | 
            +
            - src/excel/excel_functions/more_than.rb
         | 
| 104 | 
            +
            - src/excel/excel_functions/more_than_or_equal.rb
         | 
| 105 | 
            +
            - src/excel/excel_functions/multiply.rb
         | 
| 106 | 
            +
            - src/excel/excel_functions/negative.rb
         | 
| 107 | 
            +
            - src/excel/excel_functions/not_equal.rb
         | 
| 108 | 
            +
            - src/excel/excel_functions/number_argument.rb
         | 
| 109 | 
            +
            - src/excel/excel_functions/pi.rb
         | 
| 110 | 
            +
            - src/excel/excel_functions/pmt.rb
         | 
| 111 | 
            +
            - src/excel/excel_functions/power.rb
         | 
| 112 | 
            +
            - src/excel/excel_functions/round.rb
         | 
| 113 | 
            +
            - src/excel/excel_functions/rounddown.rb
         | 
| 114 | 
            +
            - src/excel/excel_functions/roundup.rb
         | 
| 115 | 
            +
            - src/excel/excel_functions/string_join.rb
         | 
| 116 | 
            +
            - src/excel/excel_functions/subtotal.rb
         | 
| 117 | 
            +
            - src/excel/excel_functions/subtract.rb
         | 
| 118 | 
            +
            - src/excel/excel_functions/sum.rb
         | 
| 119 | 
            +
            - src/excel/excel_functions/sumif.rb
         | 
| 120 | 
            +
            - src/excel/excel_functions/sumifs.rb
         | 
| 121 | 
            +
            - src/excel/excel_functions/sumproduct.rb
         | 
| 122 | 
            +
            - src/excel/excel_functions/vlookup.rb
         | 
| 123 | 
            +
            - src/excel/excel_functions.rb
         | 
| 124 | 
            +
            - src/excel/formula_peg.rb
         | 
| 125 | 
            +
            - src/excel/formula_peg.txt
         | 
| 126 | 
            +
            - src/excel/reference.rb
         | 
| 127 | 
            +
            - src/excel/table.rb
         | 
| 128 | 
            +
            - src/excel.rb
         | 
| 129 | 
            +
            - src/excel_to_code.rb
         | 
| 130 | 
            +
            - src/extract/check_for_unknown_functions.rb
         | 
| 131 | 
            +
            - src/extract/extract_array_formulae.rb
         | 
| 132 | 
            +
            - src/extract/extract_formulae.rb
         | 
| 133 | 
            +
            - src/extract/extract_named_references.rb
         | 
| 134 | 
            +
            - src/extract/extract_relationships.rb
         | 
| 135 | 
            +
            - src/extract/extract_shared_formulae.rb
         | 
| 136 | 
            +
            - src/extract/extract_shared_strings.rb
         | 
| 137 | 
            +
            - src/extract/extract_simple_formulae.rb
         | 
| 138 | 
            +
            - src/extract/extract_table.rb
         | 
| 139 | 
            +
            - src/extract/extract_values.rb
         | 
| 140 | 
            +
            - src/extract/extract_worksheet_dimensions.rb
         | 
| 141 | 
            +
            - src/extract/extract_worksheet_names.rb
         | 
| 142 | 
            +
            - src/extract/extract_worksheet_table_relationships.rb
         | 
| 143 | 
            +
            - src/extract/simple_extract_from_xml.rb
         | 
| 144 | 
            +
            - src/extract.rb
         | 
| 145 | 
            +
            - src/rewrite/ast_copy_formula.rb
         | 
| 146 | 
            +
            - src/rewrite/ast_expand_array_formulae.rb
         | 
| 147 | 
            +
            - src/rewrite/rewrite_array_formulae.rb
         | 
| 148 | 
            +
            - src/rewrite/rewrite_array_formulae_to_arrays.rb
         | 
| 149 | 
            +
            - src/rewrite/rewrite_cell_references_to_include_sheet.rb
         | 
| 150 | 
            +
            - src/rewrite/rewrite_formulae_to_ast.rb
         | 
| 151 | 
            +
            - src/rewrite/rewrite_merge_formulae_and_values.rb
         | 
| 152 | 
            +
            - src/rewrite/rewrite_relationship_id_to_filename.rb
         | 
| 153 | 
            +
            - src/rewrite/rewrite_shared_formulae.rb
         | 
| 154 | 
            +
            - src/rewrite/rewrite_values_to_ast.rb
         | 
| 155 | 
            +
            - src/rewrite/rewrite_whole_row_column_references_to_areas.rb
         | 
| 156 | 
            +
            - src/rewrite/rewrite_worksheet_names.rb
         | 
| 157 | 
            +
            - src/rewrite.rb
         | 
| 158 | 
            +
            - src/simplify/count_formula_references.rb
         | 
| 159 | 
            +
            - src/simplify/identify_dependencies.rb
         | 
| 160 | 
            +
            - src/simplify/identify_repeated_formula_elements.rb
         | 
| 161 | 
            +
            - src/simplify/inline_formulae.rb
         | 
| 162 | 
            +
            - src/simplify/map_formulae_to_values.rb
         | 
| 163 | 
            +
            - src/simplify/remove_cells.rb
         | 
| 164 | 
            +
            - src/simplify/replace_arrays_with_single_cells.rb
         | 
| 165 | 
            +
            - src/simplify/replace_blanks.rb
         | 
| 166 | 
            +
            - src/simplify/replace_common_elements_in_formulae.rb
         | 
| 167 | 
            +
            - src/simplify/replace_formulae_with_calculated_values.rb
         | 
| 168 | 
            +
            - src/simplify/replace_indirects_with_references.rb
         | 
| 169 | 
            +
            - src/simplify/replace_named_references.rb
         | 
| 170 | 
            +
            - src/simplify/replace_ranges_with_array_literals.rb
         | 
| 171 | 
            +
            - src/simplify/replace_shared_strings.rb
         | 
| 172 | 
            +
            - src/simplify/replace_table_references.rb
         | 
| 173 | 
            +
            - src/simplify/replace_values_with_constants.rb
         | 
| 174 | 
            +
            - src/simplify/simplify_arithmetic.rb
         | 
| 175 | 
            +
            - src/simplify.rb
         | 
| 176 | 
            +
            - src/util/not_supported_exception.rb
         | 
| 177 | 
            +
            - src/util/try.rb
         | 
| 178 | 
            +
            - src/util.rb
         | 
| 179 | 
            +
            - bin/excel_to_c
         | 
| 180 | 
            +
            - bin/excel_to_ruby
         | 
| 181 | 
            +
            homepage: http://github.com/tamc/excel2code
         | 
| 182 | 
            +
            licenses: []
         | 
| 183 | 
            +
            post_install_message: 
         | 
| 184 | 
            +
            rdoc_options: []
         | 
| 185 | 
            +
            require_paths:
         | 
| 186 | 
            +
            - src
         | 
| 187 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 188 | 
            +
              none: false
         | 
| 189 | 
            +
              requirements:
         | 
| 190 | 
            +
              - - ~>
         | 
| 191 | 
            +
                - !ruby/object:Gem::Version
         | 
| 192 | 
            +
                  version: 1.9.1
         | 
| 193 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 194 | 
            +
              none: false
         | 
| 195 | 
            +
              requirements:
         | 
| 196 | 
            +
              - - ! '>='
         | 
| 197 | 
            +
                - !ruby/object:Gem::Version
         | 
| 198 | 
            +
                  version: '0'
         | 
| 199 | 
            +
            requirements: []
         | 
| 200 | 
            +
            rubyforge_project: 
         | 
| 201 | 
            +
            rubygems_version: 1.8.10
         | 
| 202 | 
            +
            signing_key: 
         | 
| 203 | 
            +
            specification_version: 3
         | 
| 204 | 
            +
            summary: Converts .xlxs files into pure ruby 1.9 code or pure C code so that they
         | 
| 205 | 
            +
              can be executed without excel
         | 
| 206 | 
            +
            test_files: []
         | 
| 207 | 
            +
            has_rdoc: false
         |