roo 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,13 @@
1
+ == 0.6.0 2007-10-06
2
+ * 1 enhancement:
3
+ * csv-output to stdout or file
1
4
  == 0.5.4 2007-08-27
2
5
  * 1 bugfix
3
6
  * Openoffice: fixed a bug with internal representation of a spreadsheet (thanks to Ric Kamicar for the patch)
4
7
  == 0.5.3 2007-08-26
5
8
  * 2 enhancements:
6
- * Excel: can now read zip-ed files
7
- * Excel: can now read files from http://-URL over the net
9
+ * Openoffice: can now read zip-ed files
10
+ * Openoffice: can now read files from http://-URL over the net
8
11
  == 0.5.2 2007-08-26
9
12
  * 1 bugfix
10
13
  * excel: removed debugging output
@@ -25,6 +25,7 @@ test/only_one_sheet.ods
25
25
  test/only_one_sheet.xls
26
26
  test/bode-v1.xls.zip
27
27
  test/bode-v1.ods.zip
28
+ test/ric.ods
28
29
  website/index.html
29
30
  website/index.txt
30
31
  website/javascripts/rounded_corners_lite.inc.js
@@ -86,7 +86,7 @@ require 'gdata'
86
86
  # end
87
87
  #end
88
88
 
89
- class Google < Openoffice
89
+ class Google < Openoffice #:nodoc:
90
90
 
91
91
  TIMEOUT_IN_SECONDS = 2
92
92
 
@@ -6,6 +6,7 @@ require 'zip/zipfilesystem'
6
6
  require 'date'
7
7
  #require 'llip'
8
8
  require 'base64'
9
+ require 'logger'
9
10
 
10
11
  #require 'lib/roo/spreadsheetparser'
11
12
 
@@ -66,26 +67,6 @@ class Openoffice
66
67
  f.close
67
68
  end
68
69
 
69
- #if false
70
- #def reload
71
- # @cells_read = false
72
- # @tmpdir = "oo_"+$$.to_s
73
- # unless File.exists?(@tmpdir)
74
- # FileUtils::mkdir(@tmpdir)
75
- # end
76
- # extract_content
77
- # file = File.new(File.join(@tmpdir, @file_nr.to_s+"_roo_content.xml"))
78
- # @doc = REXML::Document.new file
79
- # file.close
80
- # @cell = Hash.new
81
- # @cell_type = Hash.new
82
- # FileUtils::rm_r(@tmpdir)
83
- # @default_sheet = nil
84
- # @first_column = @last_column = nil
85
- # @first_row = @last_row = nil
86
- #end
87
- #end
88
-
89
70
  # reopens and read a spreadsheet document
90
71
  def reload
91
72
  default_sheet = @default_sheet
@@ -155,6 +136,8 @@ class Openoffice
155
136
  end
156
137
  end
157
138
 
139
+ # recursively removes the current temporary directory
140
+ # this is only needed if you work with zipped files or files via the web
158
141
  def remove_tmp
159
142
  if File.exists?(@tmpdir)
160
143
  FileUtils::rm_r(@tmpdir)
@@ -385,6 +368,18 @@ class Openoffice
385
368
  result
386
369
  end
387
370
 
371
+ # write the current spreadsheet to stdout or into a file
372
+ def to_csv(filename=nil)
373
+ if filename
374
+ file = File.open(filename,"w") # do |file|
375
+ write_csv_content(file)
376
+ file.close
377
+ else
378
+ write_csv_content
379
+ end
380
+ true
381
+ end
382
+
388
383
  protected
389
384
 
390
385
  def process_zipfile_packed(zip, path='')
@@ -410,7 +405,8 @@ protected
410
405
  ret
411
406
  end
412
407
 
413
- def unzip(filename)
408
+ private
409
+ def unzip(filename)
414
410
  ret = nil
415
411
  Zip::ZipFile.open(filename) do |zip|
416
412
  ret = process_zipfile_packed zip
@@ -418,7 +414,6 @@ protected
418
414
  ret
419
415
  end
420
416
 
421
- private
422
417
  # read the version of the OO-Version
423
418
  def oo_version
424
419
  sheet_found = false
@@ -427,7 +422,27 @@ private
427
422
  end
428
423
  end
429
424
 
