excel_to_code 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,7 @@ class MapFormulaeToRuby < MapValuesToRuby
6
6
  attr_accessor :worksheet
7
7
 
8
8
  FUNCTIONS = {
9
+ 'LOWER' => 'lower',
9
10
  :'*' => 'multiply',
10
11
  :'+' => 'add',
11
12
  :'-' => 'subtract',
@@ -94,3 +94,5 @@ require_relative 'excel_functions/isnumber'
94
94
  require_relative 'excel_functions/len'
95
95
 
96
96
  require_relative 'excel_functions/substitute'
97
+
98
+ require_relative 'excel_functions/lower'
@@ -0,0 +1,21 @@
1
+ module ExcelFunctions
2
+
3
+ def lower(string)
4
+ return string if string.is_a?(Symbol)
5
+ case string
6
+ when nil; ""
7
+ when String; string.downcase
8
+ when Numeric
9
+ if string.round == string
10
+ string.to_i.to_s
11
+ else
12
+ string.to_s
13
+ end
14
+ when true; "true"
15
+ when false; "false"
16
+ else
17
+ string.to_s
18
+ end
19
+ end
20
+
21
+ end
data/src/extract.rb CHANGED
@@ -1,15 +1,6 @@
1
- require_relative 'extract/check_for_unknown_functions'
2
- require_relative "extract/extract_array_formulae"
3
- require_relative "extract/extract_formulae"
4
1
  require_relative "extract/extract_relationships"
5
- require_relative "extract/extract_shared_formulae"
6
- require_relative "extract/extract_shared_formulae_targets"
7
2
  require_relative "extract/extract_shared_strings"
8
- require_relative "extract/extract_simple_formulae"
9
- require_relative "extract/extract_values"
10
- require_relative "extract/extract_worksheet_dimensions"
11
3
  require_relative "extract/extract_worksheet_names"
12
4
  require_relative "extract/extract_named_references"
13
- require_relative "extract/extract_worksheet_table_relationships"
14
5
  require_relative "extract/extract_table"
15
- require_relative "extract/extract_everything"
6
+ require_relative "extract/extract_data_from_worksheet"
@@ -1,6 +1,6 @@
1
1
  require 'ox'
2
2
 
3
- class ExtractEverythingFromWorkbook < ::Ox::Sax
3
+ class ExtractDataFromWorksheet < ::Ox::Sax
4
4
 
5
5
  attr_accessor :table_rids
6
6
  attr_accessor :worksheets_dimensions
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excel_to_code
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Counsell, Green on Black Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-22 00:00:00.000000000 Z
11
+ date: 2014-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubypeg
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.7.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.7.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ffi
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.0.11
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.0.11
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: ox
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.0.12
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 2.0.12
83
83
  description: "# excel_to_code\n\nConverts some excel spreadsheets (.xlsx, not .xls)
@@ -108,30 +108,35 @@ extra_rdoc_files: []
108
108
  files:
109
109
  - README.md
110
110
  - TODO
111
+ - bin/excel_to_c
112
+ - bin/excel_to_ruby
113
+ - src/commands.rb
111
114
  - src/commands/excel_to_c.rb
112
115
  - src/commands/excel_to_ruby.rb
113
116
  - src/commands/excel_to_x.rb
114
- - src/commands.rb
117
+ - src/compile.rb
118
+ - src/compile/c.rb
115
119
  - src/compile/c/a.out
116
120
  - src/compile/c/compile_named_reference_setters.rb
117
121
  - src/compile/c/compile_to_c.rb
118
122
  - src/compile/c/compile_to_c_header.rb
119
123
  - src/compile/c/compile_to_c_unit_test.rb
120
124
  - src/compile/c/excel_to_c_runtime.c
125
+ - src/compile/c/excel_to_c_runtime_test.c
121
126
  - src/compile/c/map_formulae_to_c.rb
122
127
  - src/compile/c/map_sheet_names_to_c_names.rb
123
128
  - src/compile/c/map_values_to_c.rb
124
129
  - src/compile/c/map_values_to_c_structs.rb
125
- - src/compile/c.rb
130
+ - src/compile/ruby.rb
126
131
  - src/compile/ruby/compile_to_ruby.rb
127
132
  - src/compile/ruby/compile_to_ruby_unit_test.rb
128
133
  - src/compile/ruby/excel_to_ruby_runtime.rb
129
134
  - src/compile/ruby/map_formulae_to_ruby.rb
130
135
  - src/compile/ruby/map_sheet_names_to_ruby_names.rb
131
136
  - src/compile/ruby/map_values_to_ruby.rb
132
- - src/compile/ruby.rb
133
- - src/compile.rb
137
+ - src/excel.rb
134
138
  - src/excel/area.rb
139
+ - src/excel/excel_functions.rb
135
140
  - src/excel/excel_functions/abs.rb
136
141
  - src/excel/excel_functions/add.rb
137
142
  - src/excel/excel_functions/and.rb
@@ -158,6 +163,7 @@ files:
158
163
  - src/excel/excel_functions/less_than.rb
159
164
  - src/excel/excel_functions/less_than_or_equal.rb
160
165
  - src/excel/excel_functions/log.rb
166
+ - src/excel/excel_functions/lower.rb
161
167
  - src/excel/excel_functions/max.rb
162
168
  - src/excel/excel_functions/mid.rb
163
169
  - src/excel/excel_functions/min.rb
@@ -189,30 +195,19 @@ files:
189
195
  - src/excel/excel_functions/text.rb
190
196
  - src/excel/excel_functions/trim.rb
191
197
  - src/excel/excel_functions/vlookup.rb
192
- - src/excel/excel_functions.rb
193
198
  - src/excel/formula_peg.rb
194
199
  - src/excel/formula_peg.txt
195
200
  - src/excel/reference.rb
196
201
  - src/excel/table.rb
197
- - src/excel.rb
198
202
  - src/excel_to_code.rb
199
- - src/extract/check_for_unknown_functions.rb
200
- - src/extract/extract_array_formulae.rb
201
- - src/extract/extract_everything.rb
202
- - src/extract/extract_formulae.rb
203
+ - src/extract.rb
204
+ - src/extract/extract_data_from_worksheet.rb
203
205
  - src/extract/extract_named_references.rb
204
206
  - src/extract/extract_relationships.rb
205
- - src/extract/extract_shared_formulae.rb
206
- - src/extract/extract_shared_formulae_targets.rb
207
207
  - src/extract/extract_shared_strings.rb
208
- - src/extract/extract_simple_formulae.rb
209
208
  - src/extract/extract_table.rb
210
- - src/extract/extract_values.rb
211
- - src/extract/extract_worksheet_dimensions.rb
212
209
  - src/extract/extract_worksheet_names.rb
213
- - src/extract/extract_worksheet_table_relationships.rb
214
- - src/extract/simple_extract_from_xml.rb
215
- - src/extract.rb
210
+ - src/rewrite.rb
216
211
  - src/rewrite/ast_copy_formula.rb
217
212
  - src/rewrite/ast_expand_array_formulae.rb
218
213
  - src/rewrite/caching_formula_parser.rb
@@ -227,7 +222,7 @@ files:
227
222
  - src/rewrite/rewrite_values_to_ast.rb
228
223
  - src/rewrite/rewrite_whole_row_column_references_to_areas.rb
229
224
  - src/rewrite/rewrite_worksheet_names.rb
230
- - src/rewrite.rb
225
+ - src/simplify.rb
231
226
  - src/simplify/count_formula_references.rb
232
227
  - src/simplify/emergency_array_formula_replace_indirect_bodge.rb
233
228
  - src/simplify/identify_dependencies.rb
@@ -251,12 +246,9 @@ files:
251
246
  - src/simplify/simplify_arithmetic.rb
252
247
  - src/simplify/sort_into_calculation_order.rb
253
248
  - src/simplify/wrap_formulae_that_return_arrays_and_are_not_in_arrays.rb
254
- - src/simplify.rb
249
+ - src/util.rb
255
250
  - src/util/not_supported_exception.rb
256
251
  - src/util/try.rb
257
- - src/util.rb
258
- - bin/excel_to_c
259
- - bin/excel_to_ruby
260
252
  homepage: http://github.com/tamc/excel_to_code
261
253
  licenses:
262
254
  - MIT
@@ -267,20 +259,19 @@ require_paths:
267
259
  - src
268
260
  required_ruby_version: !ruby/object:Gem::Requirement
269
261
  requirements:
270
- - - '>='
262
+ - - ">="
271
263
  - !ruby/object:Gem::Version
272
264
  version: 1.9.1
273
265
  required_rubygems_version: !ruby/object:Gem::Requirement
274
266
  requirements:
275
- - - '>='
267
+ - - ">="
276
268
  - !ruby/object:Gem::Version
277
269
  version: '0'
278
270
  requirements: []
279
271
  rubyforge_project:
280
- rubygems_version: 2.0.3
272
+ rubygems_version: 2.2.0
281
273
  signing_key:
282
274
  specification_version: 4
283
275
  summary: Converts .xlxs files into pure ruby 1.9 code or pure C code so that they
284
276
  can be executed without excel
285
277
  test_files: []
286
- has_rdoc: false
@@ -1,20 +0,0 @@
1
- require_relative '../compile/ruby/map_formulae_to_ruby'
2
-
3
- class CheckForUnknownFunctions
4
-
5
- attr_accessor :settable
6
-
7
- def self.rewrite(*args)
8
- self.new.rewrite(*args)
9
- end
10
-
11
- def check(input,output)
12
- self.settable ||= lambda { |ref| false }
13
- input.each_line do |line|
14
- line.scan(/\[:function, :["']?([A-Z ]+)['"]?/).each do |match|
15
- output.puts $1 unless MapFormulaeToRuby::FUNCTIONS.has_key?($1.to_sym)
16
- end
17
- end
18
- end
19
-
20
- end
@@ -1,23 +0,0 @@
1
- require_relative 'extract_formulae'
2
-
3
- class ExtractArrayFormulae < ExtractFormulae
4
-
5
- def start_formula(type,attributes)
6
- return unless type == 'array' && attributes.assoc('ref')
7
- @array_range = attributes.assoc('ref').last
8
- @parsing = true
9
- end
10
-
11
- def write_formula
12
- return if @formula.empty?
13
- formula_text = @formula.join.gsub(/[\r\n]+/,'')
14
- ast = CachingFormulaParser.parse(formula_text)
15
- unless ast
16
- $stderr.puts "Could not parse #{@sheet_name} #{@ref} #{formula_text}"
17
- exit
18
- end
19
- # FIXME: Should leave in original form rather than converting to ast?
20
- @output[[@sheet_name, @ref]] = [@array_range, ast]
21
- end
22
-
23
- end
@@ -1,46 +0,0 @@
1
- require 'nokogiri'
2
-
3
- class ExtractFormulae < Nokogiri::XML::SAX::Document
4
-
5
- def self.extract(*args)
6
- self.new.extract(*args)
7
- end
8
-
9
- def extract(sheet_name, input)
10
- @sheet_name = sheet_name.to_sym
11
- @output = {}
12
- @parsing = false
13
- Nokogiri::XML::SAX::Parser.new(self).parse(input)
14
- @output
15
- end
16
-
17
- def start_element(name,attributes)
18
- if name == 'c'
19
- @ref = attributes.assoc('r').last.to_sym
20
- elsif name == "f"
21
- type = attributes.assoc('t')
22
- @formula = []
23
- start_formula( type && type.last, attributes)
24
- end
25
- end
26
-
27
- def end_element(name)
28
- return unless @parsing && name == "f"
29
- @parsing = false
30
- write_formula
31
- end
32
-
33
- def characters(string)
34
- return unless @parsing
35
- @formula.push(string)
36
- end
37
-
38
- def start_formula(type,attributes)
39
- # Override
40
- end
41
-
42
- def write_formula
43
- # Override
44
- end
45
-
46
- end
@@ -1,24 +0,0 @@
1
- require_relative 'extract_formulae'
2
-
3
- class ExtractSharedFormulae < ExtractFormulae
4
-
5
- def start_formula(type,attributes)
6
- return unless type == 'shared' && attributes.assoc('ref')
7
- @shared_range = attributes.assoc('ref').last
8
- @shared_formula_identifier = attributes.assoc('si').last
9
- @parsing = true
10
- end
11
-
12
- def write_formula
13
- return if @formula.empty?
14
- formula_text = @formula.join.gsub(/[\r\n]+/,'')
15
- ast = CachingFormulaParser.parse(formula_text)
16
- unless ast
17
- $stderr.puts "Could not parse #{@sheet_name} #{@ref} #{formula_text}"
18
- exit
19
- end
20
- # FIXME: Should leave in original form rather than converting to ast?
21
- @output[[@sheet_name, @ref]] = [@shared_range, @shared_formula_identifier, ast]
22
- end
23
-
24
- end
@@ -1,15 +0,0 @@
1
- require_relative 'extract_formulae'
2
-
3
- class ExtractSharedFormulaeTargets < ExtractFormulae
4
-
5
- def start_formula(type,attributes)
6
- return unless type == 'shared'
7
- @shared_formula_identifier = attributes.assoc('si').last
8
- @parsing = true
9
- end
10
-
11
- def write_formula
12
- @output[[@sheet_name, @ref]] = @shared_formula_identifier
13
- end
14
-
15
- end
@@ -1,23 +0,0 @@
1
- require_relative 'extract_formulae'
2
-
3
- class ExtractSimpleFormulae < ExtractFormulae
4
-
5
- def start_formula(type,attributes)
6
- # Simple formulas don't have a type
7
- return if type
8
- @parsing = true
9
- end
10
-
11
- def write_formula
12
- return if @formula.empty?
13
- formula_text = @formula.join.gsub(/[\r\n]+/,'')
14
- ast = CachingFormulaParser.parse(formula_text)
15
- unless ast
16
- $stderr.puts "Could not parse #{@sheet_name} #{@ref} #{formula_text}"
17
- exit
18
- end
19
- # FIXME: Should leave in original form rather than converting to ast?
20
- @output[[@sheet_name, @ref]] = ast
21
- end
22
-
23
- end