roo 0.8.2 → 0.8.3
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/excel.rb +54 -15
- data/lib/roo/generic_spreadsheet.rb +80 -1
- data/lib/roo/google.rb +0 -78
- data/lib/roo/openoffice.rb +0 -80
- data/lib/roo/version.rb +1 -1
- data/test/test_roo.rb +222 -163
- data/website/index.html +1 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 0.8.3 2007-12-31
|
2
|
+
* 2 bugfixes
|
3
|
+
* another fix for the encoding issue in excel sheet-names
|
4
|
+
* reactived the Excel#find method which has been disappeared in the last restructoring, moved to GenericSpreadsheet
|
1
5
|
== 0.8.2 2007-12-28
|
2
6
|
* 1 enhancement:
|
3
7
|
* basename() only in method #info
|
data/lib/roo/excel.rb
CHANGED
@@ -65,6 +65,7 @@ class Excel < GenericSpreadsheet
|
|
65
65
|
@workbook.worksheet(i).name
|
66
66
|
)
|
67
67
|
else
|
68
|
+
# result << platform_specific_iconv(inject_null_characters(@workbook.worksheet(i).name))
|
68
69
|
result << platform_specific_iconv(@workbook.worksheet(i).name)
|
69
70
|
#case RUBY_PLATFORM.downcase
|
70
71
|
#when /darwin/
|
@@ -81,6 +82,19 @@ class Excel < GenericSpreadsheet
|
|
81
82
|
return result
|
82
83
|
end
|
83
84
|
|
85
|
+
#TODO: testing only
|
86
|
+
def inject_null_characters(str)
|
87
|
+
if str.class != String
|
88
|
+
return str
|
89
|
+
end
|
90
|
+
new_str=''
|
91
|
+
0.upto(str.size-1) do |i|
|
92
|
+
new_str += str[i,1]
|
93
|
+
new_str += "\000"
|
94
|
+
end
|
95
|
+
new_str
|
96
|
+
end
|
97
|
+
|
84
98
|
# sets the working sheet (1,2,3,..)
|
85
99
|
def default_sheet=(n)
|
86
100
|
if n.kind_of?(Fixnum)
|
@@ -311,10 +325,10 @@ class Excel < GenericSpreadsheet
|
|
311
325
|
0.upto(@workbook.sheet_count - 1) do |i|
|
312
326
|
# TODO: is there a better way to do conversion?
|
313
327
|
return i if name == platform_specific_iconv(
|
314
|
-
|
315
|
-
#Iconv.new('utf-8','unicode').iconv(
|
316
|
-
# @workbook.worksheet(i).name
|
317
|
-
# )
|
328
|
+
@workbook.worksheet(i).name)
|
329
|
+
#Iconv.new('utf-8','unicode').iconv(
|
330
|
+
# @workbook.worksheet(i).name
|
331
|
+
# )
|
318
332
|
end
|
319
333
|
raise StandardError, "sheet '#{name}' not found"
|
320
334
|
end
|
@@ -330,16 +344,41 @@ class Excel < GenericSpreadsheet
|
|
330
344
|
! content
|
331
345
|
end
|
332
346
|
|
333
|
-
def platform_specific_iconv(value)
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
result
|
343
|
-
|
347
|
+
def platform_specific_iconv(value)
|
348
|
+
case RUBY_PLATFORM.downcase
|
349
|
+
when /darwin/
|
350
|
+
result = Iconv.new('utf-8','utf-8').iconv(value)
|
351
|
+
when /mswin32/
|
352
|
+
result = Iconv.new('utf-8','iso-8859-1').iconv(value)
|
353
|
+
else
|
354
|
+
result = Iconv.new('utf-8','unicode').iconv(value)
|
355
|
+
end # case
|
356
|
+
if every_second_null?(result)
|
357
|
+
result = remove_every_second_null(result)
|
358
|
+
end
|
359
|
+
result
|
360
|
+
end
|
361
|
+
|
362
|
+
def every_second_null?(str)
|
363
|
+
result = true
|
364
|
+
0.upto(str.length/2-1) do |i|
|
365
|
+
c = str[i*2,1]
|
366
|
+
n = str[i*2+1,1]
|
367
|
+
if n != "\000"
|
368
|
+
result = false
|
369
|
+
break
|
370
|
+
end
|
371
|
+
end
|
372
|
+
result
|
373
|
+
end
|
374
|
+
|
375
|
+
def remove_every_second_null(str)
|
376
|
+
result = ''
|
377
|
+
0.upto(str.length/2-1) do |i|
|
378
|
+
c = str[i*2,1]
|
379
|
+
result += c
|
380
|
+
end
|
381
|
+
result
|
382
|
+
end
|
344
383
|
|
345
384
|
end
|
@@ -258,7 +258,7 @@ class GenericSpreadsheet
|
|
258
258
|
result
|
259
259
|
end
|
260
260
|
|
261
|
-
|
261
|
+
# write the current spreadsheet to stdout or into a file
|
262
262
|
#TODO: refactoring --> GenericSpreadsheet
|
263
263
|
|
264
264
|
def to_csv(filename=nil,sheet=nil)
|
@@ -273,6 +273,85 @@ class GenericSpreadsheet
|
|
273
273
|
true
|
274
274
|
end
|
275
275
|
|
276
|
+
# find a row either by row number or a condition
|
277
|
+
# Caution: this works only within the default sheet -> set default_sheet before you call this method
|
278
|
+
# (experimental. see examples in the test_roo.rb file)
|
279
|
+
def find(*args) # :nodoc
|
280
|
+
result_array = false
|
281
|
+
args.each {|arg,val|
|
282
|
+
if arg.class == Hash
|
283
|
+
arg.each { |hkey,hval|
|
284
|
+
if hkey == :array and hval == true
|
285
|
+
result_array = true
|
286
|
+
end
|
287
|
+
}
|
288
|
+
end
|
289
|
+
}
|
290
|
+
column_with = {}
|
291
|
+
1.upto(last_column) do |col|
|
292
|
+
column_with[cell(@header_line,col)] = col
|
293
|
+
end
|
294
|
+
result = Array.new
|
295
|
+
#-- id
|
296
|
+
if args[0].class == Fixnum
|
297
|
+
rownum = args[0]
|
298
|
+
tmp = {}
|
299
|
+
1.upto(self.row(rownum).size) {|j|
|
300
|
+
x = ''
|
301
|
+
column_with.each { |key,val|
|
302
|
+
if val == j
|
303
|
+
x = key
|
304
|
+
end
|
305
|
+
}
|
306
|
+
tmp[x] = cell(rownum,j)
|
307
|
+
}
|
308
|
+
result = [ tmp ] # row(rownum)
|
309
|
+
#-- :all
|
310
|
+
elsif args[0] == :all
|
311
|
+
if args[1].class == Hash
|
312
|
+
args[1].each {|key,val|
|
313
|
+
if key == :conditions
|
314
|
+
column_with = {}
|
315
|
+
1.upto(last_column) do |col|
|
316
|
+
column_with[cell(@header_line,col)] = col
|
317
|
+
end
|
318
|
+
conditions = val
|
319
|
+
first_row.upto(last_row) do |i|
|
320
|
+
# are all conditions met?
|
321
|
+
found = 1
|
322
|
+
conditions.each { |key,val|
|
323
|
+
if cell(i,column_with[key]) == val
|
324
|
+
found *= 1
|
325
|
+
else
|
326
|
+
found *= 0
|
327
|
+
end
|
328
|
+
}
|
329
|
+
# p self.row(i) if found > 0
|
330
|
+
if found > 0
|
331
|
+
tmp = {}
|
332
|
+
1.upto(self.row(i).size) {|j|
|
333
|
+
x = ''
|
334
|
+
column_with.each { |key,val|
|
335
|
+
if val == j
|
336
|
+
x = key
|
337
|
+
end
|
338
|
+
}
|
339
|
+
tmp[x] = cell(i,j)
|
340
|
+
}
|
341
|
+
if result_array
|
342
|
+
result << self.row(i)
|
343
|
+
else
|
344
|
+
result << tmp
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end # :conditions
|
349
|
+
}
|
350
|
+
end
|
351
|
+
end
|
352
|
+
result
|
353
|
+
end
|
354
|
+
|
276
355
|
protected
|
277
356
|
|
278
357
|
def unzip(filename)
|
data/lib/roo/google.rb
CHANGED
@@ -323,22 +323,6 @@ class Google < GenericSpreadsheet
|
|
323
323
|
return @last_column[sheet]
|
324
324
|
end
|
325
325
|
|
326
|
-
# # write the current spreadsheet to stdout or into a file
|
327
|
-
# #--
|
328
|
-
# #TODO: refactoring --> GenericSpreadsheet
|
329
|
-
# def to_csv(filename=nil,sheet=nil)
|
330
|
-
# sheet = @default_sheet unless sheet
|
331
|
-
# if filename
|
332
|
-
# file = File.open(filename,"w") # do |file|
|
333
|
-
# write_csv_content(file,sheet)
|
334
|
-
# file.close
|
335
|
-
# else
|
336
|
-
# write_csv_content(STDOUT,sheet)
|
337
|
-
# end
|
338
|
-
# true
|
339
|
-
# end
|
340
|
-
|
341
|
-
|
342
326
|
# find a row either by row number or a condition
|
343
327
|
# Caution: this works only within the default sheet -> set default_sheet before you call this method
|
344
328
|
# (experimental. see examples in the test_roo.rb file)
|
@@ -504,67 +488,5 @@ class Google < GenericSpreadsheet
|
|
504
488
|
end
|
505
489
|
end
|
506
490
|
|
507
|
-
# #TODO: refactoring to GenericSpreadsheet?
|
508
|
-
# def write_csv_content(file=nil,sheet=nil)
|
509
|
-
# file = STDOUT unless file
|
510
|
-
# if first_row # sheet is not empty
|
511
|
-
# first_row(sheet).upto(last_row(sheet)) do |row|
|
512
|
-
# 1.upto(last_column(sheet)) do |col|
|
513
|
-
# file.print(",") if col > 1
|
514
|
-
# onecell = cell(row,col,sheet)
|
515
|
-
# onecelltype = celltype(row,col,sheet)
|
516
|
-
# file.print one_cell_output(onecelltype,onecell,empty?(row,col,sheet))
|
517
|
-
# end
|
518
|
-
# file.print("\n")
|
519
|
-
# end # sheet not empty
|
520
|
-
# end
|
521
|
-
# end
|
522
|
-
|
523
|
-
# #TODO: refactor to Generic....
|
524
|
-
# def one_cell_output(onecelltype,onecell,empty)
|
525
|
-
# str = ""
|
526
|
-
# if empty
|
527
|
-
# str += ''
|
528
|
-
# else
|
529
|
-
# case onecelltype
|
530
|
-
# when :string
|
531
|
-
# if onecell == ""
|
532
|
-
# str << ''
|
533
|
-
# else
|
534
|
-
# onecell.gsub!(/"/,'""')
|
535
|
-
# str << ('"'+onecell+'"')
|
536
|
-
# end
|
537
|
-
# when :float,:percentage
|
538
|
-
# if onecell == onecell.to_i
|
539
|
-
# str << onecell.to_i.to_s
|
540
|
-
# else
|
541
|
-
# str << onecell.to_s
|
542
|
-
# end
|
543
|
-
# when :formula
|
544
|
-
# if onecell.class == String
|
545
|
-
# if onecell == ""
|
546
|
-
# str << ''
|
547
|
-
# else
|
548
|
-
# onecell.gsub!(/"/,'""')
|
549
|
-
# str << '"'+onecell+'"'
|
550
|
-
# end
|
551
|
-
# elsif onecell.class == Float
|
552
|
-
# if onecell == onecell.to_i
|
553
|
-
# str << onecell.to_i.to_s
|
554
|
-
# else
|
555
|
-
# str << onecell.to_s
|
556
|
-
# end
|
557
|
-
# else
|
558
|
-
# raise "unhandled onecell-class "+onecell.class.to_s
|
559
|
-
# end
|
560
|
-
# when :date
|
561
|
-
# str << '"'+onecell.to_s+'"'
|
562
|
-
# else
|
563
|
-
# raise "unhandled celltype "+onecelltype.to_s
|
564
|
-
# end
|
565
|
-
# end
|
566
|
-
# #cells << onecell
|
567
|
-
# str
|
568
|
-
# end
|
569
491
|
|
570
492
|
end # class
|
data/lib/roo/openoffice.rb
CHANGED
@@ -283,86 +283,6 @@ class Openoffice < GenericSpreadsheet
|
|
283
283
|
# true
|
284
284
|
# end
|
285
285
|
|
286
|
-
# find a row either by row number or a condition
|
287
|
-
# Caution: this works only within the default sheet -> set default_sheet before you call this method
|
288
|
-
# (experimental. see examples in the test_roo.rb file)
|
289
|
-
def find(*args)
|
290
|
-
result_array = false
|
291
|
-
args.each {|arg,val|
|
292
|
-
if arg.class == Hash
|
293
|
-
arg.each { |hkey,hval|
|
294
|
-
if hkey == :array and hval == true
|
295
|
-
result_array = true
|
296
|
-
end
|
297
|
-
}
|
298
|
-
end
|
299
|
-
}
|
300
|
-
column_with = {}
|
301
|
-
1.upto(last_column) do |col|
|
302
|
-
column_with[cell(@header_line,col)] = col
|
303
|
-
end
|
304
|
-
result = Array.new
|
305
|
-
#-- id
|
306
|
-
if args[0].class == Fixnum
|
307
|
-
rownum = args[0]
|
308
|
-
tmp = {}
|
309
|
-
1.upto(self.row(rownum).size) {|j|
|
310
|
-
x = ''
|
311
|
-
column_with.each { |key,val|
|
312
|
-
if val == j
|
313
|
-
x = key
|
314
|
-
end
|
315
|
-
}
|
316
|
-
tmp[x] = cell(rownum,j)
|
317
|
-
}
|
318
|
-
result = [ tmp ] # row(rownum)
|
319
|
-
#-- :all
|
320
|
-
elsif args[0] == :all
|
321
|
-
if args[1].class == Hash
|
322
|
-
args[1].each {|key,val|
|
323
|
-
if key == :conditions
|
324
|
-
column_with = {}
|
325
|
-
1.upto(last_column) do |col|
|
326
|
-
column_with[cell(@header_line,col)] = col
|
327
|
-
end
|
328
|
-
conditions = val
|
329
|
-
first_row.upto(last_row) do |i|
|
330
|
-
# are all conditions met?
|
331
|
-
found = 1
|
332
|
-
conditions.each { |key,val|
|
333
|
-
if cell(i,column_with[key]) == val
|
334
|
-
found *= 1
|
335
|
-
else
|
336
|
-
found *= 0
|
337
|
-
end
|
338
|
-
}
|
339
|
-
# p self.row(i) if found > 0
|
340
|
-
if found > 0
|
341
|
-
tmp = {}
|
342
|
-
1.upto(self.row(i).size) {|j|
|
343
|
-
x = ''
|
344
|
-
column_with.each { |key,val|
|
345
|
-
if val == j
|
346
|
-
x = key
|
347
|
-
end
|
348
|
-
}
|
349
|
-
tmp[x] = cell(i,j)
|
350
|
-
}
|
351
|
-
if result_array
|
352
|
-
result << self.row(i)
|
353
|
-
else
|
354
|
-
result << tmp
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end # :conditions
|
359
|
-
}
|
360
|
-
end
|
361
|
-
end
|
362
|
-
result
|
363
|
-
end
|
364
|
-
|
365
|
-
|
366
286
|
private
|
367
287
|
|
368
288
|
# read the version of the OO-Version
|
data/lib/roo/version.rb
CHANGED
data/test/test_roo.rb
CHANGED
@@ -27,7 +27,7 @@ if DB_LOG
|
|
27
27
|
# require 'activerecord'
|
28
28
|
# require_gem 'activerecord', '< 2.0.0'
|
29
29
|
#gem 'activerecord', '< 2.0.0'
|
30
|
-
require 'activerecord'
|
30
|
+
require 'activerecord'
|
31
31
|
end
|
32
32
|
|
33
33
|
include FileUtils
|
@@ -59,7 +59,7 @@ class Test::Unit::TestCase
|
|
59
59
|
}[spreadsheetname]
|
60
60
|
rescue
|
61
61
|
raise "unknown spreadsheetname: #{spreadsheetname}"
|
62
|
-
end
|
62
|
+
end
|
63
63
|
end
|
64
64
|
|
65
65
|
if DB_LOG
|
@@ -106,7 +106,7 @@ class File
|
|
106
106
|
|
107
107
|
def File.delete_if_exist(filename)
|
108
108
|
if File.exist?(filename)
|
109
|
-
File.delete(filename)
|
109
|
+
File.delete(filename)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -121,7 +121,6 @@ class TestRoo < Test::Unit::TestCase
|
|
121
121
|
OPENOFFICEWRITE = false # experimental: write access with OO-Documents
|
122
122
|
ONLINE = true
|
123
123
|
LONG_RUN = false
|
124
|
-
LONG_RUN_EXCEL = false
|
125
124
|
GLOBAL_TIMEOUT = 2*12*60 # seconds
|
126
125
|
|
127
126
|
|
@@ -475,7 +474,7 @@ class TestRoo < Test::Unit::TestCase
|
|
475
474
|
end
|
476
475
|
end
|
477
476
|
|
478
|
-
#TODO: inkonsequente Lieferung Fixnum/Float
|
477
|
+
#TODO: inkonsequente Lieferung Fixnum/Float
|
479
478
|
def test_rows
|
480
479
|
if OPENOFFICE
|
481
480
|
oo = Openoffice.new(File.join("test","numbers1.ods"))
|
@@ -624,18 +623,18 @@ class TestRoo < Test::Unit::TestCase
|
|
624
623
|
assert_equal 1, oo.first_column
|
625
624
|
end
|
626
625
|
if GOOGLE
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
end
|
633
|
-
}
|
626
|
+
assert_nothing_raised(Timeout::Error) {
|
627
|
+
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
628
|
+
oo = Google.new(key_of("numbers1"))
|
629
|
+
oo.default_sheet = oo.sheets.first
|
630
|
+
assert_equal 1, oo.first_column
|
631
|
+
end
|
632
|
+
}
|
634
633
|
end
|
635
634
|
end
|
636
635
|
|
637
636
|
def test_first_column_as_letter_openoffice
|
638
|
-
if OPENOFFICE
|
637
|
+
if OPENOFFICE
|
639
638
|
oo = Openoffice.new(File.join("test","numbers1.ods"))
|
640
639
|
oo.default_sheet = oo.sheets.first
|
641
640
|
assert_equal 'A', oo.first_column_as_letter
|
@@ -734,11 +733,11 @@ end
|
|
734
733
|
oo.default_sheet = "Tabelle1"
|
735
734
|
}
|
736
735
|
end
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
736
|
+
assert_nothing_raised(ArgumentError) {
|
737
|
+
# oo.default_sheet = 1
|
738
|
+
#oo.default_sheet = "first sheet"
|
739
|
+
oo.default_sheet = "Tabelle1"
|
740
|
+
}
|
742
741
|
end
|
743
742
|
end
|
744
743
|
|
@@ -1081,32 +1080,32 @@ end
|
|
1081
1080
|
end
|
1082
1081
|
end
|
1083
1082
|
if GOOGLE
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1083
|
+
oo = Google.new(key_of("formula"))
|
1084
|
+
oo.default_sheet = oo.sheets.first
|
1085
|
+
assert_equal 1, oo.cell('A',1)
|
1086
|
+
assert_equal 2, oo.cell('A',2)
|
1087
|
+
assert_equal 3, oo.cell('A',3)
|
1088
|
+
assert_equal 4, oo.cell('A',4)
|
1089
|
+
assert_equal 5, oo.cell('A',5)
|
1090
|
+
assert_equal 6, oo.cell('A',6)
|
1091
|
+
# assert_equal 21, oo.cell('A',7)
|
1092
|
+
assert_equal 21.0, oo.cell('A',7) #TODO: better solution Fixnum/Float
|
1093
|
+
assert_equal :formula, oo.celltype('A',7)
|
1094
|
+
# assert_equal "=[Sheet2.A1]", oo.formula('C',7)
|
1095
|
+
# !!! different from formulas in Openoffice
|
1096
|
+
assert_equal "=sheet2!R[-6]C[-2]", oo.formula('C',7)
|
1097
|
+
assert_nil oo.formula('A',6)
|
1098
|
+
# assert_equal [[7, 1, "=SUM([.A1:.A6])"],
|
1099
|
+
# [7, 2, "=SUM([.$A$1:.B6])"],
|
1100
|
+
# [7, 3, "=[Sheet2.A1]"],
|
1101
|
+
# [8, 2, "=SUM([.$A$1:.B7])"],
|
1102
|
+
# ], oo.formulas(oo.sheets.first)
|
1103
|
+
# different format than in openoffice spreadsheets:
|
1104
|
+
assert_equal [[7, 1, "=SUM(R[-6]C[0]:R[-1]C[0])"],
|
1105
|
+
[7, 2, "=SUM(R1C1:R[-1]C[0])"],
|
1106
|
+
[7, 3, "=sheet2!R[-6]C[-2]"],
|
1107
|
+
[8, 2, "=SUM(R1C1:R[-1]C[0])"]],
|
1108
|
+
oo.formulas(oo.sheets.first)
|
1110
1109
|
end # GOOGLE
|
1111
1110
|
end
|
1112
1111
|
|
@@ -1154,36 +1153,36 @@ end
|
|
1154
1153
|
assert_equal 5, oo.first_column
|
1155
1154
|
assert_equal 9, oo.last_column
|
1156
1155
|
end
|
1157
|
-
end
|
1156
|
+
end
|
1158
1157
|
|
1159
1158
|
def test_borders_sheets_google
|
1160
1159
|
if GOOGLE
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
oo.default_sheet = oo.sheets.first
|
1175
|
-
assert_equal 5, oo.first_row
|
1176
|
-
assert_equal 10, oo.last_row
|
1177
|
-
assert_equal 3, oo.first_column
|
1178
|
-
assert_equal 7, oo.last_column
|
1160
|
+
assert_nothing_raised(Timeout::Error) {
|
1161
|
+
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1162
|
+
oo = Google.new(key_of("borders"))
|
1163
|
+
oo.default_sheet = oo.sheets[0]
|
1164
|
+
assert_equal oo.sheets.first, oo.default_sheet
|
1165
|
+
assert_equal 5, oo.first_row
|
1166
|
+
oo.default_sheet = oo.sheets[1]
|
1167
|
+
assert_equal 'Sheet2', oo.default_sheet
|
1168
|
+
assert_equal 6, oo.first_row
|
1169
|
+
assert_equal 11, oo.last_row
|
1170
|
+
assert_equal 4, oo.first_column
|
1171
|
+
assert_equal 8, oo.last_column
|
1179
1172
|
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1173
|
+
oo.default_sheet = oo.sheets.first
|
1174
|
+
assert_equal 5, oo.first_row
|
1175
|
+
assert_equal 10, oo.last_row
|
1176
|
+
assert_equal 3, oo.first_column
|
1177
|
+
assert_equal 7, oo.last_column
|
1178
|
+
|
1179
|
+
oo.default_sheet = oo.sheets[2]
|
1180
|
+
assert_equal 7, oo.first_row
|
1181
|
+
assert_equal 12, oo.last_row
|
1182
|
+
assert_equal 5, oo.first_column
|
1183
|
+
assert_equal 9, oo.last_column
|
1184
|
+
end
|
1185
|
+
}
|
1187
1186
|
end
|
1188
1187
|
end
|
1189
1188
|
|
@@ -1554,7 +1553,7 @@ end
|
|
1554
1553
|
end
|
1555
1554
|
|
1556
1555
|
def test_huge_document_to_csv_excel
|
1557
|
-
if
|
1556
|
+
if LONG_RUN
|
1558
1557
|
if EXCEL
|
1559
1558
|
assert_nothing_raised(Timeout::Error) {
|
1560
1559
|
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
@@ -1571,64 +1570,64 @@ end
|
|
1571
1570
|
end # def to_csv
|
1572
1571
|
|
1573
1572
|
def test_huge_document_to_csv_google
|
1574
|
-
# maybe a better example... TODO:
|
1575
|
-
after Date.new(2008,1,30) do
|
1576
|
-
|
1577
|
-
|
1578
|
-
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1579
|
-
File.delete("/tmp/numbers1.csv") if File.exists?("/tmp/numbers1.csv")
|
1580
|
-
oo = Google.new(key_of('numbers1'))
|
1581
|
-
oo.default_sheet = oo.sheets.first
|
1582
|
-
#?? assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
|
1583
|
-
#?? assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", oo.cell(46,'A')
|
1584
|
-
#?? assert_equal "Tagebuch aus Chile Juli 1977", oo.cell(55,'A')
|
1585
|
-
assert oo.to_csv("/tmp/numbers1.csv")
|
1586
|
-
assert File.exists?("/tmp/numbers1.csv")
|
1587
|
-
assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
|
1588
|
-
end # Timeout
|
1589
|
-
} # nothing_raised
|
1590
|
-
end # GOOGLE
|
1591
|
-
end # after
|
1592
|
-
end
|
1593
|
-
|
1594
|
-
def test_to_csv_openoffice
|
1595
|
-
if OPENOFFICE
|
1596
|
-
#assert_nothing_raised(Timeout::Error) {
|
1573
|
+
# maybe a better example... TODO:
|
1574
|
+
after Date.new(2008,1,30) do
|
1575
|
+
if GOOGLE
|
1576
|
+
assert_nothing_raised(Timeout::Error) {
|
1597
1577
|
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1598
|
-
File.
|
1599
|
-
oo =
|
1578
|
+
File.delete("/tmp/numbers1.csv") if File.exists?("/tmp/numbers1.csv")
|
1579
|
+
oo = Google.new(key_of('numbers1'))
|
1600
1580
|
oo.default_sheet = oo.sheets.first
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1581
|
+
#?? assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
|
1582
|
+
#?? assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", oo.cell(46,'A')
|
1583
|
+
#?? assert_equal "Tagebuch aus Chile Juli 1977", oo.cell(55,'A')
|
1604
1584
|
assert oo.to_csv("/tmp/numbers1.csv")
|
1605
1585
|
assert File.exists?("/tmp/numbers1.csv")
|
1606
1586
|
assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
|
1607
1587
|
end # Timeout
|
1608
|
-
|
1609
|
-
end #
|
1588
|
+
} # nothing_raised
|
1589
|
+
end # GOOGLE
|
1590
|
+
end # after
|
1591
|
+
end
|
1592
|
+
|
1593
|
+
def test_to_csv_openoffice
|
1594
|
+
if OPENOFFICE
|
1595
|
+
#assert_nothing_raised(Timeout::Error) {
|
1596
|
+
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1597
|
+
File.delete_if_exist("/tmp/numbers1.csv")
|
1598
|
+
oo = Openoffice.new(File.join("test","numbers1.ods"))
|
1599
|
+
oo.default_sheet = oo.sheets.first
|
1600
|
+
#assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
|
1601
|
+
#assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", oo.cell(46,'A')
|
1602
|
+
#assert_equal "Tagebuch aus Chile Juli 1977", oo.cell(55,'A')
|
1603
|
+
assert oo.to_csv("/tmp/numbers1.csv")
|
1604
|
+
assert File.exists?("/tmp/numbers1.csv")
|
1605
|
+
assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
|
1606
|
+
end # Timeout
|
1607
|
+
#} # nothing_raised
|
1608
|
+
end # OPENOFFICE
|
1610
1609
|
end
|
1611
1610
|
|
1612
1611
|
def test_to_csv_excel
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
end
|
1623
|
-
#}
|
1612
|
+
if EXCEL
|
1613
|
+
#assert_nothing_raised(Timeout::Error) {
|
1614
|
+
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1615
|
+
File.delete_if_exist("/tmp/numbers1_excel.csv")
|
1616
|
+
oo = Excel.new(File.join("test","numbers1.xls"))
|
1617
|
+
oo.default_sheet = oo.sheets.first
|
1618
|
+
assert oo.to_csv("/tmp/numbers1_excel.csv")
|
1619
|
+
assert File.exists?("/tmp/numbers1_excel.csv")
|
1620
|
+
assert_equal "", `diff test/numbers1_excel.csv /tmp/numbers1_excel.csv`
|
1624
1621
|
end
|
1622
|
+
#}
|
1623
|
+
end
|
1625
1624
|
end # def to_csv
|
1626
1625
|
|
1627
1626
|
def test_to_csv_google
|
1628
|
-
# maybe a better example... TODO:
|
1629
|
-
after Date.new(2008,1,30) do
|
1630
|
-
|
1631
|
-
|
1627
|
+
# maybe a better example... TODO:
|
1628
|
+
after Date.new(2008,1,30) do
|
1629
|
+
if GOOGLE
|
1630
|
+
#assert_nothing_raised(Timeout::Error) {
|
1632
1631
|
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
1633
1632
|
File.delete_if_exist("/tmp/numbers1.csv") if File.exists?("/tmp/numbers1.csv")
|
1634
1633
|
oo = Google.new(key_of('numbers1'))
|
@@ -1640,9 +1639,9 @@ after Date.new(2008,1,30) do
|
|
1640
1639
|
assert File.exists?("/tmp/numbers1.csv")
|
1641
1640
|
assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
|
1642
1641
|
end # Timeout
|
1643
|
-
|
1644
|
-
|
1645
|
-
end # after
|
1642
|
+
#} # nothing_raised
|
1643
|
+
end # GOOGLE
|
1644
|
+
end # after
|
1646
1645
|
end
|
1647
1646
|
|
1648
1647
|
def test_bug_mehrere_datum
|
@@ -1891,6 +1890,55 @@ end # after
|
|
1891
1890
|
end
|
1892
1891
|
end
|
1893
1892
|
|
1893
|
+
def test_find_by_row_openoffice
|
1894
|
+
if OPENOFFICE
|
1895
|
+
oo = Openoffice.new(File.join("test","numbers1.ods"))
|
1896
|
+
oo.default_sheet = oo.sheets.first
|
1897
|
+
rec = oo.find 16
|
1898
|
+
assert rec
|
1899
|
+
after Date.new(2008,1,15) do
|
1900
|
+
# assert_equal "einundvierzig", rec[0]
|
1901
|
+
assert_equal false, rec
|
1902
|
+
|
1903
|
+
rec = oo.find 15
|
1904
|
+
assert rec
|
1905
|
+
assert_equal 41,rec
|
1906
|
+
end
|
1907
|
+
end
|
1908
|
+
end
|
1909
|
+
|
1910
|
+
def test_find_by_row_excel
|
1911
|
+
if EXCEL
|
1912
|
+
oo = Excel.new(File.join("test","numbers1.xls"))
|
1913
|
+
oo.default_sheet = oo.sheets.first
|
1914
|
+
rec = oo.find 16
|
1915
|
+
assert rec
|
1916
|
+
after Date.new(2008,1,15) do
|
1917
|
+
assert_equal "einundvierzig", rec[0]
|
1918
|
+
|
1919
|
+
rec = oo.find 15
|
1920
|
+
assert rec
|
1921
|
+
assert_equal 41,rec[0]
|
1922
|
+
end
|
1923
|
+
end
|
1924
|
+
end
|
1925
|
+
|
1926
|
+
def test_find_by_row_google
|
1927
|
+
if GOOGLE
|
1928
|
+
oo = Excel.new(key_of("numbers1"))
|
1929
|
+
oo.default_sheet = oo.sheets.first
|
1930
|
+
rec = oo.find 16
|
1931
|
+
assert rec
|
1932
|
+
after Date.new(2008,1,15) do
|
1933
|
+
assert_equal "einundvierzig", rec[0]
|
1934
|
+
|
1935
|
+
rec = oo.find 15
|
1936
|
+
assert rec
|
1937
|
+
assert_equal 41,rec[0]
|
1938
|
+
end
|
1939
|
+
end
|
1940
|
+
end
|
1941
|
+
|
1894
1942
|
def test_find_by_row_huge_document_google
|
1895
1943
|
if LONG_RUN
|
1896
1944
|
if GOOGLE
|
@@ -2215,12 +2263,10 @@ end # after
|
|
2215
2263
|
if EXCEL
|
2216
2264
|
assert_nothing_raised(Timeout::Error) {
|
2217
2265
|
Timeout::timeout(GLOBAL_TIMEOUT) do |timeout_length|
|
2218
|
-
#puts Time.now.to_s + "column Excel gestartet"
|
2219
2266
|
oo = Excel.new(File.join('test','Bibelbund.xls'))
|
2220
2267
|
oo.default_sheet = oo.sheets.first
|
2221
|
-
|
2222
|
-
assert_equal 499, oo.column('a').size
|
2223
|
-
#puts Time.now.to_s + "column Excel beendet"
|
2268
|
+
assert_equal 3735, oo.column('a').size
|
2269
|
+
#assert_equal 499, oo.column('a').size
|
2224
2270
|
end
|
2225
2271
|
}
|
2226
2272
|
end
|
@@ -2257,21 +2303,34 @@ end # after
|
|
2257
2303
|
assert_equal "Task 1" , erg[1]['Comment']
|
2258
2304
|
end
|
2259
2305
|
|
2306
|
+
def test_simple_spreadsheet_find_by_condition_excel
|
2307
|
+
oo = Excel.new(File.join("test","simple_spreadsheet.xls"))
|
2308
|
+
oo.default_sheet = oo.sheets.first
|
2309
|
+
oo.header_line = 3
|
2310
|
+
erg = oo.find(:all, :conditions => {'Comment' => 'Task 1'})
|
2311
|
+
assert_equal Date.new(2007,05,07), erg[1]['Date']
|
2312
|
+
assert_equal 10.75 , erg[1]['Start time']
|
2313
|
+
assert_equal 12.50 , erg[1]['End time']
|
2314
|
+
assert_equal 0 , erg[1]['Pause']
|
2315
|
+
assert_equal 1.75 , erg[1]['Sum']
|
2316
|
+
assert_equal "Task 1" , erg[1]['Comment']
|
2317
|
+
end
|
2318
|
+
|
2260
2319
|
def test_simple_spreadsheet_find_by_condition_google
|
2261
2320
|
if GOOGLE
|
2262
|
-
after Date.new(2007,12,15) do
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
|
2269
|
-
|
2270
|
-
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
end
|
2321
|
+
after Date.new(2007,12,15) do
|
2322
|
+
oo = Google.new(key_of("simple_spreadsheet"))
|
2323
|
+
oo.default_sheet = oo.sheets.first
|
2324
|
+
oo.header_line = 3
|
2325
|
+
erg = oo.find(:all, :conditions => {'Comment' => 'Task 1'})
|
2326
|
+
assert_equal Date.new(2007,05,07), erg[1]['Date']
|
2327
|
+
assert_equal 10.75 , erg[1]['Start time']
|
2328
|
+
assert_equal 12.50 , erg[1]['End time']
|
2329
|
+
assert_equal 0 , erg[1]['Pause']
|
2330
|
+
assert_kind_of Float, erg[1]['Sum']
|
2331
|
+
assert_equal 1.75 , erg[1]['Sum']
|
2332
|
+
assert_equal "Task 1" , erg[1]['Comment']
|
2333
|
+
end
|
2275
2334
|
end
|
2276
2335
|
end
|
2277
2336
|
|
@@ -2386,7 +2445,7 @@ end
|
|
2386
2445
|
ext = ""
|
2387
2446
|
expected = sprintf(expected_templ,ext)
|
2388
2447
|
oo = Google.new(key_of("numbers1"))
|
2389
|
-
#$log.debug(expected)
|
2448
|
+
#$log.debug(expected)
|
2390
2449
|
assert_equal expected.gsub(/numbers1/,key_of("numbers1")), oo.info
|
2391
2450
|
end
|
2392
2451
|
end
|
@@ -2432,11 +2491,11 @@ end
|
|
2432
2491
|
}
|
2433
2492
|
end
|
2434
2493
|
if GOOGLE
|
2435
|
-
after Date.new(2008,1,1) do
|
2436
|
-
|
2437
|
-
|
2438
|
-
|
2439
|
-
end
|
2494
|
+
after Date.new(2008,1,1) do
|
2495
|
+
assert_raise(IOError) {
|
2496
|
+
oo = Google.new(key_of('testnichtvorhanden'+'Bibelbund.ods'))
|
2497
|
+
}
|
2498
|
+
end
|
2440
2499
|
end
|
2441
2500
|
end
|
2442
2501
|
|
@@ -2453,7 +2512,7 @@ end
|
|
2453
2512
|
end
|
2454
2513
|
|
2455
2514
|
def test_write_google
|
2456
|
-
# write.me: http://spreadsheets.google.com/ccc?key=ptu6bbahNZpY0N0RrxQbWdw&hl=en_GB
|
2515
|
+
# write.me: http://spreadsheets.google.com/ccc?key=ptu6bbahNZpY0N0RrxQbWdw&hl=en_GB
|
2457
2516
|
if GOOGLE
|
2458
2517
|
oo = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
|
2459
2518
|
oo.default_sheet = oo.sheets.first
|
@@ -2511,12 +2570,12 @@ Sheet 3:
|
|
2511
2570
|
assert_nil oo.last_column
|
2512
2571
|
end
|
2513
2572
|
|
2514
|
-
if false
|
2515
|
-
|
2516
|
-
|
2517
|
-
|
2518
|
-
|
2519
|
-
|
2573
|
+
if false
|
2574
|
+
# there is no google spreadsheet for this test
|
2575
|
+
def test_bug_bbu_google
|
2576
|
+
oo = Excel.new(key_of('bbu'))
|
2577
|
+
assert_nothing_raised() {
|
2578
|
+
assert_equal "File: test/bbu.xls
|
2520
2579
|
Number of sheets: 3
|
2521
2580
|
Sheets: 2007_12, Tabelle2, Tabelle3
|
2522
2581
|
Sheet 1:
|
@@ -2528,21 +2587,21 @@ Sheet 2:
|
|
2528
2587
|
- empty -
|
2529
2588
|
Sheet 3:
|
2530
2589
|
- empty -", oo.info
|
2531
|
-
|
2590
|
+
}
|
2532
2591
|
|
2533
|
-
|
2534
|
-
|
2535
|
-
|
2536
|
-
|
2537
|
-
|
2538
|
-
|
2539
|
-
end # false
|
2592
|
+
oo.default_sheet = oo.sheets[1] # empty sheet
|
2593
|
+
assert_nil oo.first_row
|
2594
|
+
assert_nil oo.last_row
|
2595
|
+
assert_nil oo.first_column
|
2596
|
+
assert_nil oo.last_column
|
2597
|
+
end
|
2598
|
+
end # false
|
2540
2599
|
|
2541
|
-
# def teardown
|
2542
|
-
# puts "Options:"
|
2543
|
-
# puts "OPENOFFICE = #{OPENOFFICE}"
|
2544
|
-
# puts "EXCEL = #{EXCEL}"
|
2545
|
-
# puts "GOOGLE = #{GOOGLE}"
|
2546
|
-
# end
|
2600
|
+
# def teardown
|
2601
|
+
# puts "Options:"
|
2602
|
+
# puts "OPENOFFICE = #{OPENOFFICE}"
|
2603
|
+
# puts "EXCEL = #{EXCEL}"
|
2604
|
+
# puts "GOOGLE = #{GOOGLE}"
|
2605
|
+
# end
|
2547
2606
|
|
2548
2607
|
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.8.
|
36
|
+
<a href="http://rubyforge.org/projects/roo" class="numbers">0.8.3</a>
|
37
37
|
</div>
|
38
38
|
<h2>What</h2>
|
39
39
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Preymesser
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2007-12-
|
12
|
+
date: 2007-12-31 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|