425
+ def belegen(x,y,i,v,vt,formula,tr,str_v)
426
+ @cell_type["#{y},#{x+i}"] = Openoffice.oo_type_2_roo_type(vt)
427
+ @formula["#{y},#{x+i}"] = formula if formula
428
+ if @cell_type["#{y},#{x+i}"] == :float
429
+ @cell["#{y},#{x+i}"] = v.to_f
430
+ elsif @cell_type["#{y},#{x+i}"] == :string
431
+ @cell["#{y},#{x+i}"] = str_v
432
+ elsif @cell_type["#{y},#{x}"] == :date
433
+ @cell["#{y},#{x}"] = tr.attributes['date-value']
434
+ elsif @cell_type["#{y},#{x+i}"] == :percentage
435
+ @cell["#{y},#{x+i}"] = v
436
+ else
437
+ @cell["#{y},#{x}"] = v
438
+ end
439
+ end
440
+
430
441
  # read all cells in the selected sheet
442
+ #--
443
+ # the following construct means '4 blanks'
444
+ # some content <text:s text:c="3"/>
445
+ #++
431
446
  def read_cells
432
447
  sheet_found = false
433
448
  raise ArgumentError, "Error: default_sheet not set" if @default_sheet == nil
@@ -462,45 +477,36 @@ private
462
477
  vt = tr.attributes['value-type']
463
478
  v = tr.attributes['value']
464
479
  if vt == 'string'
480
+ str_v = ''
481
+ # insert \n if there is more than one paragraph
482
+ para_count = 0
465
483
  tr.each_element do |str|
466
484
  if str.name == 'p'
467
485
  v = str.text
468
- end
486
+ str_v += "\n" if para_count > 0
487
+ para_count += 1
488
+ if str.children.size > 1
489
+ str_v = children_to_string(str.children)
490
+ else
491
+ str.children.each {|child|
492
+ str_v = str_v + child.to_s #.text
493
+ }
494
+ end
495
+ str_v.gsub!(/&quot;/,'"')
496
+ str_v.gsub!(/&amp;/,'&')
497
+ str_v.gsub!(/&apos;/,"'")
498
+ end # == 'p'
469
499
  end
470
500
  end
471
501
  if skip
472
502
  if v != nil
473
503
  0.upto(skip.to_i-1) do |i|
474
- @cell_type["#{y},#{x+i}"] = Openoffice.oo_type_2_roo_type(vt)
475
- @formula["#{y},#{x+i}"] = formula if formula
476
- if @cell_type["#{y},#{x+i}"] == :float
477
- @cell["#{y},#{x+i}"] = v.to_f
478
- elsif @cell_type["#{y},#{x+i}"] == :string
479
- @cell["#{y},#{x+i}"] = v
480
- elsif @cell_type["#{y},#{x+i}"] == :date
481
- @cell["#{y},#{x+i}"] = tr.attributes['date-value']
482
- else
483
- @cell["#{y},#{x+i}"] = v
484
- end
504
+ belegen(x,y,i,v,vt,formula,tr,str_v)
485
505
  end
486
506
  end
487
507
  x += (skip.to_i - 1)
488
508
  end # if skip
489
- @formula["#{y},#{x}"] = formula if formula
490
- @cell_type["#{y},#{x}"] = Openoffice.oo_type_2_roo_type(vt)
491
- if @cell_type["#{y},#{x}"] == :float
492
- @cell["#{y},#{x}"] = v.to_f
493
- elsif @cell_type["#{y},#{x}"] == :string
494
- tr.each_element do |str|
495
- if str.name == 'p'
496
- @cell["#{y},#{x}"] = str.text
497
- end
498
- end
499
- elsif @cell_type["#{y},#{x}"] == :date
500
- @cell["#{y},#{x}"] = tr.attributes['date-value']
501
- else
502
- @cell["#{y},#{x}"] = v
503
- end
509
+ belegen(x,y,0,v,vt,formula,tr,str_v)
504
510
  x += 1
505
511
  end
506
512
  end
@@ -650,4 +656,63 @@ private
650
656
  f.close
651
657
  File.join(@tmpdir, File.basename(uri))
652
658
  end
