roo 1.9.7 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,6 +32,23 @@ class GenericSpreadsheet
32
32
  tmpdir
33
33
  end
34
34
 
35
+ def self.split_coordinate(str)
36
+ letter,number = GenericSpreadsheet.split_coord(str)
37
+ x = letter_to_number(letter)
38
+ y = number
39
+ return y, x
40
+ end
41
+
42
+ def self.split_coord(s)
43
+ if s =~ /([a-zA-Z]+)([0-9]+)/
44
+ letter = $1
45
+ number = $2.to_i
46
+ else
47
+ raise ArgumentError
48
+ end
49
+ return letter, number
50
+ end
51
+
35
52
 
36
53
  public
37
54
 
@@ -332,9 +349,6 @@ class GenericSpreadsheet
332
349
  initialize(@spreadsheetkey,@user,@password)
333
350
  else
334
351
  initialize(@filename)
335
- to do
336
- 'was ist mit weiteren Parametern bei initialize'
337
- end
338
352
  end
339
353
  self.default_sheet = ds
340
354
  #@first_row = @last_row = @first_column = @last_column = nil
@@ -428,6 +442,8 @@ class GenericSpreadsheet
428
442
  end
429
443
  end
430
444
 
445
+ =begin
446
+ #TODO: hier entfernen
431
447
  # returns each formula in the selected sheet as an array of elements
432
448
  # [row, col, formula]
433
449
  def formulas(sheet=nil)
@@ -445,6 +461,7 @@ class GenericSpreadsheet
445
461
  }
446
462
  theformulas
447
463
  end
464
+ =end
448
465
 
449
466
  protected
450
467
 
@@ -453,6 +470,7 @@ class GenericSpreadsheet
453
470
  '.ods' => 'Openoffice.new',
454
471
  '.xls' => 'Excel.new',
455
472
  '.xlsx' => 'Excelx.new',
473
+ '.csv' => 'Csv.new',
456
474
  }
457
475
  if packed == :zip
458
476
  # lalala.ods.zip => lalala.ods
@@ -461,7 +479,7 @@ class GenericSpreadsheet
461
479
  filename = File.basename(filename,File.extname(filename))
462
480
  end
463
481
  case ext
464
- when '.ods', '.xls', '.xlsx'
482
+ when '.ods', '.xls', '.xlsx', '.csv'
465
483
  correct_class = "use #{new_expression[ext]} to handle #{ext} spreadsheet files"
466
484
  else
467
485
  raise "unknown file type: #{ext}"
@@ -678,4 +696,5 @@ class GenericSpreadsheet
678
696
  s = content
679
697
  sprintf("%02d:%02d:%02d",h,m,s)
680
698
  end
699
+
681
700
  end
@@ -4,7 +4,7 @@ require 'zip/zipfilesystem'
4
4
  require 'date'
5
5
  require 'nokogiri'
6
6
  require 'cgi'
7
-
7
+ require 'pp' #TODO
8
8
  class Openoffice < GenericSpreadsheet
9
9
 
10
10
  @@nr = 0
@@ -49,13 +49,17 @@ class Openoffice < GenericSpreadsheet
49
49
  @style_defaults = Hash.new { |h,k| h[k] = [] }
50
50
  @style_definitions = Hash.new
51
51
  @header_line = 1
52
- @labels = {}
52
+ @label = Hash.new
53
+ @labels_read = false
54
+ @comment = Hash.new
55
+ @comments_read = Hash.new
53
56
  end
54
57
 
55
58
  def method_missing(m,*args)
56
- # is method name a label name
57
- if @labels.has_key?(m.to_s)
58
- row,col = label(m.to_s)
59
+ read_labels unless @labels_read
60
+ # is method name a label name
61
+ if @label.has_key?(m.to_s)
62
+ row,col = label(m.to_s)
59
63
  cell(row,col)
60
64
  else
61
65
  # call super for methods like #a1
@@ -89,12 +93,14 @@ class Openoffice < GenericSpreadsheet
89
93
  return nil
90
94
  else
91
95
  # return @formula[sheet][[row,col]]["oooc:".length..-1]
92
- str = @formula[sheet][[row,col]]
93
- if str.include? ':'
94
- return str[str.index(':')+1..-1]
95
- else
96
- return str
97
- end
96
+ # TODO:
97
+ #str = @formula[sheet][[row,col]]
98
+ #if str.include? ':'
99
+ #return str[str.index(':')+1..-1]
100
+ #else
101
+ #return str
102
+ #end
103
+ @formula[sheet][[row,col]]
98
104
  end
99
105
  end
100
106
 
@@ -105,7 +111,21 @@ class Openoffice < GenericSpreadsheet
105
111
  row,col = normalize(row,col)
106
112
  formula(row,col) != nil
107
113
  end
108
-
114
+
115
+ # returns each formula in the selected sheet as an array of elements
116
+ # [row, col, formula]
117
+ def formulas(sheet=nil)
118
+ sheet = @default_sheet unless sheet
119
+ read_cells(sheet) unless @cells_read[sheet]
120
+ if @formula[sheet]
121
+ @formula[sheet].each.collect do |elem|
122
+ [elem[0][0], elem[0][1], elem[1]]
123
+ end
124
+ else
125
+ []
126
+ end
127
+ end
128
+
109
129
  class Font
110
130
  attr_accessor :bold, :italic, :underline
111
131
 
@@ -193,17 +213,65 @@ class Openoffice < GenericSpreadsheet
193
213
 
194
214
  # returns the row,col values of the labelled cell
195
215
  # (nil,nil) if label is not defined
196
- # sheet parameter is not really needed because label names are global
197
- # to the whole spreadsheet
198
- def label(labelname,sheet=nil)
216
+ def label(labelname)
217
+ read_labels unless @labels_read
218
+ unless @label.size > 0
219
+ return nil,nil,nil
220
+ end
221
+ if @label.has_key? labelname
222
+ return @label[labelname][1].to_i,
223
+ GenericSpreadsheet.letter_to_number(@label[labelname][2]),
224
+ @label[labelname][0]
225
+ else
226
+ return nil,nil,nil
227
+ end
228
+ end
229
+
230
+ # Returns an array which all labels. Each element is an array with
231
+ # [labelname, [sheetname,row,col]]
232
+ def labels(sheet=nil)
233
+ read_labels unless @labels_read
234
+ result = []
235
+ @label.each do |label|
236
+ result << [ label[0], # name
237
+ [ label[1][1].to_i, # row
238
+ GenericSpreadsheet.letter_to_number(label[1][2]), # column
239
+ label[1][0], # sheet
240
+ ] ]
241
+ end
242
+ result
243
+ end
244
+
245
+ # returns the comment at (row/col)
246
+ # nil if there is no comment
247
+ def comment(row,col,sheet=nil)
199
248
  sheet = @default_sheet unless sheet
200
249
  read_cells(sheet) unless @cells_read[sheet]
