excel_to_code 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/src/commands/excel_to_c.rb +5 -2
- data/src/commands/excel_to_x.rb +5 -3
- data/src/compile/c/a.out +0 -0
- data/src/compile/c/excel_to_c_runtime.c +5 -2
- data/src/simplify/map_formulae_to_values.rb +12 -1
- data/src/simplify/replace_formulae_with_calculated_values.rb +1 -0
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f1f2fd79b3625aa813b46493b34cae10d4455b3
|
4
|
+
data.tar.gz: 3d5c4b5065c321940d108565458ceb6426c10595
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbb44e22f54c3d0d086cd8fae0e82cdd717ef22ad0f72acf1bc577db80aaaf3c7516e38bf3e6c28d7a3df3a173d94c8d0adcd44fe071b048206810ca6a0ff2f3
|
7
|
+
data.tar.gz: b865adf4a4797e207e50ba43134599321b1b54bbd1ba28dabe9c882870504d6f2d773f5f7eaa17846b69d1d7c2ced7fbb1dff781b2d8ae23509aca7a21b26ec0
|
data/README.md
CHANGED
@@ -28,6 +28,11 @@ this should work:
|
|
28
28
|
3. bundle
|
29
29
|
4. rspec spec/*
|
30
30
|
|
31
|
+
To test the C runtime:
|
32
|
+
1. cd src/compile/c
|
33
|
+
2. cc excel_to_c_runtime
|
34
|
+
3. ./a.out
|
35
|
+
|
31
36
|
# Hacking excel_to_code
|
32
37
|
|
33
38
|
There are some how to guides in the doc folder.
|
@@ -37,6 +42,6 @@ There are some how to guides in the doc folder.
|
|
37
42
|
1. Not tested at all on Windows
|
38
43
|
2. INDIRECT formula must be convertable at runtime into a standard formula
|
39
44
|
3. Doesn't implement all functions (see doc/Which_functions_are_implemented.md)
|
40
|
-
4. Doesn't implement references that involve range unions and lists
|
45
|
+
4. Doesn't implement references that involve range unions and lists (but does implement standard ranges)
|
41
46
|
5. Sometimes gives cells as being empty, when excel would give the cell as having a numeric value of zero
|
42
47
|
6. The generated C version does not multithread and will give bad results if you try
|
data/src/commands/excel_to_c.rb
CHANGED
@@ -214,7 +214,10 @@ class #{ruby_module_name}Shim
|
|
214
214
|
|
215
215
|
def get(name)
|
216
216
|
return 0 unless #{ruby_module_name}.respond_to?(name)
|
217
|
-
|
217
|
+
ruby_value_from_excel_value(#{ruby_module_name}.send(name))
|
218
|
+
end
|
219
|
+
|
220
|
+
def ruby_value_from_excel_value(excel_value)
|
218
221
|
case excel_value[:type]
|
219
222
|
when :ExcelNumber; excel_value[:number]
|
220
223
|
when :ExcelString; excel_value[:string].read_string.force_encoding("utf-8")
|
@@ -228,7 +231,7 @@ class #{ruby_module_name}Shim
|
|
228
231
|
a = Array.new(r) { Array.new(c) }
|
229
232
|
(0...r).each do |row|
|
230
233
|
(0...c).each do |column|
|
231
|
-
a[row][column] =
|
234
|
+
a[row][column] = ruby_value_from_excel_value(#{ruby_module_name}::ExcelValue.new(p + (((row*c)+column)*s)))
|
232
235
|
end
|
233
236
|
end
|
234
237
|
return a
|
data/src/commands/excel_to_x.rb
CHANGED
@@ -143,6 +143,11 @@ class ExcelToX
|
|
143
143
|
extract_data_from_worksheets
|
144
144
|
merge_table_files
|
145
145
|
|
146
|
+
# This turns named references that are specified as getters and setters
|
147
|
+
# into a series of required cell references
|
148
|
+
transfer_named_references_to_keep_into_cells_to_keep
|
149
|
+
transfer_named_references_that_can_be_set_at_runtime_into_cells_that_can_be_set_at_runtime
|
150
|
+
|
146
151
|
# These perform some translations to simplify the excel
|
147
152
|
# Including:
|
148
153
|
# * Turning row and column references (e.g., A:A) to areas, based on the size of the worksheet
|
@@ -157,9 +162,6 @@ class ExcelToX
|
|
157
162
|
# that are in the excel.
|
158
163
|
simplify_worksheets # Replacing shared strings and named references with their actual values, tidying arithmetic
|
159
164
|
|
160
|
-
transfer_named_references_to_keep_into_cells_to_keep
|
161
|
-
transfer_named_references_that_can_be_set_at_runtime_into_cells_that_can_be_set_at_runtime
|
162
|
-
|
163
165
|
# In case this hasn't been set by the user
|
164
166
|
if cells_that_can_be_set_at_runtime.empty?
|
165
167
|
log.info "Creating a good set of cells that should be settable"
|
data/src/compile/c/a.out
ADDED
Binary file
|
@@ -5,6 +5,9 @@
|
|
5
5
|
#include <ctype.h>
|
6
6
|
#include <math.h>
|
7
7
|
|
8
|
+
// To run the tests at the end of this file
|
9
|
+
// cc excel_to_c_runtime; ./a.out
|
10
|
+
|
8
11
|
// FIXME: Extract a header file
|
9
12
|
|
10
13
|
// I predefine an array of ExcelValues to store calculations
|
@@ -469,8 +472,6 @@ static ExcelValue not_equal(ExcelValue a_v, ExcelValue b_v) {
|
|
469
472
|
|
470
473
|
static ExcelValue excel_if(ExcelValue condition, ExcelValue true_case, ExcelValue false_case ) {
|
471
474
|
CHECK_FOR_PASSED_ERROR(condition)
|
472
|
-
CHECK_FOR_PASSED_ERROR(true_case)
|
473
|
-
CHECK_FOR_PASSED_ERROR(false_case)
|
474
475
|
|
475
476
|
switch (condition.type) {
|
476
477
|
case ExcelBoolean:
|
@@ -1586,6 +1587,8 @@ int test_functions() {
|
|
1586
1587
|
assert(excel_if(FALSE,new_excel_number(10),new_excel_number(20)).type == ExcelNumber);
|
1587
1588
|
assert(excel_if(FALSE,new_excel_number(10),new_excel_number(20)).number == 20);
|
1588
1589
|
assert(excel_if(NA,new_excel_number(10),new_excel_number(20)).type == ExcelError);
|
1590
|
+
assert(excel_if(TRUE,new_excel_number(10),NA).type == ExcelNumber);
|
1591
|
+
assert(excel_if(TRUE,new_excel_number(10),NA).number == 10);
|
1589
1592
|
|
1590
1593
|
// Test excel_match
|
1591
1594
|
ExcelValue excel_match_array_1[] = { new_excel_number(10), new_excel_number(100) };
|
@@ -11,9 +11,20 @@ class MapFormulaeToValues
|
|
11
11
|
def initialize
|
12
12
|
@value_for_ast = MapValuesToRuby.new
|
13
13
|
@calculator = FormulaeCalculator.new
|
14
|
+
@cache = {}
|
14
15
|
end
|
15
|
-
|
16
|
+
|
17
|
+
def reset
|
18
|
+
@cache = {}
|
19
|
+
end
|
20
|
+
|
21
|
+
# FIXME: Caching works in the odd edge cases of long formula
|
22
|
+
# but I really need to find the root cause of the problem
|
16
23
|
def map(ast)
|
24
|
+
@cache[ast] ||= do_map(ast)
|
25
|
+
end
|
26
|
+
|
27
|
+
def do_map(ast)
|
17
28
|
return ast unless ast.is_a?(Array)
|
18
29
|
operator = ast[0]
|
19
30
|
if respond_to?(operator)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: excel_to_code
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
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-
|
11
|
+
date: 2013-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubypeg
|
@@ -76,13 +76,15 @@ description: "# excel_to_code\n\nConverts some excel spreadsheets (.xlsx, not .x
|
|
76
76
|
worksheet> --prune-except <name of output worksheet> <excel file name> \n\t\nthis
|
77
77
|
should work:\n\n\t./bin/excel_to_c --help\n\n# Testing excel_to_code\n\n1. Make
|
78
78
|
sure you have ruby 1.9.2 or later installed\n2. gem install bundler # May need to
|
79
|
-
use sudo\n3. bundle\n4. rspec spec/*\n\
|
80
|
-
|
79
|
+
use sudo\n3. bundle\n4. rspec spec/*\n\nTo test the C runtime:\n1. cd src/compile/c\n2.
|
80
|
+
cc excel_to_c_runtime\n3. ./a.out\n\n# Hacking excel_to_code\n\nThere are some how
|
81
|
+
to guides in the doc folder. \n\n# Limitations\n\n1. Not tested at all on Windows\n2.
|
81
82
|
INDIRECT formula must be convertable at runtime into a standard formula\n3. Doesn't
|
82
83
|
implement all functions (see doc/Which_functions_are_implemented.md)\n4. Doesn't
|
83
|
-
implement references that involve range unions and lists
|
84
|
-
as being empty, when excel would give the cell
|
85
|
-
The generated C version does not multithread
|
84
|
+
implement references that involve range unions and lists (but does implement standard
|
85
|
+
ranges)\n5. Sometimes gives cells as being empty, when excel would give the cell
|
86
|
+
as having a numeric value of zero\n6. The generated C version does not multithread
|
87
|
+
and will give bad results if you try\n"
|
86
88
|
email: tamc@greenonblack.com
|
87
89
|
executables:
|
88
90
|
- excel_to_c
|
@@ -96,6 +98,7 @@ files:
|
|
96
98
|
- src/commands/excel_to_ruby.rb
|
97
99
|
- src/commands/excel_to_x.rb
|
98
100
|
- src/commands.rb
|
101
|
+
- src/compile/c/a.out
|
99
102
|
- src/compile/c/compile_named_reference_setters.rb
|
100
103
|
- src/compile/c/compile_to_c.rb
|
101
104
|
- src/compile/c/compile_to_c_header.rb
|