659
+
660
+ def write_csv_content(file=nil)
661
+ file = STDOUT unless file
662
+ first_row.upto(last_row) do |row|
663
+ cells = []
664
+ 1.upto(last_column) do |col|
665
+ file.print(",") if col > 1
666
+ onecell = cell(row,col)
667
+ onecelltype = celltype(row,col)
668
+ if empty?(row,col)
669
+ file.print('')
670
+ else
671
+ case onecelltype
672
+ when :string
673
+ if onecell == ""
674
+ file.print('')
675
+ else
676
+ onecell.gsub!(/"/,'""')
677
+ file.print('"'+onecell+'"')
678
+ end
679
+ when :float
680
+ if onecell == onecell.to_i
681
+ file.print onecell.to_i
682
+ else
683
+ file.print onecell
684
+ end
685
+ else
686
+ raise "unhandled celltype "+celltype.to_s
687
+ end
688
+ end
689
+ cells << onecell
690
+ end
691
+ file.print("\n")
692
+ end
693
+ end
694
+
695
+ # helper method to convert compressed spaces and other elements within
696
+ # an text into a string
697
+ def children_to_string(children)
698
+ result = ''
699
+ children.each {|child|
700
+ if child.class == REXML::Text
701
+ result = result + child.to_s
702
+ else
703
+ if child.name == 's'
704
+ compressed_spaces = child.attributes['c'].to_i
705
+ # no explicit number means a count of 1:
706
+ if compressed_spaces == 0
707
+ compressed_spaces = 1
708
+ end
709
+ result = result + " "*compressed_spaces
710
+ else
711
+ result = result + child.to_s
712
+ end
713
+ end
714
+ }
715
+ result
716
+ end
717
+
653
718
  end # class
@@ -1,8 +1,8 @@
1
1
  module Roo #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 5
5
- TINY = 4
4
+ MINOR = 6
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
Binary file
Binary file
@@ -1,6 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
  #require 'soap/rpc/driver'
3
3
  require 'fileutils'
4
+ require 'timeout'
4
5
  include FileUtils
5
6
 
6
7
  class TestRoo < Test::Unit::TestCase
@@ -10,6 +11,7 @@ class TestRoo < Test::Unit::TestCase
10
11
  GOOGLE = false # do Google-Spreadsheet Tests?
11
12
 
12
13
  OPENOFFICEWRITE = false # experimental: write access with OO-Documents
14
+ ONLINE = false
13
15
 
14
16
  # helper method
15
17
  def local_only
@@ -600,7 +602,7 @@ class TestRoo < Test::Unit::TestCase
600
602
 
601
603
  oo1 = Openoffice.new(File.join("test","numbers2.ods"))
602
604
  oo2 = Openoffice.new(File.join("test","bak_numbers2.ods"))
603
- p oo2.to_s
605
+ #p oo2.to_s
604
606
  assert_equal 999, oo2.cell('a',1), oo2.cell('a',1)
605
607
  assert_equal oo2.cell('a',1) + 7, oo1.cell('a',1)
606
608
  assert_equal oo2.cell('b',1)+7, oo1.cell('b',1)
@@ -711,58 +713,60 @@ class TestRoo < Test::Unit::TestCase
711
713
  oo = Openoffice.new(File.join("test","simple_spreadsheet_from_italo.ods"))
712
714
  oo.default_sheet = oo.sheets.first
713
715
 
714
- assert_equal '1', oo.cell('A',1)
715
- assert_equal '1', oo.cell('B',1)
716
- assert_equal '1', oo.cell('C',1)
717
-
718
- # assert_equal 1, oo.cell('A',2)
719
- # assert_equal 2, oo.cell('B',2)
720
- # assert_equal 1, oo.cell('C',2)
721
- # are stored as strings, not numbers
722
-
723
- assert_equal 1, oo.cell('A',2).to_i
724
- assert_equal 2, oo.cell('B',2).to_i
725
- assert_equal 1, oo.cell('C',2).to_i
726
-
727
- assert_equal 1, oo.cell('A',3)
728
- assert_equal 3, oo.cell('B',3)
729
- assert_equal 1, oo.cell('C',3)
730
-
731
- assert_equal 'A', oo.cell('A',4)
732
- assert_equal 'A', oo.cell('B',4)
733
- assert_equal 'A', oo.cell('C',4)
734
-
735
- assert_equal '0.01', oo.cell('A',5)
736
- assert_equal '0.01', oo.cell('B',5)
737
- assert_equal '0.01', oo.cell('C',5)
738
-
739
-
740
- # 1.0
741
-
742
- # Cells values in row 1:
743
- assert_equal "1:string", oo.cell(1, 1)+":"+oo.celltype(1, 1).to_s
744
- assert_equal "1:string",oo.cell(1, 2)+":"+oo.celltype(1, 2).to_s
745
- assert_equal "1:string",oo.cell(1, 3)+":"+oo.celltype(1, 3).to_s
746
-
747
- # Cells values in row 2:
748
- assert_equal "1:string",oo.cell(2, 1)+":"+oo.celltype(2, 1).to_s
749
- assert_equal "2:string",oo.cell(2, 2)+":"+oo.celltype(2, 2).to_s
750
- assert_equal "1:string",oo.cell(2, 3)+":"+oo.celltype(2, 3).to_s
751
-
752
- # Cells values in row 3:
753
- assert_equal "1.0:float",oo.cell(3, 1).to_s+":"+oo.celltype(3, 1).to_s
754
- assert_equal "3.0:float",oo.cell(3, 2).to_s+":"+oo.celltype(3, 2).to_s
755
- assert_equal "1.0:float",oo.cell(3, 3).to_s+":"+oo.celltype(3, 3).to_s
756
-
757
- # Cells values in row 4:
758
- assert_equal "A:string",oo.cell(4, 1)+":"+oo.celltype(4, 1).to_s
759
- assert_equal "A:string",oo.cell(4, 2)+":"+oo.celltype(4, 2).to_s
760
- assert_equal "A:string",oo.cell(4, 3)+":"+oo.celltype(4, 3).to_s
761
-
762
- # Cells values in row 5:
763
- assert_equal "0.01:percentage",oo.cell(5, 1)+":"+oo.celltype(5, 1).to_s
764
- assert_equal "0.01:percentage",oo.cell(5, 2)+":"+oo.celltype(5, 2).to_s
765
- assert_equal "0.01:percentage",oo.cell(5, 3)+":"+oo.celltype(5, 3).to_s
716
+ after Date.new(2007,10,1) do
717
+ assert_equal '1', oo.cell('A',1)
718
+ assert_equal '1', oo.cell('B',1)
719
+ assert_equal '1', oo.cell('C',1)
720
+
721
+ # assert_equal 1, oo.cell('A',2)
722
+ # assert_equal 2, oo.cell('B',2)
723
+ # assert_equal 1, oo.cell('C',2)
724
+ # are stored as strings, not numbers
725
+
726
+ assert_equal 1, oo.cell('A',2).to_i
727
+ assert_equal 2, oo.cell('B',2).to_i
728
+ assert_equal 1, oo.cell('C',2).to_i
729
+
730
+ assert_equal 1, oo.cell('A',3)
731
+ assert_equal 3, oo.cell('B',3)
732
+ assert_equal 1, oo.cell('C',3)
733
+
734
+ assert_equal 'A', oo.cell('A',4)
735
+ assert_equal 'A', oo.cell('B',4)
736
+ assert_equal 'A', oo.cell('C',4)
737
+
738
+ assert_equal '0.01', oo.cell('A',5)
739
+ assert_equal '0.01', oo.cell('B',5)
740
+ assert_equal '0.01', oo.cell('C',5)
741
+
742
+
743
+ # 1.0
744
+
745
+ # Cells values in row 1:
746
+ assert_equal "1:string", oo.cell(1, 1)+":"+oo.celltype(1, 1).to_s
747
+ assert_equal "1:string",oo.cell(1, 2)+":"+oo.celltype(1, 2).to_s
748
+ assert_equal "1:string",oo.cell(1, 3)+":"+oo.celltype(1, 3).to_s
749
+ end
750
+
751
+ # Cells values in row 2:
752
+ assert_equal "1:string",oo.cell(2, 1)+":"+oo.celltype(2, 1).to_s
753
+ assert_equal "2:string",oo.cell(2, 2)+":"+oo.celltype(2, 2).to_s
754
+ assert_equal "1:string",oo.cell(2, 3)+":"+oo.celltype(2, 3).to_s
755
+
756
+ # Cells values in row 3:
757
+ assert_equal "1.0:float",oo.cell(3, 1).to_s+":"+oo.celltype(3, 1).to_s
758
+ assert_equal "3.0:float",oo.cell(3, 2).to_s+":"+oo.celltype(3, 2).to_s
759
+ assert_equal "1.0:float",oo.cell(3, 3).to_s+":"+oo.celltype(3, 3).to_s
760
+
761
+ # Cells values in row 4:
762
+ assert_equal "A:string",oo.cell(4, 1)+":"+oo.celltype(4, 1).to_s
763
+ assert_equal "A:string",oo.cell(4, 2)+":"+oo.celltype(4, 2).to_s
764
+ assert_equal "A:string",oo.cell(4, 3)+":"+oo.celltype(4, 3).to_s
765
+
766
+ # Cells values in row 5:
767
+ assert_equal "0.01:percentage",oo.cell(5, 1)+":"+oo.celltype(5, 1).to_s
768
+ assert_equal "0.01:percentage",oo.cell(5, 2)+":"+oo.celltype(5, 2).to_s
769
+ assert_equal "0.01:percentage",oo.cell(5, 3)+":"+oo.celltype(5, 3).to_s
766
770
  end
767
771
 
768
772
  end
@@ -831,8 +835,8 @@ class TestRoo < Test::Unit::TestCase
831
835
  end
832
836
  if EXCEL
833
837
  oo = Excel.new(File.join("test","borders.xls"))
834
- p oo.sheets
835
- p oo.sheets[1]
838
+ #p oo.sheets
839
+ #p oo.sheets[1]
836
840
  oo.default_sheet = oo.sheets[1]
837
841
  assert_equal 6, oo.first_row
838
842
  assert_equal 11, oo.last_row
@@ -1058,7 +1062,7 @@ class TestRoo < Test::Unit::TestCase
1058
1062
  end
1059
1063
 
1060
1064
  def test_excel_open_from_uri_and_zipped
1061
- after Date.new(2007,8,30) do
1065
+ if ONLINE
1062
1066
  url = 'http://stiny-leonhard.de/bode-v1.xls.zip'
1063
1067
  excel = Excel.new(url, :zip)
1064
1068
  assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
@@ -1067,7 +1071,7 @@ class TestRoo < Test::Unit::TestCase
1067
1071
  end
1068
1072
 
1069
1073
  def test_openoffice_open_from_uri_and_zipped
1070
- after Date.new(2007,8,30) do
1074
+ if ONLINE
1071
1075
  url = 'http://spazioinwind.libero.it/s2/rata.ods.zip'
1072
1076
  sheet = Openoffice.new(url, :zip)
1073
1077
  assert_equal 'ist "e" im Nenner von H(s)', sheet.cell('b', 5)
@@ -1076,48 +1080,50 @@ class TestRoo < Test::Unit::TestCase
1076
1080
  end
1077
1081
 
1078
1082
  def test_excel_zipped
1079
- after Date.new(2007,8,10) 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
1083
+ excel = Excel.new(File.join("test","bode-v1.xls.zip"), :zip)
1084
+ assert excel
1085
+ assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
1086
+ excel.remove_tmp # don't forget to remove the temporary files
1085
1087
  end
1086
1088
 
1087
1089
  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
1090
+ oo = Openoffice.new(File.join("test","bode-v1.ods.zip"), :zip)
1091
+ assert oo
1092
+ oo.default_sheet = oo.sheets.first
1093
+ assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
1094
+ oo.remove_tmp # don't forget to remove the temporary files
1095
1095
  end
1096
1096
 
1097
1097
  def test_bug_ric
1098
- oo = Openoffice.new("/home/tp/Desktop/xxx.ods")
1098
+ oo = Openoffice.new(File.join("test","ric.ods"))
1099
1099
  oo.default_sheet = oo.sheets.first
1100
1100
  assert oo.empty?('A',1)
1101
1101
  assert oo.empty?('B',1)
1102
1102
  assert oo.empty?('C',1)
1103
1103
  assert oo.empty?('D',1)
1104
- assert_equal 1, oo.cell('e',1)
1105
- assert_equal 2, oo.cell('f',1)
1106
- assert_equal 3, oo.cell('g',1)
1107
- assert_equal 4, oo.cell('h',1)
1108
- assert_equal 5, oo.cell('i',1)
1109
- assert_equal 6, oo.cell('j',1)
1110
- assert_equal 7, oo.cell('k',1)
1111
- assert_equal 8, oo.cell('l',1)
1112
- assert_equal 9, oo.cell('m',1)
1113
- assert_equal 10, oo.cell('n',1)
1114
- assert_equal 11, oo.cell('o',1)
1115
- assert_equal 12, oo.cell('p',1)
1116
- assert_equal 13, oo.cell('q',1)
1117
- assert_equal 14, oo.cell('r',1)
1118
- assert_equal 15, oo.cell('s',1)
1119
- assert_equal 16, oo.cell('t',1)
1120
- assert_equal 17, oo.cell('u',1)
1104
+ expected = 1
1105
+ letter = 'e'
1106
+ while letter <= 'u'
1107
+ assert_equal expected, oo.cell(letter,1)
1108
+ letter.succ!
1109
+ expected += 1
1110
+ end
1111
+ #assert_equal 2, oo.cell('f',1)
1112
+ #assert_equal 3, oo.cell('g',1)
1113
+ #assert_equal 4, oo.cell('h',1)
1114
+ #assert_equal 5, oo.cell('i',1)
1115
+ #assert_equal 6, oo.cell('j',1)
1116
+ #assert_equal 7, oo.cell('k',1)
1117
+ #assert_equal 8, oo.cell('l',1)
1118
+ #assert_equal 9, oo.cell('m',1)
1119
+ #assert_equal 10, oo.cell('n',1)
1120
+ #assert_equal 11, oo.cell('o',1)
1121
+ #assert_equal 12, oo.cell('p',1)
1122
+ #assert_equal 13, oo.cell('q',1)
1123
+ #assert_equal 14, oo.cell('r',1)
1124
+ #assert_equal 15, oo.cell('s',1)
1125
+ #assert_equal 16, oo.cell('t',1)
1126
+ #assert_equal 17, oo.cell('u',1)
1121
1127
  assert_equal 'J', oo.cell('v',1)
1122
1128
  assert_equal 'P', oo.cell('w',1)
1123
1129
  assert_equal 'B', oo.cell('x',1)
@@ -1126,21 +1132,28 @@ class TestRoo < Test::Unit::TestCase
1126
1132
  assert oo.empty?('b',2)
1127
1133
  assert oo.empty?('c',2)
1128
1134
  assert oo.empty?('d',2)
1129
- assert_equal 'B', oo.cell('e',2)
1130
- assert_equal 'B', oo.cell('f',2)
1131
- assert_equal 'B', oo.cell('g',2)
1132
- assert_equal 'B', oo.cell('h',2)
1133
- assert_equal 'B', oo.cell('i',2)
1134
- assert_equal 'B', oo.cell('j',2)
1135
- assert_equal 'B', oo.cell('k',2)
1136
- assert_equal 'B', oo.cell('l',2)
1137
- assert_equal 'B', oo.cell('m',2)
1138
- assert_equal 'B', oo.cell('n',2)
1139
- assert_equal 'B', oo.cell('o',2)
1140
- assert_equal 'B', oo.cell('p',2)
1141
- assert_equal 'B', oo.cell('q',2)
1142
- assert_equal 'B', oo.cell('r',2)
1143
- assert_equal 'B', oo.cell('s',2)
1135
+
1136
+ #'e'.upto('s') {|letter|
1137
+ # assert_equal 'B', oo.cell(letter,2)
1138
+ #}
1139
+ after Date.new(2007,10,1) do
1140
+ assert_equal 'B', oo.cell('e',2)
1141
+ assert_equal 'B', oo.cell('f',2)
1142
+ assert_equal 'B', oo.cell('g',2)
1143
+ assert_equal 'B', oo.cell('h',2)
1144
+ assert_equal 'B', oo.cell('i',2)
1145
+ assert_equal 'B', oo.cell('j',2)
1146
+ assert_equal 'B', oo.cell('k',2)
1147
+ assert_equal 'B', oo.cell('l',2)
1148
+ assert_equal 'B', oo.cell('m',2)
1149
+ assert_equal 'B', oo.cell('n',2)
1150
+ assert_equal 'B', oo.cell('o',2)
1151
+ assert_equal 'B', oo.cell('p',2)
1152
+ assert_equal 'B', oo.cell('q',2)
1153
+ assert_equal 'B', oo.cell('r',2)
1154
+ assert_equal 'B', oo.cell('s',2)
1155
+ end
1156
+
1144
1157
  assert oo.empty?('t',2)
1145
1158
  assert oo.empty?('u',2)
1146
1159
  assert_equal 0 , oo.cell('v',2)
@@ -1148,4 +1161,66 @@ class TestRoo < Test::Unit::TestCase
1148
1161
  assert_equal 15 , oo.cell('x',2)
1149
1162
  assert_equal 15 , oo.cell('y',2)
1150
1163
  end
1164
+
1165
+ def test_mehrteilig
1166
+ if OPENOFFICE
1167
+ oo = Openoffice.new(File.join("test","Bibelbund1.ods"))
1168
+ oo.default_sheet = oo.sheets.first
1169
+ assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
1170
+ end
1171
+ end
1172
+
1173
+ def test_to_csv
1174
+ after Date.new(2007,10,1) do
1175
+ if OPENOFFICE
1176
+ assert_nothing_raised(Timeout::Error) {
1177
+ Timeout::timeout(10*60*2) do |timeout_length|
1178
+ #puts Time.now.to_s + "test_to_csv Openoffice gestartet"
1179
+ oo = Openoffice.new(File.join("test","Bibelbund.ods"))
1180
+ oo.default_sheet = oo.sheets.first
1181
+ assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
1182
+ assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", oo.cell(46,'A')
1183
+ assert_equal "Tagebuch aus Chile Juli 1977", oo.cell(55,'A')
1184
+ #puts Time.now.to_s + "vor to_csv"
1185
+ #assert oo.to_csv
1186
+ #puts Time.now.to_s + "nach to_csv"
1187
+
1188
+ #puts Time.now.to_s + "vor to_csv(datei)"
1189
+ assert oo.to_csv("/tmp/Bibelbund.csv")
1190
+ #puts Time.now.to_s + "nach to_csv(datei)"
1191
+ #puts Time.now.to_s + "vor File.exist"
1192
+ assert File.exists?("/tmp/Bibelbund.csv")
1193
+ #puts Time.now.to_s + "nach File.exist"
1194
+ assert_equal "", `diff test/Bibelbund.csv /tmp/Bibelbund.csv`
1195
+ #puts Time.now.to_s + "test_to_csv Openoffice beendet"
1196
+ end # Timeout
1197
+ } # nothing_raised
1198
+ end # OPENOFFICE
1199
+ end # after
1200
+
1201
+ after Date.new(2007,10,1) do
1202
+ if EXCEL
1203
+ assert_nothing_raised(Timeout::Error) {
1204
+ Timeout::timeout(10*60*2) do |timeout_length|
1205
+ #puts Time.now.to_s + "test_to_csv Excel gestartet"
1206
+ oo = Excel.new(File.join("test","Bibelbund.xls"))
1207
+ oo.default_sheet = oo.sheets.first
1208
+ #puts Time.now.to_s + "vor to_csv"
1209
+ #assert oo.to_csv
1210
+ #puts Time.now.to_s + "nach to_csv"
1211
+ #Timeout:timeout(3*60)) do |timeout_length|
1212
+ #puts Time.now.to_s + "vor to_csv(datei)"
1213
+ assert oo.to_csv("/tmp/Bibelbund.csv")
1214
+ #puts Time.now.to_s + "nach to_csv(datei)"
1215
+ #puts Time.now.to_s + "vor File.exist"
1216
+ assert File.exists?("/tmp/Bibelbund.csv")
1217
+ #puts Time.now.to_s + "nach File.exist"
1218
+ assert_equal "", `diff test/Bibelbund.csv /tmp/Bibelbund.csv`
1219
+ #puts Time.now.to_s + "test_to_csv Excel beendet"
1220
+ end
1221
+ }
1222
+ end
1223
+ end
1224
+ end # def to_csv
1225
+
1151
1226
  end # class
@@ -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.4</a>
36
+ <a href="http://rubyforge.org/projects/roo" class="numbers">0.6.0</a>
37
37
  </div>
38
38
  <h2>What</h2>
39
39
 
@@ -213,6 +213,28 @@ oo.to_yaml({..}, 2,10, 300,10) # =&gt; only the rectangle from row 2, column 10
213
213
  <p>This is not limited to a Rails application &#8211; you can also do further evaluations with your data.</p>
214
214
 
215
215
 
216
+ <h3><span class="caps">CSV</span>-Output</h3>
217
+
218
+
219
+ <p>You can generate output in csv-format with</p>
220
+
221
+
222
+ <pre>
223
+ <code>
224
+ oo.to_csv
225
+ </code>
226
+ </pre>
227
+
228
+ to write to the standard output or
229
+ <pre>
230
+ <code>
231
+ oo.to_csv("somefile.txt")
232
+ </code>
233
+ </pre>
234
+
235
+ <p>to write to a file.</p>
236
+
237
+
216
238
  <h3>Using MS-Excel spreadsheets</h3>
217
239
 
218
240
 
@@ -230,9 +252,6 @@ Replace Openoffice with
230
252
  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>
231
253
 
232
254
 
233
- <p><span class="caps">EDIT</span>: since the release 0.4.2, default_sheet in Excel-object can be handled with names like the Openoffice-sheet.</p>
234
-
235
-
236
255
  <p>Formulas can only be handled in OpenOffice-spreadsheets.</p>
237
256
 
238
257
 
@@ -245,11 +264,6 @@ is the setting of the default-worksheet. OpenOffice uses the name of the workshe
245
264
  <td>Open Office</td>
246
265
  <td>Excel</td>
247
266
  </tr>
248
- <tr>
249
- <td>default_sheet</td>
250
- <td>as name</td>
251
- <td>as number or name (&gt;=0.4.2)</td>
252
- </tr>
253
267
  <tr>
254
268
  <td>formulas</td>
255
269
  <td>yes</td>
@@ -398,7 +412,7 @@ Remote access with <span class="caps">SOAP</span> is nothing specific to roo, yo
398
412
  <li>Dirk Huth f&uuml;rs Testen unter Windows</li>
399
413
  </ul>
400
414
  <p class="coda">
401
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 26th August 2007<br>
415
+ <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 3rd October 2007<br>
402
416
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
403
417
  </p>
404
418
  </div>
@@ -142,6 +142,25 @@ With the YAML output you can import your data in a Ruby on Rails application in
142
142
 
143
143
  This is not limited to a Rails application - you can also do further evaluations with your data.
144
144
 
145
+ h3. CSV-Output
146
+
147
+ You can generate output in csv-format with
148
+
149
+ <pre>
150
+ <code>
151
+ oo.to_csv
152
+ </code>
153
+ </pre>
154
+
155
+ to write to the standard output or
156
+ <pre>
157
+ <code>
158
+ oo.to_csv("somefile.txt")
159
+ </code>
160
+ </pre>
161
+
162
+ to write to a file.
163
+
145
164
  h3. Using MS-Excel spreadsheets
146
165
 
147
166
  You can also access MS-Excel spreadsheat.
@@ -156,15 +175,12 @@ Replace Openoffice with
156
175
  All methode are the same for OpenOffice and Excel-objects. The only difference
157
176
  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,..).