201
- if @labels.has_key? labelname
202
- return @labels[labelname][1].to_i,
203
- GenericSpreadsheet.letter_to_number(@labels[labelname][2]),
204
- @labels[labelname][0]
250
+ row,col = normalize(row,col)
251
+ return nil unless @comment[sheet]
252
+ @comment[sheet][[row,col]]
253
+ end
254
+
255
+ # true, if there is a comment
256
+ def comment?(row,col,sheet=nil)
257
+ sheet = @default_sheet unless sheet
258
+ read_cells(sheet) unless @cells_read[sheet]
259
+ row,col = normalize(row,col)
260
+ comment(row,col) != nil
261
+ end
262
+
263
+
264
+ # returns each comment in the selected sheet as an array of elements
265
+ # [row, col, comment]
266
+ def comments(sheet=nil)
267
+ sheet = @default_sheet unless sheet
268
+ read_comments(sheet) unless @comments_read[sheet]
269
+ if @comment[sheet]
270
+ @comment[sheet].each.collect do |elem|
271
+ [elem[0][0],elem[0][1],elem[1]]
272
+ end
205
273
  else
206
- return nil,nil,nil
274
+ []
207
275
  end
208
276
  end
209
277
 
@@ -222,8 +290,15 @@ class Openoffice < GenericSpreadsheet
222
290
  @cell_type[sheet] = {} unless @cell_type[sheet]
223
291
  @cell_type[sheet][key] = Openoffice.oo_type_2_roo_type(vt)
224
292
  @formula[sheet] = {} unless @formula[sheet]
225
- @formula[sheet][key] = formula if formula
226
- @cell[sheet] = {} unless @cell[sheet]
293
+ if formula
294
+ ['of:', 'oooc:'].each do |prefix|
295
+ if formula[0,prefix.length] == prefix
296
+ formula = formula[prefix.length..-1]
297
+ end
298
+ end
299
+ @formula[sheet][key] = formula
300
+ end
301
+ @cell[sheet] = {} unless @cell[sheet]
227
302
  @style[sheet] = {} unless @style[sheet]
228
303
  @style[sheet][key] = style_name
229
304
  case @cell_type[sheet][key]
@@ -262,23 +337,6 @@ class Openoffice < GenericSpreadsheet
262
337
  raise ArgumentError, "Error: sheet '#{sheet||'nil'}' not valid" if @default_sheet == nil and sheet==nil
263
338
  raise RangeError unless self.sheets.include? sheet
264
339
 
265
- #-
266
- # Labels
267
- # should be factored out in separate method because labels are global
268
- # to the whole spreadsheet file (and not to specific sheet)
269
- #+
270
- @doc.xpath("//table:named-range").each do |ne|
271
- #-
272
- # $Sheet1.$C$5
273
- #+
274
- name = ne.attribute('name').to_s
275
- sheetname,coords = ne.attribute('cell-range-address').to_s.split('.')
276
- col = coords.split('$')[1]
277
- row = coords.split('$')[2]
278
- sheetname = sheetname[1..-1] if sheetname[0,1] == '$'
279
- @labels[name] = [sheetname,row,col]
280
- end
281
-
282
340
  @doc.xpath("//*[local-name()='table']").each do |ws|
283
341
  if sheet == ws['name']
284
342
  sheet_found = true
@@ -304,6 +362,30 @@ class Openoffice < GenericSpreadsheet
304
362
  # insert \n if there is more than one paragraph
305
363
  para_count = 0
306
364
  cell.children.each do |str|
365
+ # begin comments
366
+ =begin
367
+ - <table:table-cell office:value-type="string">
368
+ - <office:annotation office:display="true" draw:style-name="gr1" draw:text-style-name="P1" svg:width="1.1413in" svg:height="0.3902in" svg:x="2.0142in" svg:y="0in" draw:caption-point-x="-0.2402in" draw:caption-point-y="0.5661in">
369
+ <dc:date>2011-09-20T00:00:00</dc:date>
370
+ <text:p text:style-name="P1">Kommentar fuer B4</text:p>
371
+ </office:annotation>
372
+ <text:p>B4 (mit Kommentar)</text:p>
373
+ </table:table-cell>
374
+ =end
375
+ if str.name == 'annotation'
376
+ str.children.each do |annotation|
377
+ if annotation.name == 'p'
378
+ # @comment ist ein Hash mit Sheet als Key (wie bei @cell)
379
+ # innerhalb eines Elements besteht ein Eintrag aus einem
380
+ # weiteren Hash mit Key [row,col] und dem eigentlichen
381
+ # Kommentartext als Inhalt
382
+ @comment[sheet] = Hash.new unless @comment[sheet]
383
+ key = [row,col]
384
+ @comment[sheet][key] = annotation.text
385
+ end
386
+ end
387
+ end
388
+ # end comments
307
389
  if str.name == 'p'
308
390
  v = str.content
309
391
  str_v += "\n" if para_count > 0
@@ -348,7 +430,7 @@ class Openoffice < GenericSpreadsheet
348
430
  end # if skip
349
431
  set_cell_values(sheet,col,row,0,v,vt,formula,cell,str_v,style_name)
350
432
  col += 1
351
- end
433
+ end
352
434
  row += 1
353
435
  col = 1
354
436
  end
@@ -362,8 +444,30 @@ class Openoffice < GenericSpreadsheet
362
444
  raise RangeError
363
445
  end
364
446
  @cells_read[sheet] = true
447
+ @comments_read[sheet] = true
365
448
  end
366
449
 
450
+ # Only calls read_cells because GenericSpreadsheet calls read_comments
451
+ # whereas the reading of comments is done in read_cells for Openoffice-objects
452
+ def read_comments(sheet=nil)
453
+ read_cells(sheet)
454
+ end
455
+
456
+ def read_labels
457
+ @doc.xpath("//table:named-range").each do |ne|
458
+ #-
459
+ # $Sheet1.$C$5
460
+ #+
461
+ name = ne.attribute('name').to_s
462
+ sheetname,coords = ne.attribute('cell-range-address').to_s.split('.')
463
+ col = coords.split('$')[1]
464
+ row = coords.split('$')[2]
465
+ sheetname = sheetname[1..-1] if sheetname[0,1] == '$'
466
+ @label[name] = [sheetname,row,col]
467
+ end
468
+ @labels_read = true
469
+ end
470
+
367
471
  def read_styles(style_elements)
368
472
  @style_definitions['Default'] = Openoffice::Font.new
369
473
  style_elements.each do |style|
@@ -375,7 +479,7 @@ class Openoffice < GenericSpreadsheet
375
479
  font.italic = properties.attributes['font-style']
376
480
  font.underline = properties.attributes['text-underline-style']
377
481
  @style_definitions[style_name] = font
378
- end
482
+ end
379
483
  end
380
484
  end
381
485
 
