roo 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/Manifest.txt +1 -0
- data/README.txt +1 -0
- data/lib/roo/excel.rb +0 -71
- data/lib/roo/openoffice.rb +65 -9
- data/lib/roo/version.rb +1 -1
- data/test/bode-v1.ods.zip +0 -0
- data/test/test_roo.rb +33 -10
- data/website/index.html +4 -2
- data/website/index.txt +3 -1
- metadata +2 -1
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
data/lib/roo/excel.rb
CHANGED
@@ -25,12 +25,6 @@ class Excel < Openoffice
|
|
25
25
|
@first_row = @last_row = @first_column = @last_column = nil
|
26
26
|
end
|
27
27
|
|
28
|
-
def remove_tmp
|
29
|
-
if File.exists?(@tmpdir)
|
30
|
-
FileUtils::rm_r(@tmpdir)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
28
|
def sheets
|
35
29
|
#if DateTime.now < Date.new(2007,6,10)
|
36
30
|
# return ["Tabelle1", "Name of Sheet 2", "Sheet3"]
|
@@ -163,37 +157,6 @@ class Excel < Openoffice
|
|
163
157
|
false
|
164
158
|
end
|
165
159
|
|
166
|
-
def open_from_uri(uri)
|
167
|
-
require 'open-uri' ;
|
168
|
-
|
169
|
-
script = nil ;
|
170
|
-
result = nil ;
|
171
|
-
#uri = "/home/tp/ruby-test/roo/test/numbers1.xls"
|
172
|
-
|
173
|
-
#begin ;
|
174
|
-
# result = open(page) {|w| script = w.readlines } ;
|
175
|
-
#rescue => e ;
|
176
|
-
# puts "e=#{e}, e.class=#{e.class}" ;
|
177
|
-
# result = [] ;
|
178
|
-
#end ;
|
179
|
-
#
|
180
|
-
# puts "result class=#{result.class}, count=#{result.length}" ; #,
|
181
|
-
# data=#{result}" ;
|
182
|
-
# puts "result[0] =>#{result[0].chomp}<=" if result[0] ;
|
183
|
-
|
184
|
-
tempfilename = File.join(@tmpdir, File.basename(uri))
|
185
|
-
f = File.open( File.join(@tmpdir, File.basename(uri)),"w")
|
186
|
-
begin
|
187
|
-
open(uri) do |net|
|
188
|
-
f.write(net.read)
|
189
|
-
end
|
190
|
-
rescue
|
191
|
-
raise "could not open #{uri}"
|
192
|
-
end
|
193
|
-
f.close
|
194
|
-
File.join(@tmpdir, File.basename(uri))
|
195
|
-
end
|
196
|
-
|
197
160
|
private
|
198
161
|
|
199
162
|
# check if default_sheet was set
|
@@ -242,38 +205,4 @@ private
|
|
242
205
|
raise StandardError, "sheet '#{name}' not found"
|
243
206
|
end
|
244
207
|
|
245
|
-
def process_zipfile(zip, path='')
|
246
|
-
ret=nil
|
247
|
-
if zip.file.file? path
|
248
|
-
#puts %{#{path}: "#{zip.read(path)}"}
|
249
|
-
puts %{#{path}: }
|
250
|
-
# extract and return filename
|
251
|
-
@tmpdir = "oo_"+$$.to_s
|
252
|
-
unless File.exists?(@tmpdir)
|
253
|
-
FileUtils::mkdir(@tmpdir)
|
254
|
-
end
|
255
|
-
#file = File.new(File.join(@tmpdir, path))
|
256
|
-
file = File.open(File.join(@tmpdir, path),"w")
|
257
|
-
file.write(zip.read(path))
|
258
|
-
file.close
|
259
|
-
return File.join(@tmpdir, path)
|
260
|
-
else
|
261
|
-
unless path.empty?
|
262
|
-
path += '/'
|
263
|
-
puts path
|
264
|
-
end
|
265
|
-
zip.dir.foreach(path) do |filename|
|
266
|
-
ret = process_zipfile(zip, path + filename)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
ret
|
270
|
-
end
|
271
|
-
|
272
|
-
def unzip(filename)
|
273
|
-
ret = nil
|
274
|
-
Zip::ZipFile.open(filename) do |zip|
|
275
|
-
ret = process_zipfile zip
|
276
|
-
end
|
277
|
-
ret
|
278
|
-
end
|
279
208
|
end
|
data/lib/roo/openoffice.rb
CHANGED
@@ -13,10 +13,15 @@ class Openoffice
|
|
13
13
|
|
14
14
|
@@nr = 0
|
15
15
|
|
16
|
-
# initialization and opening of a
|
17
|
-
#
|
18
|
-
# and the file does not exist
|
16
|
+
# initialization and opening of a spreadsheet file
|
17
|
+
# values for packed: :zip
|
19
18
|
def initialize(filename, packed=nil) #, create = false)
|
19
|
+
@tmpdir = "oo_"+$$.to_s
|
20
|
+
unless File.exists?(@tmpdir)
|
21
|
+
FileUtils::mkdir(@tmpdir)
|
22
|
+
end
|
23
|
+
filename = open_from_uri(filename) if filename[0,7] == "http://"
|
24
|
+
filename = unzip(filename) if packed and packed == :zip
|
20
25
|
if filename[-4..-1] != ".ods"
|
21
26
|
warn "are you sure, this is an openoffice file?"
|
22
27
|
end
|
@@ -25,10 +30,6 @@ class Openoffice
|
|
25
30
|
#end
|
26
31
|
@cells_read = false
|
27
32
|
@filename = filename
|
28
|
-
@tmpdir = "oo_"+$$.to_s
|
29
|
-
unless File.exists?(@tmpdir)
|
30
|
-
FileUtils::mkdir(@tmpdir)
|
31
|
-
end
|
32
33
|
@@nr += 1
|
33
34
|
@file_nr = @@nr
|
34
35
|
extract_content
|
@@ -60,7 +61,7 @@ class Openoffice
|
|
60
61
|
# the empty files in an openoffice zip-file
|
61
62
|
load 'base64include.rb'
|
62
63
|
# puts @@empty_spreadsheet
|
63
|
-
f = File.open(filename,'
|
64
|
+
f = File.open(filename,'wb')
|
64
65
|
f.print(Base64.decode64(@@empty_spreadsheet))
|
65
66
|
f.close
|
66
67
|
end
|
@@ -154,6 +155,12 @@ class Openoffice
|
|
154
155
|
end
|
155
156
|
end
|
156
157
|
|
158
|
+
def remove_tmp
|
159
|
+
if File.exists?(@tmpdir)
|
160
|
+
FileUtils::rm_r(@tmpdir)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
157
164
|
# returns an array of sheet names in the spreadsheet
|
158
165
|
def sheets
|
159
166
|
return_sheets = []
|
@@ -378,6 +385,39 @@ class Openoffice
|
|
378
385
|
result
|
379
386
|
end
|
380
387
|
|
388
|
+
protected
|
389
|
+
|
390
|
+
def process_zipfile_packed(zip, path='')
|
391
|
+
ret=nil
|
392
|
+
if zip.file.file? path
|
393
|
+
# extract and return filename
|
394
|
+
@tmpdir = "oo_"+$$.to_s
|
395
|
+
unless File.exists?(@tmpdir)
|
396
|
+
FileUtils::mkdir(@tmpdir)
|
397
|
+
end
|
398
|
+
file = File.open(File.join(@tmpdir, path),"wb")
|
399
|
+
file.write(zip.read(path))
|
400
|
+
file.close
|
401
|
+
return File.join(@tmpdir, path)
|
402
|
+
else
|
403
|
+
unless path.empty?
|
404
|
+
path += '/'
|
405
|
+
end
|
406
|
+
zip.dir.foreach(path) do |filename|
|
407
|
+
ret = process_zipfile_packed(zip, path + filename)
|
408
|
+
end
|
409
|
+
end
|
410
|
+
ret
|
411
|
+
end
|
412
|
+
|
413
|
+
def unzip(filename)
|
414
|
+
ret = nil
|
415
|
+
Zip::ZipFile.open(filename) do |zip|
|
416
|
+
ret = process_zipfile_packed zip
|
417
|
+
end
|
418
|
+
ret
|
419
|
+
end
|
420
|
+
|
381
421
|
private
|
382
422
|
# read the version of the OO-Version
|
383
423
|
def oo_version
|
@@ -516,7 +556,7 @@ private
|
|
516
556
|
def process_zipfile(zip, path='')
|
517
557
|
if zip.file.file? path
|
518
558
|
if path == "content.xml"
|
519
|
-
open(@tmpdir+'/'+@file_nr.to_s+'_roo_content.xml','
|
559
|
+
open(@tmpdir+'/'+@file_nr.to_s+'_roo_content.xml','wb') {|f|
|
520
560
|
f << zip.read(path)
|
521
561
|
}
|
522
562
|
end
|
@@ -596,4 +636,20 @@ private
|
|
596
636
|
def Openoffice.oo_type_2_roo_type(ootype)
|
597
637
|
return A_ROO_TYPE[ootype]
|
598
638
|
end
|
639
|
+
|
640
|
+
|
641
|
+
def open_from_uri(uri)
|
642
|
+
require 'open-uri' ;
|
643
|
+
tempfilename = File.join(@tmpdir, File.basename(uri))
|
644
|
+
f = File.open(tempfilename,"wb")
|
645
|
+
begin
|
646
|
+
open(uri) do |net|
|
647
|
+
f.write(net.read)
|
648
|
+
end
|
649
|
+
rescue
|
650
|
+
raise "could not open #{uri}"
|
651
|
+
end
|
652
|
+
f.close
|
653
|
+
File.join(@tmpdir, File.basename(uri))
|
654
|
+
end
|
599
655
|
end # class
|
data/lib/roo/version.rb
CHANGED
Binary file
|
data/test/test_roo.rb
CHANGED
@@ -1057,17 +1057,40 @@ class TestRoo < Test::Unit::TestCase
|
|
1057
1057
|
|
1058
1058
|
end
|
1059
1059
|
|
1060
|
-
def
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1060
|
+
def test_excel_open_from_uri_and_zipped
|
1061
|
+
after Date.new(2007,8,30) do
|
1062
|
+
url = 'http://stiny-leonhard.de/bode-v1.xls.zip'
|
1063
|
+
excel = Excel.new(url, :zip)
|
1064
|
+
assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
|
1065
|
+
excel.remove_tmp # don't forget to remove the temporary files
|
1066
|
+
end
|
1065
1067
|
end
|
1066
1068
|
|
1067
|
-
def
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1069
|
+
def test_openoffice_open_from_uri_and_zipped
|
1070
|
+
after Date.new(2007,8,30) do
|
1071
|
+
url = 'http://spazioinwind.libero.it/s2/rata.ods.zip'
|
1072
|
+
sheet = Openoffice.new(url, :zip)
|
1073
|
+
assert_equal 'ist "e" im Nenner von H(s)', sheet.cell('b', 5)
|
1074
|
+
sheet.remove_tmp # don't forget to remove the temporary files
|
1075
|
+
end
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
def test_excel_zipped
|
1079
|
+
after Date.new(2007,8,30) do
|
1080
|
+
excel = Excel.new(File.join("test","bode-v1.xls.zip"), :zip)
|
1081
|
+
assert excel
|
1082
|
+
assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
|
1083
|
+
excel.remove_tmp # don't forget to remove the temporary files
|
1084
|
+
end
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
def test_openoffice_zipped
|
1088
|
+
after Date.new(2007,8,10) do
|
1089
|
+
oo = Openoffice.new(File.join("test","bode-v1.ods.zip"), :zip)
|
1090
|
+
assert oo
|
1091
|
+
oo.default_sheet = oo.sheets.first
|
1092
|
+
assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
|
1093
|
+
oo.remove_tmp # don't forget to remove the temporary files
|
1094
|
+
end
|
1072
1095
|
end
|
1073
1096
|
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.5.
|
36
|
+
<a href="http://rubyforge.org/projects/roo" class="numbers">0.5.3</a>
|
37
37
|
</div>
|
38
38
|
<h2>What</h2>
|
39
39
|
|
@@ -271,15 +271,17 @@ is the setting of the default-worksheet. OpenOffice uses the name of the workshe
|
|
271
271
|
<h3>Accessing Spreadsheet over the Web</h3>
|
272
272
|
|
273
273
|
|
274
|
-
You can even read excel-spreadsheets from a http-address:
|
274
|
+
You can even read openoffice or excel-spreadsheets from a http-address:
|
275
275
|
<pre>
|
276
276
|
<code>oo = Excel.new("http://www.somedomain.com/simple_spreadsheet.xls").
|
277
|
+
oo = Openoffice.new("http://www.somedomain.com/simple_spreadsheet.ods").
|
277
278
|
</code>
|
278
279
|
</pre>
|
279
280
|
|
280
281
|
or a zipped file:
|
281
282
|
<pre>
|
282
283
|
<code>oo = Excel.new("http://www.somedomain.com/simple_spreadsheet.xls.zip",:zip).
|
284
|
+
oo = Openoffice.new("http://www.somedomain.com/simple_spreadsheet.ods.zip",:zip).
|
283
285
|
</code>
|
284
286
|
</pre>
|
285
287
|
|
data/website/index.txt
CHANGED
@@ -172,15 +172,17 @@ Old .sxc OpenOffice files are currently not supported - please load these files
|
|
172
172
|
|
173
173
|
h3. Accessing Spreadsheet over the Web
|
174
174
|
|
175
|
-
You can even read excel-spreadsheets from a http-address:
|
175
|
+
You can even read openoffice or excel-spreadsheets from a http-address:
|
176
176
|
<pre>
|
177
177
|
<code>oo = Excel.new("http://www.somedomain.com/simple_spreadsheet.xls").
|
178
|
+
oo = Openoffice.new("http://www.somedomain.com/simple_spreadsheet.ods").
|
178
179
|
</code>
|
179
180
|
</pre>
|
180
181
|
|
181
182
|
or a zipped file:
|
182
183
|
<pre>
|
183
184
|
<code>oo = Excel.new("http://www.somedomain.com/simple_spreadsheet.xls.zip",:zip).
|
185
|
+
oo = Openoffice.new("http://www.somedomain.com/simple_spreadsheet.ods.zip",:zip).
|
184
186
|
</code>
|
185
187
|
</pre>
|
186
188
|
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: roo
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
6
|
+
version: 0.5.3
|
7
7
|
date: 2007-08-26 00:00:00 +02:00
|
8
8
|
summary: roo can access the contents of OpenOffice-Spreadsheets and Excel-Spreadsheets
|
9
9
|
require_paths:
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- test/only_one_sheet.ods
|
56
56
|
- test/only_one_sheet.xls
|
57
57
|
- test/bode-v1.xls.zip
|
58
|
+
- test/bode-v1.ods.zip
|
58
59
|
- website/index.html
|
59
60
|
- website/index.txt
|
60
61
|
- website/javascripts/rounded_corners_lite.inc.js
|