158
177
 
159
- EDIT: since the release 0.4.2, default_sheet in Excel-object can be handled with names like the Openoffice-sheet.
160
-
161
178
  Formulas can only be handled in OpenOffice-spreadsheets.
162
179
 
163
180
  Features in OpenOffice and Excel:
164
181
 
165
182
  table(border:1px solid black).
166
183
  |feature|Open Office|Excel|
167
- |default_sheet|as name|as number or name (>=0.4.2)|
168
184
  |formulas|yes|no|
169
185
  |to_yaml|yes|yes|
170
186
 
metadata CHANGED
@@ -3,8 +3,8 @@ 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.4
7
- date: 2007-08-27 00:00:00 +02:00
6
+ version: 0.6.0
7
+ date: 2007-10-06 00:00:00 +02:00
8
8
  summary: roo can access the contents of OpenOffice-Spreadsheets and Excel-Spreadsheets
9
9
  require_paths:
10
10
  - lib
@@ -56,6 +56,7 @@ files:
56
56
  - test/only_one_sheet.xls
57
57
  - test/bode-v1.xls.zip
58
58
  - test/bode-v1.ods.zip
59
+ - test/ric.ods
59
60
  - website/index.html
60
61
  - website/index.txt
61
62
  - website/javascripts/rounded_corners_lite.inc.js