Binary file
data/test/comments.ods ADDED
Binary file
data/test/comments.xls ADDED
Binary file
Binary file
data/test/csvtypes.csv ADDED
@@ -0,0 +1 @@
1
+ 1,2,Mayer
Binary file
Binary file
data/test/numbers1.csv ADDED
@@ -0,0 +1,18 @@
1
+ 1,2,3,4,10,,
2
+ 5,6,7,8,9,"test",11
3
+ ,,,,,,
4
+ 10,11,12,13,14,,
5
+ 11/21/61,,,,,,
6
+ "tata",,,,,,
7
+ ,,,,,,
8
+ ,,"thisisc8",,,,
9
+ ,,,"thisisd9",,,
10
+ ,,,,,,
11
+ "thisisa11",,,,,,
12
+ 41,42,43,44,45,,
13
+ ,,,,,,
14
+ ,,,,,,
15
+ 41,42,43,44,45,,
16
+ "einundvierzig","zweiundvierzig","dreiundvierzig","vierundvierzig","fuenfundvierzig",,
17
+ ,,,,,,
18
+ 05/31/07,"dies hier als Date-Objekt",,,,,
data/test/test_roo.rb CHANGED
@@ -16,6 +16,17 @@ require './lib/roo'
16
16
  #TODO
17
17
  # Look at formulas in excel - does not work with date/time
18
18
 
19
+ class Csv
20
+ def cell_postprocessing(row,col,value)
21
+ if row==1 and col==1
22
+ return value.to_f
23
+ end
24
+ if row==1 and col==2
25
+ return value.to_s
26
+ end
27
+ return value
28
+ end
29
+ end
19
30
 
20
31
  # Dump warnings that come from the test to open files
21
32
  # with the wrong spreadsheet class
@@ -26,7 +37,6 @@ TMP_PREFIX = 'oo_*'
26
37
  # require './' + TESTDIR + '/test_helper.rb'
27
38
  require TESTDIR + '/test_helper.rb'
28
39
 
29
- #require 'soap/rpc/driver'
30
40
  require 'fileutils'
31
41
  require 'timeout'
32
42
  require 'logger'
@@ -34,18 +44,20 @@ $log = Logger.new(File.join(ENV['HOME'],"roo.log"))
34
44
  #$log.level = Logger::WARN
35
45
  $log.level = Logger::DEBUG
36
46
 
37
- DISPLAY_LOG = true
47
+ DISPLAY_LOG = false
38
48
  DB_LOG = false
49
+
39
50
  if DB_LOG
40
51
  require 'activerecord'
41
52
  end
42
53
 
43
54
  include FileUtils
55
+
44
56
  def running_windows?
45
- # to do
57
+ # to do
46
58
  # "besser loesen"
47
- # end
48
- File.exists? "C:\\"
59
+ # end
60
+ File.exists? "C:\\"
49
61
  end
50
62
 
51
63
  if DB_LOG
@@ -136,13 +148,14 @@ class Test::Unit::TestCase
136
148
  :duration => t2-t1
137
149
  )
138
150
  end
139
- if Dir.glob("oo_*") != []
140
- puts "nicht alle temp. Dateien geloescht"
141
- puts Dir.glob("oo_*")
142
- print "? "
143
- STDOUT.flush
144
- a = gets
145
- end
151
+ # TODO
152
+ #if Dir.glob("oo_*") != []
153
+ # puts "nicht alle temp. Dateien geloescht"
154
+ # puts Dir.glob("oo_*")
155
+ # print "? "
156
+ # STDOUT.flush
157
+ # a = gets
158
+ # end
146
159
  end
147
160
  end
148
161
 
@@ -164,10 +177,11 @@ end
164
177
  class TestRoo < Test::Unit::TestCase
165
178
 
166
179
  OPENOFFICE = true # do Openoffice-Spreadsheet Tests? (.ods files)
167
- EXCEL = true # do Excel Tests? (.xls files)
180
+ EXCEL = true # do Excel Tests? (.xls files)
168
181
  GOOGLE = false # do Google-Spreadsheet Tests?
169
182
  EXCELX = true # do Excelx Tests? (.xlsx files)
170
- LIBREOFFICE = true # do Libreoffice tests? (.ods files)
183
+ LIBREOFFICE = true # do Libreoffice tests? (.ods files)
184
+ CSV = true # do CSV tests? (.csv files)
171
185
 
172
186
  ONLINE = false
173
187
  LONG_RUN = true
@@ -198,7 +212,7 @@ class TestRoo < Test::Unit::TestCase
198
212
  end
199
213
  end
200
214
  # end test spreadsheet type :nodoc
201
- options[:format] ||= [:excel, :excelx, :openoffice, :google]
215
+ options[:format] ||= [:excel, :excelx, :openoffice, :google, :libreoffice]
202
216
  options[:format] = [options[:format]] if options[:format].class == Symbol
203
217
  yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.xls')) if EXCEL && options[:format].include?(:excel)
204
218
  yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.xlsx')) if EXCELX && options[:format].include?(:excelx)
@@ -206,6 +220,7 @@ class TestRoo < Test::Unit::TestCase
206
220
  yield Roo::Spreadsheet.open(key_of(options[:name]) || options[:name]) if GOOGLE && options[:format].include?(:google)
207
221
  yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.ods')) if LIBREOFFICE && options[:format].include?(:libreoffice)
208
222
  end
223
+
209
224
  # Using Date.strptime so check that it's using the method
210
225
  # with the value set in date_format
211
226
  def test_date
@@ -239,6 +254,14 @@ class TestRoo < Test::Unit::TestCase
239
254
  oo = Excelx.new(File.join(TESTDIR,"numbers1.xlsx"))
240
255
  assert_kind_of Excelx, oo
241
256
  end
257
+ if LIBREOFFICE
258
+ oo = Libreoffice.new(File.join(TESTDIR,"numbers1.ods"))
259
+ assert_kind_of Libreoffice, oo
260
+ end
261
+ if CSV
262
+ oo = Csv.new(File.join(TESTDIR,"numbers1.csv"))
263
+ assert_kind_of Csv, oo
264
+ end
242
265
  end
243
266
 
244
267
  def test_letters
@@ -251,6 +274,20 @@ class TestRoo < Test::Unit::TestCase
251
274
  assert_equal 27, GenericSpreadsheet.letter_to_number('Aa')
252
275
  assert_equal 27, GenericSpreadsheet.letter_to_number('aa')
253
276
  end
277
+
278
+ def test_sheets_csv
279
+ if CSV
280
+ oo = Csv.new(File.join(TESTDIR,'numbers1.csv'))
281
+ assert_equal ["default"], oo.sheets
282
+ assert_raise(RangeError) { oo.default_sheet = "no_sheet" }
283
+ assert_raise(TypeError) { oo.default_sheet = [1,2,3] }
284
+ oo.sheets.each { |sh|
285
+ oo.default_sheet = sh
286
+ assert_equal sh, oo.default_sheet
287
+ }
288
+ end
289
+ end
290
+
254
291
  def test_sheets
255
292
  with_each_spreadsheet(:name=>'numbers1') do |oo|
