roo 0.2.7 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/lib/roo/openoffice.rb +29 -3
- data/lib/roo/version.rb +2 -2
- data/test/test_roo.rb +60 -22
- data/website/index.html +36 -2
- data/website/index.txt +23 -0
- metadata +1 -1
data/History.txt
CHANGED
data/lib/roo/openoffice.rb
CHANGED
@@ -30,7 +30,10 @@ class Openoffice
|
|
30
30
|
file.close
|
31
31
|
@cell = Hash.new
|
32
32
|
@cell_type = Hash.new
|
33
|
-
|
33
|
+
@formula = Hash.new
|
34
|
+
if DateTime.now > Date.new(2007,6,21)
|
35
|
+
FileUtils::rm_r(@tmpdir)
|
36
|
+
end
|
34
37
|
@default_sheet = nil
|
35
38
|
end
|
36
39
|
|
@@ -65,6 +68,21 @@ class Openoffice
|
|
65
68
|
@cell["#{row},#{col}"]
|
66
69
|
end
|
67
70
|
|
71
|
+
# returns the formula at (row,col)
|
72
|
+
def formula(row,col)
|
73
|
+
read_cells unless @cells_read
|
74
|
+
row,col = normalize(row,col)
|
75
|
+
if @formula["#{row},#{col}"] == nil
|
76
|
+
return nil
|
77
|
+
else
|
78
|
+
return @formula["#{row},#{col}"]["oooc:".length..-1]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def formula?(row,col)
|
83
|
+
formula(row,col) != nil
|
84
|
+
end
|
85
|
+
|
68
86
|
def set(row,col,value)
|
69
87
|
puts "setze zelle(#{row},#{col})"
|
70
88
|
@cell["#{row},#{col}"] = value
|
@@ -74,7 +92,13 @@ class Openoffice
|
|
74
92
|
def celltype(row,col)
|
75
93
|
read_cells unless @cells_read
|
76
94
|
row,col = normalize(row,col)
|
77
|
-
|
95
|
+
|
96
|
+
# p @formula["#{row},#{col}"]
|
97
|
+
if @formula["#{row},#{col}"]
|
98
|
+
return :formula
|
99
|
+
else
|
100
|
+
@cell_type["#{row},#{col}"]
|
101
|
+
end
|
78
102
|
end
|
79
103
|
|
80
104
|
|
@@ -285,6 +309,7 @@ private
|
|
285
309
|
# p tr
|
286
310
|
if tr.name == 'table-cell'
|
287
311
|
skip = tr.attributes['number-columns-repeated']
|
312
|
+
formula = tr.attributes['formula']
|
288
313
|
vt = tr.attributes['value-type']
|
289
314
|
v = tr.attributes['value']
|
290
315
|
if vt == 'string'
|
@@ -300,6 +325,7 @@ private
|
|
300
325
|
else
|
301
326
|
0.upto(skip.to_i-1) do |i|
|
302
327
|
@cell_type["#{y},#{x+i}"] = vt
|
328
|
+
@formula["#{y},#{x+i}"] = formula if formula
|
303
329
|
if @cell_type["#{y},#{x+i}"] == 'float'
|
304
330
|
@cell["#{y},#{x+i}"] = v.to_f
|
305
331
|
elsif @cell_type["#{y},#{x+i}"] == 'string'
|
@@ -320,7 +346,7 @@ private
|
|
320
346
|
x += 1
|
321
347
|
end
|
322
348
|
end # if skip
|
323
|
-
|
349
|
+
@formula["#{y},#{x}"] = formula if formula
|
324
350
|
@cell_type["#{y},#{x}"] = vt
|
325
351
|
if @cell_type["#{y},#{x}"] == 'float'
|
326
352
|
@cell["#{y},#{x}"] = v.to_f
|
data/lib/roo/version.rb
CHANGED
data/test/test_roo.rb
CHANGED
@@ -619,7 +619,6 @@ end
|
|
619
619
|
|
620
620
|
def test_italo_table
|
621
621
|
oo = Openoffice.new(File.join("test","simple_spreadsheet_from_italo.ods"))
|
622
|
-
p oo.sheets
|
623
622
|
oo.default_sheet = oo.sheets.first
|
624
623
|
|
625
624
|
assert_equal '1', oo.cell('A',1)
|
@@ -678,30 +677,69 @@ end
|
|
678
677
|
|
679
678
|
end
|
680
679
|
|
681
|
-
def
|
682
|
-
|
683
|
-
|
684
|
-
oo = Excel.new(File.join("test","latlondata.xls"))
|
685
|
-
#oo = Excel.new("numbers1.xls")
|
680
|
+
def test_external1
|
681
|
+
if File.exist?(File.join("test","external1.xls"))
|
682
|
+
oo = Excel.new(File.join("test","external1.xls"))
|
686
683
|
oo.default_sheet = 2
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
684
|
+
assert_equal(-105.675, oo.cell('Z',5))
|
685
|
+
assert_equal(41.31205555, oo.cell('AA',5))
|
686
|
+
assert_equal(2218.3344, oo.cell('AB',5))
|
687
|
+
end
|
688
|
+
end
|
689
|
+
|
690
|
+
|
691
|
+
def test_formula
|
692
|
+
|
693
|
+
oo = Openoffice.new(File.join("test","formula.ods"))
|
694
|
+
oo.default_sheet = oo.sheets.first
|
695
|
+
assert_equal 1, oo.cell('A',1)
|
696
|
+
assert_equal 2, oo.cell('A',2)
|
697
|
+
assert_equal 3, oo.cell('A',3)
|
698
|
+
assert_equal 4, oo.cell('A',4)
|
699
|
+
assert_equal 5, oo.cell('A',5)
|
700
|
+
assert_equal 6, oo.cell('A',6)
|
701
|
+
assert_equal 21, oo.cell('A',7)
|
702
|
+
assert_equal :formula, oo.celltype('A',7)
|
703
|
+
#assert_equal "=SUM(A1:A6)", oo.formula('A',7)
|
704
|
+
#assert_equal "=SUM(A1:A6)", oo.formula('B',7)
|
705
|
+
#assert_equal "=SUM(A1:A6)", oo.formula('B',7)
|
706
|
+
assert_equal "=[Sheet2.A1]", oo.formula('C',7)
|
707
|
+
assert_nil oo.formula('A',6)
|
708
|
+
|
709
|
+
oo = Openoffice.new(File.join("test","external1.ods"))
|
710
|
+
# each spreadsheet, each row, each column
|
711
|
+
oo.sheets.each {|sheet|
|
712
|
+
oo.default_sheet = sheet
|
713
|
+
oo.first_row.upto(oo.last_row) do |row|
|
714
|
+
oo.first_column.upto(oo.last_column) do |col|
|
715
|
+
value = oo.cell(row,col)
|
716
|
+
# is it a formula?
|
717
|
+
if oo.formula?(row,col)
|
718
|
+
# formula
|
719
|
+
puts oo.formula(row,col)
|
720
|
+
# value
|
721
|
+
puts value if value
|
722
|
+
else
|
723
|
+
puts value if value
|
724
|
+
end
|
697
725
|
end
|
698
726
|
end
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
727
|
+
}
|
728
|
+
if false
|
729
|
+
oo = Excel.new(File.join("test","formula.xls"))
|
730
|
+
oo.default_sheet = 1 # oo.sheets.first
|
731
|
+
assert_equal 1, oo.cell('A',1)
|
732
|
+
assert_equal 2, oo.cell('A',2)
|
733
|
+
assert_equal 3, oo.cell('A',3)
|
734
|
+
assert_equal 4, oo.cell('A',4)
|
735
|
+
assert_equal 5, oo.cell('A',5)
|
736
|
+
assert_equal 6, oo.cell('A',6)
|
737
|
+
assert_equal 21, oo.cell('A',7), oo.cell('A',7).to_yaml
|
738
|
+
assert_equal :formula, oo.celltype('A',7)
|
739
|
+
assert_equal "=SUM(A1:A6)", oo.formula('A',7)
|
740
|
+
assert_equal "=SUM(A1:A6)", oo.formula('B',7)
|
741
|
+
assert_nil oo.formula('A',6)
|
705
742
|
end
|
743
|
+
|
706
744
|
end
|
707
745
|
end # class
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>roo</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/roo"; return false'>
|
35
35
|
Get Version
|
36
|
-
<a href="http://rubyforge.org/projects/roo" class="numbers">0.
|
36
|
+
<a href="http://rubyforge.org/projects/roo" class="numbers">0.3.0</a>
|
37
37
|
</div>
|
38
38
|
<h2>What</h2>
|
39
39
|
|
@@ -137,6 +137,25 @@
|
|
137
137
|
</code>
|
138
138
|
</pre>
|
139
139
|
|
140
|
+
<h3>Formulas</h3>
|
141
|
+
|
142
|
+
|
143
|
+
<p>Formulas in Openoffice-Spreadsheets can be handled.</p>
|
144
|
+
|
145
|
+
|
146
|
+
<p>oo.celltype(row,col) returns :formula if there is a formula in this cell.</p>
|
147
|
+
|
148
|
+
|
149
|
+
<p>oo.formula(row,col) returns the formula in this cell in a string variable.
|
150
|
+
If there is no formula in this cell nil is return</p>
|
151
|
+
|
152
|
+
|
153
|
+
<p>oo.cell(row,col) returns the computed result of the formula (as it was saved in the file, no recalculation is done in this Gem).</p>
|
154
|
+
|
155
|
+
|
156
|
+
<p>Please note: formulas in Excel-Spreadsheets cannot be handled (this is another gem, see: “Thanks”)</p>
|
157
|
+
|
158
|
+
|
140
159
|
<h3>Using MS-Excel spreadsheets</h3>
|
141
160
|
|
142
161
|
|
@@ -154,6 +173,21 @@ Replace Openoffice with
|
|
154
173
|
is the setting of the default-worksheet. OpenOffice uses the name of the worksheet whereas Excel needs the index of the worksheet (1,2,3,..).</p>
|
155
174
|
|
156
175
|
|
176
|
+
<p>Formulas cannot be handled in Excel-spreadsheets.</p>
|
177
|
+
|
178
|
+
|
179
|
+
<h2>Where is it used?</h2>
|
180
|
+
|
181
|
+
|
182
|
+
<p>How do you use roo? What are you doing with roo?</p>
|
183
|
+
|
184
|
+
|
185
|
+
<p>If you have an interesting application where you use roo then write me a short description of your project and i will publish it here (write, if your email-address should be published or not).</p>
|
186
|
+
|
187
|
+
|
188
|
+
<p>If you don’t want to publish the details you can also write me an email and state, that it should not be published – i am just curious to hear, where it is used.</p>
|
189
|
+
|
190
|
+
|
157
191
|
<h2>Documentation</h2>
|
158
192
|
|
159
193
|
|
@@ -199,7 +233,7 @@ is the setting of the default-worksheet. OpenOffice uses the name of the workshe
|
|
199
233
|
<li>Dirk Huth fürs Testen unter Windows</li>
|
200
234
|
</ul>
|
201
235
|
<p class="coda">
|
202
|
-
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>,
|
236
|
+
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 20th June 2007<br>
|
203
237
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
204
238
|
</p>
|
205
239
|
</div>
|
data/website/index.txt
CHANGED
@@ -87,6 +87,19 @@ to
|
|
87
87
|
</code>
|
88
88
|
</pre>
|
89
89
|
|
90
|
+
h3. Formulas
|
91
|
+
|
92
|
+
Formulas in Openoffice-Spreadsheets can be handled.
|
93
|
+
|
94
|
+
oo.celltype(row,col) returns :formula if there is a formula in this cell.
|
95
|
+
|
96
|
+
oo.formula(row,col) returns the formula in this cell in a string variable.
|
97
|
+
If there is no formula in this cell nil is return
|
98
|
+
|
99
|
+
oo.cell(row,col) returns the computed result of the formula (as it was saved in the file, no recalculation is done in this Gem).
|
100
|
+
|
101
|
+
Please note: formulas in Excel-Spreadsheets cannot be handled (this is another gem, see: "Thanks")
|
102
|
+
|
90
103
|
h3. Using MS-Excel spreadsheets
|
91
104
|
|
92
105
|
You can also access MS-Excel spreadsheat.
|
@@ -101,6 +114,16 @@ Replace Openoffice with
|
|
101
114
|
all methode are the same for OpenOffice and Excel-objects. The only difference
|
102
115
|
is the setting of the default-worksheet. OpenOffice uses the name of the worksheet whereas Excel needs the index of the worksheet (1,2,3,..).
|
103
116
|
|
117
|
+
Formulas cannot be handled in Excel-spreadsheets.
|
118
|
+
|
119
|
+
|
120
|
+
h2. Where is it used?
|
121
|
+
|
122
|
+
How do you use roo? What are you doing with roo?
|
123
|
+
|
124
|
+
If you have an interesting application where you use roo then write me a short description of your project and i will publish it here (write, if your email-address should be published or not).
|
125
|
+
|
126
|
+
If you don't want to publish the details you can also write me an email and state, that it should not be published - i am just curious to hear, where it is used.
|
104
127
|
|
105
128
|
h2. Documentation
|
106
129
|
|
metadata
CHANGED