256
293
  assert_equal ["Tabelle1","Name of Sheet 2","Sheet3","Sheet4","Sheet5"], oo.sheets
@@ -280,7 +317,9 @@ class TestRoo < Test::Unit::TestCase
280
317
  assert_equal "test", oo.cell(2,6)
281
318
  assert_equal :string, oo.celltype(2,6)
282
319
  assert_equal 11, oo.cell(2,7)
283
- assert_equal :float, oo.celltype(2,7)
320
+ unless oo.kind_of? Csv
321
+ assert_equal :float, oo.celltype(2,7)
322
+ end
284
323
  assert_equal 10, oo.cell(4,1)
285
324
  assert_equal 11, oo.cell(4,2)
286
325
  assert_equal 12, oo.cell(4,3)
@@ -291,12 +330,14 @@ class TestRoo < Test::Unit::TestCase
291
330
  assert_equal 12, oo.cell(4,'C')
292
331
  assert_equal 13, oo.cell(4,'D')
293
332
  assert_equal 14, oo.cell(4,'E')
294
- assert_equal :date, oo.celltype(5,1)
295
- assert_equal Date.new(1961,11,21), oo.cell(5,1)
296
- assert_equal "1961-11-21", oo.cell(5,1).to_s
333
+ unless oo.kind_of? Csv
334
+ assert_equal :date, oo.celltype(5,1)
335
+ assert_equal Date.new(1961,11,21), oo.cell(5,1)
336
+ assert_equal "1961-11-21", oo.cell(5,1).to_s
337
+ end
297
338
  end
298
339
  end
299
-
340
+
300
341
  def test_celltype
301
342
  with_each_spreadsheet(:name=>'numbers1') do |oo|
302
343
  assert_equal :string, oo.celltype(2,6)
@@ -330,7 +371,7 @@ class TestRoo < Test::Unit::TestCase
330
371
 
331
372
  def test_libre_office
332
373
  if LIBREOFFICE
333
- oo = Libreoffice.new("test/numbers1.ods")
374
+ oo = Libreoffice.new("test/numbers1.ods")
334
375
  oo.default_sheet = oo.sheets.first
335
376
  assert_equal 41, oo.cell('a',12)
336
377
  end
@@ -740,21 +781,21 @@ class TestRoo < Test::Unit::TestCase
740
781
  end
741
782
 
742
783
  def test_excel_zipped
743
- after Date.new(2011,8,30) do
744
- to do
745
- 'hier wieder das Problem, dass ausgepacktes xls File
746
- unter Windows nicht geloescht werden kann, weil
747
- das spreadsheet gem die Datei nicht schliesst.
748
- Fehler von spreadsheet gem'
749
- end
750
- if EXCEL
751
- begin
752
- oo = Excel.new(File.join(TESTDIR,"bode-v1.xls.zip"), :zip)
753
- assert oo
754
- assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
784
+ after Date.new(2011,10,30) do
785
+ to do
786
+ 'hier wieder das Problem, dass ausgepacktes xls File
787
+ unter Windows nicht geloescht werden kann, weil
788
+ das spreadsheet gem die Datei nicht schliesst.
789
+ Fehler von spreadsheet gem'
790
+ end
791
+ if EXCEL
792
+ begin
793
+ oo = Excel.new(File.join(TESTDIR,"bode-v1.xls.zip"), :zip)
794
+ assert oo
795
+ assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
796
+ end
755
797
  end
756
798
  end
757
- end
758
799
  end
759
800
 
760
801
  def test_openoffice_zipped
@@ -1433,66 +1474,66 @@ Sheet 3:
1433
1474
  end
1434
1475
 
1435
1476
  def test_no_remaining_tmp_files_openoffice
1436
- after Date.new(2011,8,30) do
1437
- # alles noch mal ueberarbeiten
1438
- # temp. Directories sollten in diesem Fall ueberhaupt nicht
1439
- # angelegt werden
1440
- if OPENOFFICE
1441
- assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
1442
- # oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"))
1443
- # es soll absichtlich ein Abbruch provoziert werden, deshalb :ignore
1444
- begin
1445
- oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1446
- false,
1447
- :ignore)
1448
- rescue Zip::ZipError
1449
- @tmp = Dir.glob(oo.tmpdir)
1450
- raise
1451
- end
1452
- }
1453
- assert @tmp.empty?, "temporay directory was not deleted"
1477
+ after Date.new(2011,10,30) do
1478
+ # alles noch mal ueberarbeiten
1479
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1480
+ # angelegt werden
1481
+ if OPENOFFICE
1482
+ assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
1483
+ # oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"))
1484
+ # es soll absichtlich ein Abbruch provoziert werden, deshalb :ignore
1485
+ begin
1486
+ oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1487
+ false,
1488
+ :ignore)
1489
+ rescue Zip::ZipError
1490
+ @tmp = Dir.glob(oo.tmpdir)
1491
+ raise
1492
+ end
1493
+ }
1494
+ assert @tmp.empty?, "temporay directory was not deleted"
1495
+ end
1454
1496
  end
1455
- end
1456
1497
  end
1457
1498
 
1458
1499
  def test_no_remaining_tmp_files_excel
1459
- after Date.new(2011,8,30) do
1460
- # alles noch mal ueberarbeiten
1461
- # temp. Directories sollten in diesem Fall ueberhaupt nicht
1462
- # angelegt werden
1463
- if EXCEL
1464
- prev = Dir.glob(TMP_PREFIX)
1465
- assert_raise(Ole::Storage::FormatError) {
1466
- oo = Excel.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1467
- false,
1468
- :ignore)
1469
- }
1470
- now = Dir.glob(TMP_PREFIX)
1471
- assert (now-prev).empty?, "temporary directory not removed"
1500
+ after Date.new(2011,9,30) do
1501
+ # alles noch mal ueberarbeiten
1502
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1503
+ # angelegt werden
1504
+ if EXCEL
1505
+ prev = Dir.glob(TMP_PREFIX)
1506
+ assert_raise(Ole::Storage::FormatError) {
1507
+ oo = Excel.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1508
+ false,
1509
+ :ignore)
1510
+ }
1511
+ now = Dir.glob(TMP_PREFIX)
1512
+ assert (now-prev).empty?, "temporary directory not removed"
1513
+ end
1472
1514
  end
1473
- end
1474
1515
  end
1475
1516
 
1476
1517
  def test_no_remaining_tmp_files_excelx
1477
- after Date.new(2011,8,30) do
1478
- # alles noch mal ueberarbeiten
1479
- # temp. Directories sollten in diesem Fall ueberhaupt nicht
1480
- # angelegt werden
1481
- if EXCELX
1482
- prev = Dir.glob(TMP_PREFIX)
1483
- assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
1518
+ after Date.new(2011,11,1) do
1519
+ # alles noch mal ueberarbeiten
1520
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1521
+ # angelegt werden
1522
+ if EXCELX
1523
+ prev = Dir.glob(TMP_PREFIX)
1524
+ assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
1484
1525
 
1485
- # oo = Excelx.new(File.join(TESTDIR,"no_spreadsheet_file.txt"))
1486
- # es soll absichtlich ein Abbruch provoziert werden, deshalb :ignore
1487
- oo = Excelx.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1488
- false,
1489
- :ignore)
1526
+ # oo = Excelx.new(File.join(TESTDIR,"no_spreadsheet_file.txt"))
1527
+ # es soll absichtlich ein Abbruch provoziert werden, deshalb :ignore
1528
+ oo = Excelx.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1529
+ false,
1530
+ :ignore)
1490
1531
 
1491
- }
1492
- now = Dir.glob(TMP_PREFIX)
1493
- assert (now-prev).empty?
1532
+ }
1533
+ now = Dir.glob(TMP_PREFIX)
1534
+ assert (now-prev).empty?
1535
+ end
1494
1536
  end
1495
- end
1496
1537
  end
1497
1538
 
1498
1539
  def test_no_remaining_tmp_files_google
@@ -1574,67 +1615,67 @@ Sheet 3:
1574
1615
  end
1575
1616
 
1576
1617
  def test_file_warning_default
1577
- if OPENOFFICE
1578
- prev = Dir.glob(TMP_PREFIX)
1579
- assert_raises(TypeError, "test/numbers1.xls is not an openoffice spreadsheet") { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls")) }
1580
- assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xlsx")) }
1581
- now = Dir.glob(TMP_PREFIX)
1582
- assert (now-prev).empty?
1583
- end
1584
- if EXCEL
1585
- prev = Dir.glob(TMP_PREFIX)
1586
- assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.ods")) }
1587
- assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.xlsx")) }
1588
- now = Dir.glob(TMP_PREFIX)
1589
- assert (now-prev).empty?, "temporary directory was not removed"
1590
- end
1591
- if EXCELX
1592
- prev = Dir.glob(TMP_PREFIX)
1593
- assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.ods")) }
1594
- assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.xls")) }
1595
- now = Dir.glob(TMP_PREFIX)
1596
- assert (now-prev).empty?
1597
- end
1618
+ if OPENOFFICE
1619
+ prev = Dir.glob(TMP_PREFIX)
1620
+ assert_raises(TypeError, "test/numbers1.xls is not an openoffice spreadsheet") { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls")) }
1621
+ assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xlsx")) }
1622
+ now = Dir.glob(TMP_PREFIX)
1623
+ assert (now-prev).empty?
1624
+ end
1625
+ if EXCEL
1626
+ prev = Dir.glob(TMP_PREFIX)
1627
+ assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.ods")) }
1628
+ assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.xlsx")) }
1629
+ now = Dir.glob(TMP_PREFIX)
1630
+ assert (now-prev).empty?, "temporary directory was not removed"
1631
+ end
1632
+ if EXCELX
1633
+ prev = Dir.glob(TMP_PREFIX)
1634
+ assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.ods")) }
1635
+ assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.xls")) }
1636
+ now = Dir.glob(TMP_PREFIX)
1637
+ assert (now-prev).empty?
1638
+ end
1598
1639
  end
1599
1640
 
1600
1641
  def test_file_warning_error
1601
- if OPENOFFICE
1602
- prev = Dir.glob(TMP_PREFIX)
1603
- assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1604
- now = Dir.glob(TMP_PREFIX)
1605
- assert (now-prev).empty?
1642
+ if OPENOFFICE
1643
+ prev = Dir.glob(TMP_PREFIX)
1644
+ assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1645
+ now = Dir.glob(TMP_PREFIX)
1646
+ assert (now-prev).empty?
1606
1647
 
1607
- prev = Dir.glob(TMP_PREFIX)
1608
- assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1609
- now = Dir.glob(TMP_PREFIX)
1610
- assert (now-prev).empty?
1611
- end
1612
- if EXCEL
1613
- prev = Dir.glob(TMP_PREFIX)
1614
- assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1615
- now = Dir.glob(TMP_PREFIX)
1616
- assert (now-prev).empty?, "temporary directory was not deleted"
1617
-
1618
- prev = Dir.glob(TMP_PREFIX)
1619
- assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1620
- now = Dir.glob(TMP_PREFIX)
1621
- assert (now-prev).empty?, "temporary directory was not deleted"
1622
- end
1623
- if EXCELX
1624
- prev = Dir.glob(TMP_PREFIX)
1625
- assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1626
- now = Dir.glob(TMP_PREFIX)
1627
- assert (now-prev).empty?, "temporary directory was not deleted"
1628
-
1629
- prev = Dir.glob(TMP_PREFIX)
1630
- assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1631
- now = Dir.glob(TMP_PREFIX)
1632
- assert (now-prev).empty?, "temporary directory was not deleted"
1633
- end
1648
+ prev = Dir.glob(TMP_PREFIX)
1649
+ assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1650
+ now = Dir.glob(TMP_PREFIX)
1651
+ assert (now-prev).empty?
1652
+ end
1653
+ if EXCEL
1654
+ prev = Dir.glob(TMP_PREFIX)
1655
+ assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1656
+ now = Dir.glob(TMP_PREFIX)
1657
+ assert (now-prev).empty?, "temporary directory was not deleted"
1658
+
1659
+ prev = Dir.glob(TMP_PREFIX)
1660
+ assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1661
+ now = Dir.glob(TMP_PREFIX)
1662
+ assert (now-prev).empty?, "temporary directory was not deleted"
1663
+ end
1664
+ if EXCELX
1665
+ prev = Dir.glob(TMP_PREFIX)
1666
+ assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1667
+ now = Dir.glob(TMP_PREFIX)
1668
+ assert (now-prev).empty?, "temporary directory was not deleted"
1669
+
1670
+ prev = Dir.glob(TMP_PREFIX)
1671
+ assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1672
+ now = Dir.glob(TMP_PREFIX)
1673
+ assert (now-prev).empty?, "temporary directory was not deleted"
1674
+ end
1634
1675
  end
1635
1676
 
1636
1677
  def test_file_warning_warning
1637
- after Date.new(2011,9,2) do
1678
+ after Date.new(2011,10,14) do
1638
1679
  if OPENOFFICE
1639
1680
  assert_nothing_raised(TypeError) {
1640
1681
  assert_raises(Zip::ZipError) {
@@ -1680,37 +1721,37 @@ Sheet 3:
1680
1721
  end
1681
1722
 
1682
1723
  def test_file_warning_ignore
1683
- if OPENOFFICE
1684
- # Files, die eigentlich Openoffice-
1685
- # Files sind, aber die falsche Endung haben.
1686
- # Es soll ohne Fehlermeldung oder Warnung
1687
- # oder Abbruch die Datei geoffnet werden
1724
+ if OPENOFFICE
1725
+ # Files, die eigentlich Openoffice-
1726
+ # Files sind, aber die falsche Endung haben.
1727
+ # Es soll ohne Fehlermeldung oder Warnung
1728
+ # oder Abbruch die Datei geoffnet werden
1688
1729
 
1689
- # xls
1690
- assert_nothing_raised() {
1691
- oo = Openoffice.new(File.join(TESTDIR,"type_openoffice.xls"),false, :ignore)
1692
- }
1693
- # xlsx
1694
- assert_nothing_raised() {
1695
- oo = Openoffice.new(File.join(TESTDIR,"type_openoffice.xlsx"),false, :ignore)
1696
- }
1697
- end
1698
- if EXCEL
1699
- assert_nothing_raised() {
1700
- oo = Excel.new(File.join(TESTDIR,"type_excel.ods"),false, :ignore)
1701
- }
1702
- assert_nothing_raised() {
1703
- oo = Excel.new(File.join(TESTDIR,"type_excel.xlsx"),false, :ignore)
1704
- }
1705
- end
1706
- if EXCELX
1707
- assert_nothing_raised() {
1708
- oo = Excelx.new(File.join(TESTDIR,"type_excelx.ods"),false, :ignore)
1709
- }
1710
- assert_nothing_raised() {
1711
- oo = Excelx.new(File.join(TESTDIR,"type_excelx.xls"),false, :ignore)
1712
- }
1713
- end
1730
+ # xls
1731
+ assert_nothing_raised() {
1732
+ oo = Openoffice.new(File.join(TESTDIR,"type_openoffice.xls"),false, :ignore)
1733
+ }
1734
+ # xlsx
1735
+ assert_nothing_raised() {
1736
+ oo = Openoffice.new(File.join(TESTDIR,"type_openoffice.xlsx"),false, :ignore)
1737
+ }
1738
+ end
1739
+ if EXCEL
1740
+ assert_nothing_raised() {
1741
+ oo = Excel.new(File.join(TESTDIR,"type_excel.ods"),false, :ignore)
1742
+ }
1743
+ assert_nothing_raised() {
1744
+ oo = Excel.new(File.join(TESTDIR,"type_excel.xlsx"),false, :ignore)
1745
+ }
1746
+ end
1747
+ if EXCELX
1748
+ assert_nothing_raised() {
1749
+ oo = Excelx.new(File.join(TESTDIR,"type_excelx.ods"),false, :ignore)
1750
+ }
1751
+ assert_nothing_raised() {
1752
+ oo = Excelx.new(File.join(TESTDIR,"type_excelx.xls"),false, :ignore)
1753
+ }
1754
+ end
1714
1755
  =begin
1715
1756
  if OPENOFFICE
1716
1757
  assert_nothing_raised() {
@@ -2062,29 +2103,26 @@ Sheet 3:
2062
2103
  end # LONG_RUN
2063
2104
  end
2064
2105
 
2065
- def test_labeled_cells
2066
- # to do
2067
- # "more spreadsheet types"
2068
- # end
2069
- with_each_spreadsheet(:name=>'named_cells', :format=>:openoffice) do |oo|
2070
- oo.default_sheet = oo.sheets.first
2106
+ def test_label
2107
+ with_each_spreadsheet(:name=>'named_cells', :format=>[:openoffice,:excelx,:libreoffice]) do |oo|
2108
+ # oo.default_sheet = oo.sheets.first
2071
2109
  begin
2072
2110
  row,col = oo.label('anton')
2073
2111
  rescue ArgumentError
2074
2112
  puts "labels error at #{oo.class}"
2075
2113
  raise
2076
2114
  end
2077
- assert_equal 5, row
2078
- assert_equal 3, col
2115
+ assert_equal 5, row, "error with label in class #{oo.class}"
2116
+ assert_equal 3, col, "error with label in class #{oo.class}"
2079
2117
 
2080
2118
  row,col = oo.label('anton')
2081
- assert_equal 'Anton', oo.cell(row,col)
2119
+ assert_equal 'Anton', oo.cell(row,col), "error with label in class #{oo.class}"
2082
2120
 
2083
2121
  row,col = oo.label('berta')
2084
- assert_equal 'Bertha', oo.cell(row,col)
2122
+ assert_equal 'Bertha', oo.cell(row,col), "error with label in class #{oo.class}"
2085
2123
 
2086
2124
  row,col = oo.label('caesar')
2087
- assert_equal 'Cäsar', oo.cell(row,col)
2125
+ assert_equal 'Cäsar', oo.cell(row,col),"error with label in class #{oo.class}"
2088
2126
 
2089
2127
  row,col = oo.label('never')
2090
2128
  assert_nil row
@@ -2094,7 +2132,12 @@ Sheet 3:
2094
2132
  assert_equal 5, row
2095
2133
  assert_equal 3, col
2096
2134
  assert_equal "Sheet1", sheet
2135
+ end
2136
+ end
2097
2137
 
2138
+ def test_method_missing_anton
2139
+ with_each_spreadsheet(:name=>'named_cells', :format=>[:openoffice,:excelx,:libreoffice]) do |oo|
2140
+ # oo.default_sheet = oo.sheets.first
2098
2141
  assert_equal "Anton", oo.anton
2099
2142
  assert_raises(NoMethodError) {
2100
2143
  row,col = oo.never
@@ -2102,6 +2145,69 @@ Sheet 3:
2102
2145
  end
2103
2146
  end
2104
2147
 
2148
+ def test_labels
2149
+ with_each_spreadsheet(:name=>'named_cells', :format=>[:openoffice,:excelx,:libreoffice]) do |oo|
2150
+ # oo.default_sheet = oo.sheets.first
2151
+ assert_equal [
2152
+ ['anton',[5,3,'Sheet1']],
2153
+ ['berta',[4,2,'Sheet1']],
2154
+ ['caesar',[7,2,'Sheet1']],
2155
+ ], oo.labels, "error with labels array in class #{oo.class}"
2156
+ end
2157
+ end
2158
+
2159
+ # def test_labeled_cells
2160
+ # to do
2161
+ # "more spreadsheet types"
2162
+ # end
2163
+ # with_each_spreadsheet(:name=>'named_cells', :format=>[:openoffice,:excelx,:libreoffice]) do |oo|
2164
+ # oo.default_sheet = oo.sheets.first
2165
+ # begin
2166
+ # row,col = oo.label('anton')
2167
+ # rescue ArgumentError
2168
+ # puts "labels error at #{oo.class}"
2169
+ # raise
2170
+ # end
2171
+ # assert_equal 5, row
2172
+ # assert_equal 3, col
2173
+ #
2174
+ # row,col = oo.label('anton')
2175
+ # assert_equal 'Anton', oo.cell(row,col)
2176
+ #
2177
+ # row,col = oo.label('berta')
2178
+ # assert_equal 'Bertha', oo.cell(row,col)
2179
+ #
2180
+ # row,col = oo.label('caesar')
2181
+ # assert_equal 'Cäsar', oo.cell(row,col)
2182
+ #
2183
+ # row,col = oo.label('never')
2184
+ # assert_nil row
2185
+ # assert_nil col
2186
+ #
2187
+ # row,col,sheet = oo.label('anton')
2188
+ # assert_equal 5, row
2189
+ # assert_equal 3, col
2190
+ # assert_equal "Sheet1", sheet
2191
+ #
2192
+ # assert_equal "Anton", oo.anton
2193
+ # assert_raises(NoMethodError) {
2194
+ # row,col = oo.never
2195
+ # }
2196
+ #
2197
+ # #assert_equal [
2198
+ ## ['anton',['Sheet1',5,3]],
2199
+ ## ['berta',['Sheet1',4,2]],
2200
+ ## ['caesar',['Sheet1',7,2]],
2201
+ ## ], oo.labels, "error with labels array in class #{oo.class}"
2202
+ ## Reihenfolge row,col,sheet analog zu #label
2203
+ # assert_equal [
2204
+ # ['anton',[5,3,'Sheet1']],
2205
+ # ['berta',[4,2,'Sheet1']],
2206
+ # ['caesar',[7,2,'Sheet1']],
2207
+ # ], oo.labels, "error with labels array in class #{oo.class}"
2208
+ # end
2209
+ # end
2210
+
2105
2211
 
2106
2212
  def test_bug_excel_last_row_255
2107
2213
  if LONG_RUN
@@ -2164,7 +2270,7 @@ Sheet 3:
2164
2270
  end end
2165
2271
 
2166
2272
  def test_bug_date_mileszs
2167
- after Date.new(2011,8,28) do
2273
+ after Date.new(2011,11,1) do
2168
2274
  # to do
2169
2275
  # "An richtige Stelle kopieren. Ist das Dokument vertraulich?"
2170
2276
  # 'ist auf dem Netbook nicht vorhanden'
@@ -2199,6 +2305,8 @@ Sheet 3:
2199
2305
  end
2200
2306
 
2201
2307
  def test_bug_xlsx_reference_cell
2308
+
2309
+ if EXCELX
2202
2310
  =begin
2203
2311
  If cell A contains a string and cell B references cell A. When reading the value of cell B, the result will be
2204
2312
  "0.0" instead of the value of cell A.
@@ -2217,14 +2325,15 @@ where the expected result is
2217
2325
  "A: TestString"
2218
2326
  "B: TestString"
2219
2327
  =end
2220
- xlsx = Excelx.new(File.join('test', "formula_string_error.xlsx"))
2221
- xlsx.default_sheet = xlsx.sheets.first
2222
- assert_equal 'Teststring', xlsx.cell('a',1)
2223
- assert_equal 'Teststring', xlsx.cell('a',2)
2328
+ xlsx = Excelx.new(File.join('test', "formula_string_error.xlsx"))
2329
+ xlsx.default_sheet = xlsx.sheets.first
2330
+ assert_equal 'Teststring', xlsx.cell('a',1)
2331
+ assert_equal 'Teststring', xlsx.cell('a',2)
2332
+ end
2224
2333
  end
2225
-
2334
+
2226
2335
  def test_bug_guest_list_2011_05_05
2227
- after Date.new(2011,8,28) do
2336
+ after Date.new(2011,11,1) do
2228
2337
  oo = Excel.new(File.join("..","confidential","guest_list_addresses.xls"))
2229
2338
  oo.default_sheet = oo.sheets.first
2230
2339
  assert_equal "lalala", oo.cell('a',1) # anderer Inhalt im Spreadsheet
@@ -2248,35 +2357,37 @@ where the expected result is
2248
2357
  # don't test it with other spreadsheet types! this was only a problem
2249
2358
  # with .xlsx files
2250
2359
  def test_bug_date_not_recognized_2011_05_21
2251
- #oo = Excelx.new(File.join(TESTDIR,'2011-05-21_sample_date_problem.xlsx'))
2252
- oo = Excelx.new(File.join('..','confidential','2011-05-21_sample_date_problem.xlsx'))
2253
- oo.default_sheet = oo.sheets.first
2254
- assert_equal Date.new(2011,3,24), oo.b4
2255
- assert_equal Date.new(2011,3,25), oo.b5
2256
- assert_equal Date.new(2011,5,5), oo.b6
2257
- assert_equal Date.new(2012,3,23), oo.b7
2360
+ if EXCELX
2361
+ oo = Excelx.new(File.join('..','confidential','2011-05-21_sample_date_problem.xlsx'))
2362
+ oo.default_sheet = oo.sheets.first
2363
+ assert_equal Date.new(2011,3,24), oo.b4
2364
+ assert_equal Date.new(2011,3,25), oo.b5
2365
+ assert_equal Date.new(2011,5,5), oo.b6
2366
+ assert_equal Date.new(2012,3,23), oo.b7
2367
+ end
2258
2368
  end
2259
2369
 
2260
2370
  def test_bug_string_as_a_date_2011_05_21_spreadsheet_only
2261
- after Date.new(2011,8,28) do
2262
- # to do
2263
- # 'wieder entfernen'
2264
- # end
2265
- require 'spreadsheet'
2266
- book = Spreadsheet.open File.join('..','confidential','2011-05-21_sample_type_problem.xls')
2267
- sheet1 = book.worksheet 0
2268
- sheet1.each_with_index do |row,rownum|
2269
- # p row[0]
2270
- if rownum == 2
2271
- assert_equal 68, row[6]
2371
+ after Date.new(2011,12,28) do
2372
+ if EXCEL
2373
+ # to do
2374
+ # 'wieder entfernen'
2375
+ # end
2376
+ require 'spreadsheet'
2377
+ book = Spreadsheet.open File.join('..','confidential','2011-05-21_sample_type_problem.xls')
2378
+ sheet1 = book.worksheet 0
2379
+ sheet1.each_with_index do |row,rownum|
2380
+ # p row[0]
2381
+ if rownum == 2
2382
+ assert_equal 68, row[6]
2383
+ end
2272
2384
  end
2273
-
2274
2385
  end
2275
2386
  end
2276
2387
  end
2277
2388
 
2278
2389
  def test_bug_string_as_a_date_2011_05_21
2279
- after Date.new(2011,8,28) do
2390
+ after Date.new(2011,11,1) do
2280
2391
  #oo = Excel.new(File.join(TESTDIR,'2011-05-21_sample_type_problem.xls'))
2281
2392
  oo = Excel.new(File.join('..','confidential','2011-05-21_sample_type_problem.xls'))
2282
2393
  oo.default_sheet = oo.sheets.first
@@ -2354,26 +2465,136 @@ where the expected result is
2354
2465
 
2355
2466
  # 2011-08-11
2356
2467
  def test_bug_openoffice_formula_missing_letters
2357
- if OPENOFFICE
2358
- # Dieses Dokument wurde mit LibreOffice angelegt.
2359
- # Keine Ahnung, ob es damit zusammenhaengt, das diese
2360
- # Formeln anders sind, als in der Datei formula.ods, welche
2361
- # mit Openoffice angelegt wurde.
2362
- # Bei den Openoffice-Dateien ist in diesem Feld in der XML-
2363
- # Datei of: als Prefix enthalten, waehrend in dieser Datei
2364
- # irgendetwas mit oooc: als Prefix verwendet wird.
2365
- oo = Openoffice.new(File.join(TESTDIR,'dreimalvier.ods'))
2366
- oo.default_sheet = oo.sheets.first
2367
- assert_equal '=SUM([.A1:.D1])', oo.formula('e',1)
2368
- assert_equal '=SUM([.A2:.D2])', oo.formula('e',2)
2369
- assert_equal '=SUM([.A3:.D3])', oo.formula('e',3)
2370
- assert_equal [
2371
- [1,5,'=SUM([.A1:.D1])'],
2372
- [2,5,'=SUM([.A2:.D2])'],
2373
- [3,5,'=SUM([.A3:.D3])'],
2374
- ], oo.formulas
2468
+ if LIBREOFFICE
2469
+ # Dieses Dokument wurde mit LibreOffice angelegt.
2470
+ # Keine Ahnung, ob es damit zusammenhaengt, das diese
2471
+ # Formeln anders sind, als in der Datei formula.ods, welche
2472
+ # mit Openoffice angelegt wurde.
2473
+ # Bei den Openoffice-Dateien ist in diesem Feld in der XML-
2474
+ # Datei of: als Prefix enthalten, waehrend in dieser Datei
2475
+ # irgendetwas mit oooc: als Prefix verwendet wird.
2476
+ oo = Openoffice.new(File.join(TESTDIR,'dreimalvier.ods'))
2477
+ oo.default_sheet = oo.sheets.first
2478
+ assert_equal '=SUM([.A1:.D1])', oo.formula('e',1)
2479
+ assert_equal '=SUM([.A2:.D2])', oo.formula('e',2)
2480
+ assert_equal '=SUM([.A3:.D3])', oo.formula('e',3)
2481
+ assert_equal [
2482
+ [1,5,'=SUM([.A1:.D1])'],
2483
+ [2,5,'=SUM([.A2:.D2])'],
2484
+ [3,5,'=SUM([.A3:.D3])'],
2485
+ ], oo.formulas
2486
+
2487
+ end
2488
+ end
2375
2489
 
2490
+ =begin
2491
+ def test_postprocessing_and_types_in_csv
2492
+ if CSV
2493
+ oo = Csv.new(File.join(TESTDIR,'csvtypes.csv'))
2494
+ oo.default_sheet = oo.sheets.first
2495
+ assert_equal(1,oo.a1)
2496
+ assert_equal(:float,oo.celltype('A',1))
2497
+ assert_equal("2",oo.b1)
2498
+ assert_equal(:string,oo.celltype('B',1))
2499
+ assert_equal("Mayer",oo.c1)
2500
+ assert_equal(:string,oo.celltype('C',1))
2501
+ end
2502
+ end
2503
+ =end
2504
+
2505
+ =begin
2506
+ def test_postprocessing_with_callback_function
2507
+ if CSV
2508
+ oo = Csv.new(File.join(TESTDIR,'csvtypes.csv'))
2509
+ oo.default_sheet = oo.sheets.first
2510
+
2511
+ #
2512
+ assert_equal(1, oo.last_column)
2513
+ end
2514
+ end
2515
+ =end
2516
+
2517
+ =begin
2518
+ def x_123
2519
+ class ::Csv
2520
+ def cell_postprocessing(row,col,value)
2521
+ if row < 3
2522
+ return nil
2523
+ end
2524
+ return value
2525
+ end
2526
+ end
2527
+ end
2528
+ =end
2529
+
2530
+ def test_nil_rows_and_lines_csv
2531
+ to do
2532
+ 'wieder aktivieren'
2533
+ end
2534
+ =begin
2535
+ x_123
2536
+ if CSV
2537
+ oo = Csv.new(File.join(TESTDIR,'Bibelbund.csv'))
2538
+ oo.default_sheet = oo.sheets.first
2539
+ assert_equal 3, oo.first_row
2376
2540
  end
2541
+ =end
2542
+ end
2543
+
2544
+ def test_bug_pfand_from_windows_phone_xlsx
2545
+ with_each_spreadsheet(:name=>'Pfand_from_windows_phone', :format=>:excelx) do |oo|
2546
+ oo.default_sheet = oo.sheets.first
2547
+ assert_equal ['Blatt1','Blatt2','Blatt3'], oo.sheets
2548
+ assert_equal 'Summe', oo.cell('b',1)
2549
+
2550
+ assert_equal Date.new(2011,9,14), oo.cell('a',2)
2551
+ assert_equal :date, oo.celltype('a',2)
2552
+ assert_equal Date.new(2011,9,15), oo.cell('a',3)
2553
+ assert_equal :date, oo.celltype('a',3)
2554
+
2555
+ assert_equal 3.81, oo.cell('b',2)
2556
+ assert_equal "SUM(C2:L2)", oo.formula('b',2)
2557
+ assert_equal 0.7, oo.cell('c',2)
2558
+ end # each
2559
+ end
2560
+
2561
+ def test_comment
2562
+ to do
2563
+ "more spreadsheet types"
2564
+ end
2565
+ with_each_spreadsheet(:name=>'comments', :format=>[:openoffice,:libreoffice,
2566
+ :excelx]) do |oo|
2567
+ oo.default_sheet = oo.sheets.first
2568
+ assert_equal 'Kommentar fuer B4',oo.comment('b',4)
2569
+ assert_equal 'Kommentar fuer B5',oo.comment('b',5)
2570
+ assert_nil oo.comment('b',99)
2571
+ # no comment at the second page
2572
+ oo.default_sheet = oo.sheets[1]
2573
+ assert_nil oo.comment('b',4)
2574
+ end
2575
+ end
2576
+
2577
+ def test_comment?
2578
+ with_each_spreadsheet(:name=>'comments', :format=>[:openoffice,:libreoffice,
2579
+ :excelx]) do |oo|
2580
+ oo.default_sheet = oo.sheets.first
2581
+ assert_equal true, oo.comment?('b',4)
2582
+ assert_equal false, oo.comment?('b',99)
2583
+ end
2584
+ end
2585
+
2586
+ def test_comments
2587
+ with_each_spreadsheet(:name=>'comments', :format=>[:openoffice,:libreoffice,
2588
+ :excelx]) do |oo|
2589
+ oo.default_sheet = oo.sheets.first
2590
+ assert_equal [
2591
+ [4, 2, "Kommentar fuer B4"],
2592
+ [5, 2, "Kommentar fuer B5"],
2593
+ ], oo.comments(oo.sheets.first), "comments error in class #{oo.class}"
2594
+ # no comments at the second page
2595
+ oo.default_sheet = oo.sheets[1]
2596
+ assert_equal [], oo.comments, "comments error in class #{oo.class}"
2597
+ end
2377
2598
  end
2378
2599
 
2379
2600
  end # class