roo 1.13.2 → 2.0.1
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.
- checksums.yaml +4 -4
- data/.gitignore +7 -0
- data/.simplecov +4 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +515 -0
- data/Gemfile +16 -10
- data/Guardfile +24 -0
- data/LICENSE +3 -1
- data/README.md +254 -0
- data/Rakefile +23 -23
- data/examples/roo_soap_client.rb +28 -31
- data/examples/roo_soap_server.rb +4 -6
- data/examples/write_me.rb +9 -10
- data/lib/roo/base.rb +334 -395
- data/lib/roo/csv.rb +120 -113
- data/lib/roo/excelx/cell.rb +77 -0
- data/lib/roo/excelx/comments.rb +22 -0
- data/lib/roo/excelx/extractor.rb +22 -0
- data/lib/roo/excelx/relationships.rb +25 -0
- data/lib/roo/excelx/shared_strings.rb +37 -0
- data/lib/roo/excelx/sheet.rb +107 -0
- data/lib/roo/excelx/sheet_doc.rb +200 -0
- data/lib/roo/excelx/styles.rb +64 -0
- data/lib/roo/excelx/workbook.rb +59 -0
- data/lib/roo/excelx.rb +413 -597
- data/lib/roo/font.rb +17 -0
- data/lib/roo/libre_office.rb +5 -0
- data/lib/roo/link.rb +15 -0
- data/lib/roo/{openoffice.rb → open_office.rb} +681 -496
- data/lib/roo/spreadsheet.rb +20 -23
- data/lib/roo/utils.rb +78 -0
- data/lib/roo/version.rb +3 -0
- data/lib/roo.rb +18 -24
- data/roo.gemspec +20 -204
- data/spec/lib/roo/base_spec.rb +1 -4
- data/spec/lib/roo/csv_spec.rb +21 -13
- data/spec/lib/roo/excelx/format_spec.rb +7 -6
- data/spec/lib/roo/excelx_spec.rb +424 -11
- data/spec/lib/roo/libreoffice_spec.rb +16 -6
- data/spec/lib/roo/openoffice_spec.rb +13 -8
- data/spec/lib/roo/spreadsheet_spec.rb +40 -12
- data/spec/lib/roo/utils_spec.rb +106 -0
- data/spec/spec_helper.rb +2 -1
- data/test/test_generic_spreadsheet.rb +117 -139
- data/test/test_helper.rb +9 -56
- data/test/test_roo.rb +274 -478
- metadata +65 -303
- data/CHANGELOG +0 -417
- data/Gemfile.lock +0 -78
- data/README.markdown +0 -126
- data/VERSION +0 -1
- data/lib/roo/excel.rb +0 -355
- data/lib/roo/excel2003xml.rb +0 -300
- data/lib/roo/google.rb +0 -292
- data/lib/roo/roo_rails_helper.rb +0 -83
- data/lib/roo/worksheet.rb +0 -18
- data/scripts/txt2html +0 -67
- data/spec/lib/roo/excel2003xml_spec.rb +0 -15
- data/spec/lib/roo/excel_spec.rb +0 -17
- data/spec/lib/roo/google_spec.rb +0 -64
- data/test/files/1900_base.xls +0 -0
- data/test/files/1900_base.xlsx +0 -0
- data/test/files/1904_base.xls +0 -0
- data/test/files/1904_base.xlsx +0 -0
- data/test/files/Bibelbund.csv +0 -3741
- data/test/files/Bibelbund.ods +0 -0
- data/test/files/Bibelbund.xls +0 -0
- data/test/files/Bibelbund.xlsx +0 -0
- data/test/files/Bibelbund.xml +0 -62518
- data/test/files/Bibelbund1.ods +0 -0
- data/test/files/Pfand_from_windows_phone.xlsx +0 -0
- data/test/files/bad_excel_date.xls +0 -0
- data/test/files/bbu.ods +0 -0
- data/test/files/bbu.xls +0 -0
- data/test/files/bbu.xlsx +0 -0
- data/test/files/bbu.xml +0 -152
- data/test/files/bode-v1.ods.zip +0 -0
- data/test/files/bode-v1.xls.zip +0 -0
- data/test/files/boolean.csv +0 -2
- data/test/files/boolean.ods +0 -0
- data/test/files/boolean.xls +0 -0
- data/test/files/boolean.xlsx +0 -0
- data/test/files/boolean.xml +0 -112
- data/test/files/borders.ods +0 -0
- data/test/files/borders.xls +0 -0
- data/test/files/borders.xlsx +0 -0
- data/test/files/borders.xml +0 -144
- data/test/files/bug-numbered-sheet-names.xlsx +0 -0
- data/test/files/bug-row-column-fixnum-float.xls +0 -0
- data/test/files/bug-row-column-fixnum-float.xml +0 -127
- data/test/files/comments.ods +0 -0
- data/test/files/comments.xls +0 -0
- data/test/files/comments.xlsx +0 -0
- data/test/files/csvtypes.csv +0 -1
- data/test/files/datetime.ods +0 -0
- data/test/files/datetime.xls +0 -0
- data/test/files/datetime.xlsx +0 -0
- data/test/files/datetime.xml +0 -142
- data/test/files/datetime_floatconv.xls +0 -0
- data/test/files/datetime_floatconv.xml +0 -148
- data/test/files/dreimalvier.ods +0 -0
- data/test/files/emptysheets.ods +0 -0
- data/test/files/emptysheets.xls +0 -0
- data/test/files/emptysheets.xlsx +0 -0
- data/test/files/emptysheets.xml +0 -105
- data/test/files/excel2003.xml +0 -21140
- data/test/files/false_encoding.xls +0 -0
- data/test/files/false_encoding.xml +0 -132
- data/test/files/file_item_error.xlsx +0 -0
- data/test/files/formula.ods +0 -0
- data/test/files/formula.xls +0 -0
- data/test/files/formula.xlsx +0 -0
- data/test/files/formula.xml +0 -134
- data/test/files/formula_parse_error.xls +0 -0
- data/test/files/formula_parse_error.xml +0 -1833
- data/test/files/formula_string_error.xlsx +0 -0
- data/test/files/html-escape.ods +0 -0
- data/test/files/link.xls +0 -0
- data/test/files/link.xlsx +0 -0
- data/test/files/matrix.ods +0 -0
- data/test/files/matrix.xls +0 -0
- data/test/files/named_cells.ods +0 -0
- data/test/files/named_cells.xls +0 -0
- data/test/files/named_cells.xlsx +0 -0
- data/test/files/no_spreadsheet_file.txt +0 -1
- data/test/files/numbers1.csv +0 -18
- data/test/files/numbers1.ods +0 -0
- data/test/files/numbers1.xls +0 -0
- data/test/files/numbers1.xlsx +0 -0
- data/test/files/numbers1.xml +0 -312
- data/test/files/numeric-link.xlsx +0 -0
- data/test/files/only_one_sheet.ods +0 -0
- data/test/files/only_one_sheet.xls +0 -0
- data/test/files/only_one_sheet.xlsx +0 -0
- data/test/files/only_one_sheet.xml +0 -67
- data/test/files/paragraph.ods +0 -0
- data/test/files/paragraph.xls +0 -0
- data/test/files/paragraph.xlsx +0 -0
- data/test/files/paragraph.xml +0 -127
- data/test/files/prova.xls +0 -0
- data/test/files/ric.ods +0 -0
- data/test/files/simple_spreadsheet.ods +0 -0
- data/test/files/simple_spreadsheet.xls +0 -0
- data/test/files/simple_spreadsheet.xlsx +0 -0
- data/test/files/simple_spreadsheet.xml +0 -225
- data/test/files/simple_spreadsheet_from_italo.ods +0 -0
- data/test/files/simple_spreadsheet_from_italo.xls +0 -0
- data/test/files/simple_spreadsheet_from_italo.xml +0 -242
- data/test/files/so_datetime.csv +0 -7
- data/test/files/style.ods +0 -0
- data/test/files/style.xls +0 -0
- data/test/files/style.xlsx +0 -0
- data/test/files/style.xml +0 -154
- data/test/files/time-test.csv +0 -2
- data/test/files/time-test.ods +0 -0
- data/test/files/time-test.xls +0 -0
- data/test/files/time-test.xlsx +0 -0
- data/test/files/time-test.xml +0 -131
- data/test/files/type_excel.ods +0 -0
- data/test/files/type_excel.xlsx +0 -0
- data/test/files/type_excelx.ods +0 -0
- data/test/files/type_excelx.xls +0 -0
- data/test/files/type_openoffice.xls +0 -0
- data/test/files/type_openoffice.xlsx +0 -0
- data/test/files/whitespace.ods +0 -0
- data/test/files/whitespace.xls +0 -0
- data/test/files/whitespace.xlsx +0 -0
- data/test/files/whitespace.xml +0 -184
- data/test/rm_sub_test.rb +0 -12
- data/test/rm_test.rb +0 -7
- data/website/index.html +0 -385
- data/website/index.txt +0 -423
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -130
- data/website/template.rhtml +0 -48
data/test/test_roo.rb
CHANGED
|
@@ -17,38 +17,33 @@
|
|
|
17
17
|
# with the wrong spreadsheet class
|
|
18
18
|
#STDERR.reopen "/dev/null","w"
|
|
19
19
|
|
|
20
|
-
require
|
|
20
|
+
require 'test_helper'
|
|
21
|
+
require 'stringio'
|
|
21
22
|
|
|
22
|
-
class TestRoo < Test
|
|
23
|
+
class TestRoo < Minitest::Test
|
|
23
24
|
|
|
24
|
-
OPENOFFICE = true
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
LIBREOFFICE = true # do LibreOffice tests? (.ods files)
|
|
29
|
-
CSV = true # do CSV tests? (.csv files)
|
|
25
|
+
OPENOFFICE = true # do OpenOffice-Spreadsheet Tests? (.ods files)
|
|
26
|
+
EXCELX = true # do Excelx Tests? (.xlsx files)
|
|
27
|
+
LIBREOFFICE = true # do LibreOffice tests? (.ods files)
|
|
28
|
+
CSV = true # do CSV tests? (.csv files)
|
|
30
29
|
|
|
31
|
-
FORMATS =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
libreoffice: LIBREOFFICE
|
|
37
|
-
}
|
|
30
|
+
FORMATS = [
|
|
31
|
+
:excelx,
|
|
32
|
+
:openoffice,
|
|
33
|
+
:libreoffice
|
|
34
|
+
]
|
|
38
35
|
|
|
39
36
|
ONLINE = false
|
|
40
37
|
LONG_RUN = false
|
|
41
38
|
|
|
42
39
|
def fixture_filename(name, format)
|
|
43
40
|
case format
|
|
44
|
-
when :excel
|
|
45
|
-
"#{name}.xls"
|
|
46
41
|
when :excelx
|
|
47
42
|
"#{name}.xlsx"
|
|
48
43
|
when :openoffice, :libreoffice
|
|
49
44
|
"#{name}.ods"
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
else
|
|
46
|
+
raise ArgumentError, "unexpected format #{format}"
|
|
52
47
|
end
|
|
53
48
|
end
|
|
54
49
|
|
|
@@ -56,48 +51,30 @@ class TestRoo < Test::Unit::TestCase
|
|
|
56
51
|
# and yield a reference to the roo object
|
|
57
52
|
def with_each_spreadsheet(options)
|
|
58
53
|
if options[:format]
|
|
59
|
-
|
|
60
|
-
invalid_formats =
|
|
54
|
+
formats = Array(options[:format])
|
|
55
|
+
invalid_formats = formats - FORMATS
|
|
61
56
|
unless invalid_formats.empty?
|
|
62
57
|
raise "invalid spreadsheet types: #{invalid_formats.join(', ')}"
|
|
63
58
|
end
|
|
64
59
|
else
|
|
65
|
-
|
|
60
|
+
formats = FORMATS
|
|
66
61
|
end
|
|
67
|
-
|
|
62
|
+
formats.each do |format|
|
|
68
63
|
begin
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
fixture_filename(options[:name], format)))
|
|
72
|
-
end
|
|
64
|
+
yield Roo::Spreadsheet.open(File.join(TESTDIR,
|
|
65
|
+
fixture_filename(options[:name], format)))
|
|
73
66
|
rescue => e
|
|
74
|
-
raise e, "#{e.message} for #{format}", e.backtrace
|
|
67
|
+
raise e, "#{e.message} for #{format}", e.backtrace unless options[:ignore_errors]
|
|
75
68
|
end
|
|
76
69
|
end
|
|
77
70
|
end
|
|
78
71
|
|
|
79
|
-
# Using Date.strptime so check that it's using the method
|
|
80
|
-
# with the value set in date_format
|
|
81
|
-
def test_date
|
|
82
|
-
with_each_spreadsheet(:name=>'numbers1', :format=>:google) do |oo|
|
|
83
|
-
# should default to DDMMYYYY
|
|
84
|
-
assert oo.date?("21/11/1962")
|
|
85
|
-
assert !oo.date?("11/21/1962")
|
|
86
|
-
oo.date_format = '%m/%d/%Y'
|
|
87
|
-
assert !oo.date?("21/11/1962")
|
|
88
|
-
assert oo.date?("11/21/1962")
|
|
89
|
-
oo.date_format = '%Y-%m-%d'
|
|
90
|
-
assert(oo.date?("1962-11-21"))
|
|
91
|
-
assert(!oo.date?("1962-21-11"))
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
72
|
def test_sheets_csv
|
|
96
73
|
if CSV
|
|
97
74
|
oo = Roo::CSV.new(File.join(TESTDIR,'numbers1.csv'))
|
|
98
75
|
assert_equal ["default"], oo.sheets
|
|
99
|
-
|
|
100
|
-
|
|
76
|
+
assert_raises(RangeError) { oo.default_sheet = "no_sheet" }
|
|
77
|
+
assert_raises(TypeError) { oo.default_sheet = [1,2,3] }
|
|
101
78
|
oo.sheets.each { |sh|
|
|
102
79
|
oo.default_sheet = sh
|
|
103
80
|
assert_equal sh, oo.default_sheet
|
|
@@ -108,8 +85,8 @@ class TestRoo < Test::Unit::TestCase
|
|
|
108
85
|
def test_sheets
|
|
109
86
|
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
110
87
|
assert_equal ["Tabelle1","Name of Sheet 2","Sheet3","Sheet4","Sheet5"], oo.sheets
|
|
111
|
-
|
|
112
|
-
|
|
88
|
+
assert_raises(RangeError) { oo.default_sheet = "no_sheet" }
|
|
89
|
+
assert_raises(TypeError) { oo.default_sheet = [1,2,3] }
|
|
113
90
|
oo.sheets.each { |sh|
|
|
114
91
|
oo.default_sheet = sh
|
|
115
92
|
assert_equal sh, oo.default_sheet
|
|
@@ -168,8 +145,8 @@ class TestRoo < Test::Unit::TestCase
|
|
|
168
145
|
assert_equal "tata", oo.cell('A',6)
|
|
169
146
|
assert_equal "tata", oo.cell(6,'a')
|
|
170
147
|
assert_equal "tata", oo.cell('a',6)
|
|
171
|
-
|
|
172
|
-
|
|
148
|
+
assert_raises(ArgumentError) { assert_equal "tata", oo.cell('a','f') }
|
|
149
|
+
assert_raises(ArgumentError) { assert_equal "tata", oo.cell('f','a') }
|
|
173
150
|
assert_equal "thisisc8", oo.cell(8,3)
|
|
174
151
|
assert_equal "thisisc8", oo.cell(8,'C')
|
|
175
152
|
assert_equal "thisisc8", oo.cell('C',8)
|
|
@@ -198,27 +175,22 @@ class TestRoo < Test::Unit::TestCase
|
|
|
198
175
|
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
199
176
|
oo.default_sheet = "Name of Sheet 2"
|
|
200
177
|
assert_equal 'I am sheet 2', oo.cell('C',5)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
assert_raise(RangeError) { oo.formula('C',5,"non existing sheet name")}
|
|
212
|
-
assert_raise(RangeError) { oo.set('C',5,42,"non existing sheet name")}
|
|
213
|
-
assert_raise(RangeError) { oo.formulas("non existing sheet name")}
|
|
214
|
-
end
|
|
215
|
-
assert_raise(RangeError) { oo.to_yaml({},1,1,1,1,"non existing sheet name")}
|
|
178
|
+
assert_raises(RangeError) { oo.default_sheet = "non existing sheet name" }
|
|
179
|
+
assert_raises(RangeError) { oo.default_sheet = "non existing sheet name" }
|
|
180
|
+
assert_raises(RangeError) { oo.cell('C',5,"non existing sheet name")}
|
|
181
|
+
assert_raises(RangeError) { oo.celltype('C',5,"non existing sheet name")}
|
|
182
|
+
assert_raises(RangeError) { oo.empty?('C',5,"non existing sheet name")}
|
|
183
|
+
assert_raises(RangeError) { oo.formula?('C',5,"non existing sheet name")}
|
|
184
|
+
assert_raises(RangeError) { oo.formula('C',5,"non existing sheet name")}
|
|
185
|
+
assert_raises(RangeError) { oo.set('C',5,42,"non existing sheet name")}
|
|
186
|
+
assert_raises(RangeError) { oo.formulas("non existing sheet name")}
|
|
187
|
+
assert_raises(RangeError) { oo.to_yaml({},1,1,1,1,"non existing sheet name")}
|
|
216
188
|
end
|
|
217
189
|
end
|
|
218
190
|
|
|
219
191
|
def test_argument_error
|
|
220
192
|
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
221
|
-
|
|
193
|
+
oo.default_sheet = "Tabelle1"
|
|
222
194
|
end
|
|
223
195
|
end
|
|
224
196
|
|
|
@@ -245,7 +217,7 @@ class TestRoo < Test::Unit::TestCase
|
|
|
245
217
|
end
|
|
246
218
|
|
|
247
219
|
def test_italo_table
|
|
248
|
-
with_each_spreadsheet(:name=>'simple_spreadsheet_from_italo', :format
|
|
220
|
+
with_each_spreadsheet(:name=>'simple_spreadsheet_from_italo', :format=>:openoffice) do |oo|
|
|
249
221
|
assert_equal '1', oo.cell('A',1)
|
|
250
222
|
assert_equal '1', oo.cell('B',1)
|
|
251
223
|
assert_equal '1', oo.cell('C',1)
|
|
@@ -324,41 +296,12 @@ class TestRoo < Test::Unit::TestCase
|
|
|
324
296
|
end
|
|
325
297
|
end
|
|
326
298
|
|
|
327
|
-
def
|
|
328
|
-
with_each_spreadsheet(:name=>'
|
|
329
|
-
|
|
330
|
-
assert_equal
|
|
331
|
-
assert_equal
|
|
332
|
-
assert_equal
|
|
333
|
-
assert_equal 4, oo.cell('A',4)
|
|
334
|
-
assert_equal 5, oo.cell('A',5)
|
|
335
|
-
assert_equal 6, oo.cell('A',6)
|
|
336
|
-
# assert_equal 21, oo.cell('A',7)
|
|
337
|
-
assert_equal 21.0, oo.cell('A',7) #TODO: better solution Fixnum/Float
|
|
338
|
-
assert_equal :formula, oo.celltype('A',7)
|
|
339
|
-
# assert_equal "=[Sheet2.A1]", oo.formula('C',7)
|
|
340
|
-
# !!! different from formulas in OpenOffice
|
|
341
|
-
#was: assert_equal "=sheet2!R[-6]C[-2]", oo.formula('C',7)
|
|
342
|
-
# has Google changed their format of formulas/references to other sheets?
|
|
343
|
-
assert_equal "=Sheet2!R[-6]C[-2]", oo.formula('C',7)
|
|
344
|
-
assert_nil oo.formula('A',6)
|
|
345
|
-
# assert_equal [[7, 1, "=SUM([.A1:.A6])"],
|
|
346
|
-
# [7, 2, "=SUM([.$A$1:.B6])"],
|
|
347
|
-
# [7, 3, "=[Sheet2.A1]"],
|
|
348
|
-
# [8, 2, "=SUM([.$A$1:.B7])"],
|
|
349
|
-
# ], oo.formulas(oo.sheets.first)
|
|
350
|
-
# different format than in openoffice spreadsheets:
|
|
351
|
-
#was:
|
|
352
|
-
# assert_equal [[7, 1, "=SUM(R[-6]C[0]:R[-1]C[0])"],
|
|
353
|
-
# [7, 2, "=SUM(R1C1:R[-1]C[0])"],
|
|
354
|
-
# [7, 3, "=sheet2!R[-6]C[-2]"],
|
|
355
|
-
# [8, 2, "=SUM(R1C1:R[-1]C[0])"]],
|
|
356
|
-
# oo.formulas(oo.sheets.first)
|
|
357
|
-
assert_equal [[7, 1, "=SUM(R[-6]C:R[-1]C)"],
|
|
358
|
-
[7, 2, "=SUM(R1C1:R[-1]C)"],
|
|
359
|
-
[7, 3, "=Sheet2!R[-6]C[-2]"],
|
|
360
|
-
[8, 2, "=SUM(R1C1:R[-1]C)"]],
|
|
361
|
-
oo.formulas(oo.sheets.first)
|
|
299
|
+
def test_header_with_brackets_excelx
|
|
300
|
+
with_each_spreadsheet(:name => 'advanced_header', :format => :openoffice) do |oo|
|
|
301
|
+
parsed_head = oo.parse(:headers => true)
|
|
302
|
+
assert_equal "Date(yyyy-mm-dd)", oo.cell('A',1)
|
|
303
|
+
assert_equal parsed_head[0].keys, ["Date(yyyy-mm-dd)"]
|
|
304
|
+
assert_equal parsed_head[0].values, ["Date(yyyy-mm-dd)"]
|
|
362
305
|
end
|
|
363
306
|
end
|
|
364
307
|
|
|
@@ -397,14 +340,6 @@ class TestRoo < Test::Unit::TestCase
|
|
|
397
340
|
end
|
|
398
341
|
end
|
|
399
342
|
|
|
400
|
-
# Excel can only read the cell's value
|
|
401
|
-
def test_formula_excel
|
|
402
|
-
with_each_spreadsheet(:name=>'formula', :format=>:excel) do |oo|
|
|
403
|
-
assert_equal 21, oo.cell('A',7)
|
|
404
|
-
assert_equal 21, oo.cell('B',7)
|
|
405
|
-
end
|
|
406
|
-
end
|
|
407
|
-
|
|
408
343
|
def test_borders_sheets
|
|
409
344
|
with_each_spreadsheet(:name=>'borders') do |oo|
|
|
410
345
|
oo.default_sheet = oo.sheets[1]
|
|
@@ -439,43 +374,22 @@ class TestRoo < Test::Unit::TestCase
|
|
|
439
374
|
end
|
|
440
375
|
end
|
|
441
376
|
|
|
442
|
-
def test_excel_download_uri_and_zipped
|
|
443
|
-
if EXCEL
|
|
444
|
-
if ONLINE
|
|
445
|
-
url = 'http://stiny-leonhard.de/bode-v1.xls.zip'
|
|
446
|
-
excel = Roo::Excel.new(url, :zip)
|
|
447
|
-
excel.default_sheet = excel.sheets.first
|
|
448
|
-
assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
|
|
449
|
-
end
|
|
450
|
-
end
|
|
451
|
-
end
|
|
452
|
-
|
|
453
377
|
def test_openoffice_download_uri_and_zipped
|
|
454
378
|
if OPENOFFICE
|
|
455
379
|
if ONLINE
|
|
456
380
|
url = 'http://spazioinwind.libero.it/s2/rata.ods.zip'
|
|
457
|
-
sheet = Roo::OpenOffice.new(url, :zip)
|
|
381
|
+
sheet = Roo::OpenOffice.new(url, packed: :zip)
|
|
458
382
|
#has been changed: assert_equal 'ist "e" im Nenner von H(s)', sheet.cell('b', 5)
|
|
459
383
|
assert_in_delta 0.001, 505.14, sheet.cell('c', 33).to_f
|
|
460
384
|
end
|
|
461
385
|
end
|
|
462
386
|
end
|
|
463
387
|
|
|
464
|
-
def test_excel_zipped
|
|
465
|
-
if EXCEL
|
|
466
|
-
oo = Roo::Excel.new(File.join(TESTDIR,"bode-v1.xls.zip"), :zip)
|
|
467
|
-
assert oo
|
|
468
|
-
assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
|
|
472
388
|
def test_openoffice_zipped
|
|
473
389
|
if OPENOFFICE
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
|
|
478
|
-
end
|
|
390
|
+
oo = Roo::OpenOffice.new(File.join(TESTDIR,"bode-v1.ods.zip"), packed: :zip)
|
|
391
|
+
assert oo
|
|
392
|
+
assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
|
|
479
393
|
end
|
|
480
394
|
end
|
|
481
395
|
|
|
@@ -543,7 +457,6 @@ class TestRoo < Test::Unit::TestCase
|
|
|
543
457
|
if LONG_RUN
|
|
544
458
|
with_each_spreadsheet(:name=>'Bibelbund', :format=>[
|
|
545
459
|
:openoffice,
|
|
546
|
-
:excel,
|
|
547
460
|
:excelx
|
|
548
461
|
# Google hier nicht, weil Google-Spreadsheets nicht so gross werden
|
|
549
462
|
# duerfen
|
|
@@ -564,9 +477,7 @@ class TestRoo < Test::Unit::TestCase
|
|
|
564
477
|
|
|
565
478
|
def test_bug_quotes_excelx
|
|
566
479
|
if LONG_RUN
|
|
567
|
-
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice,
|
|
568
|
-
:excel,
|
|
569
|
-
:excelx]) do |oo|
|
|
480
|
+
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice, :excelx]) do |oo|
|
|
570
481
|
oo.default_sheet = oo.sheets.first
|
|
571
482
|
assert_equal 'Einflüsse der neuen Theologie in "de gereformeerde Kerken van Nederland"',
|
|
572
483
|
oo.cell('a',76)
|
|
@@ -662,7 +573,7 @@ class TestRoo < Test::Unit::TestCase
|
|
|
662
573
|
with_each_spreadsheet(:name=>'formula', :format=>[:openoffice, :excelx]) do |oo|
|
|
663
574
|
oo.default_sheet = 'Sheet3' # is an empty sheet
|
|
664
575
|
Dir.mktmpdir do |tempdir|
|
|
665
|
-
|
|
576
|
+
oo.to_csv(File.join(tempdir,"emptysheet.csv"))
|
|
666
577
|
assert_equal "", `cat #{File.join(tempdir,"emptysheet.csv")}`
|
|
667
578
|
end
|
|
668
579
|
end
|
|
@@ -670,9 +581,7 @@ class TestRoo < Test::Unit::TestCase
|
|
|
670
581
|
|
|
671
582
|
def test_find_by_row_huge_document
|
|
672
583
|
if LONG_RUN
|
|
673
|
-
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice,
|
|
674
|
-
:excel,
|
|
675
|
-
:excelx]) do |oo|
|
|
584
|
+
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice, :excelx]) do |oo|
|
|
676
585
|
oo.default_sheet = oo.sheets.first
|
|
677
586
|
rec = oo.find 20
|
|
678
587
|
assert rec
|
|
@@ -702,10 +611,23 @@ class TestRoo < Test::Unit::TestCase
|
|
|
702
611
|
end
|
|
703
612
|
end
|
|
704
613
|
|
|
614
|
+
def test_find_by_row_if_header_line_is_not_nil
|
|
615
|
+
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
616
|
+
oo.header_line = 2
|
|
617
|
+
refute_nil oo.header_line
|
|
618
|
+
rec = oo.find 1
|
|
619
|
+
assert rec
|
|
620
|
+
assert_equal 5, rec[0]
|
|
621
|
+
assert_equal 6, rec[1]
|
|
622
|
+
rec = oo.find 15
|
|
623
|
+
assert rec
|
|
624
|
+
assert_equal "einundvierzig", rec[0]
|
|
625
|
+
end
|
|
626
|
+
end
|
|
627
|
+
|
|
705
628
|
def test_find_by_conditions
|
|
706
629
|
if LONG_RUN
|
|
707
630
|
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice,
|
|
708
|
-
:excel,
|
|
709
631
|
:excelx]) do |oo|
|
|
710
632
|
#-----------------------------------------------------------------
|
|
711
633
|
zeilen = oo.find(:all, :conditions => {
|
|
@@ -817,7 +739,6 @@ class TestRoo < Test::Unit::TestCase
|
|
|
817
739
|
def test_column_huge_document
|
|
818
740
|
if LONG_RUN
|
|
819
741
|
with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice,
|
|
820
|
-
:excel,
|
|
821
742
|
:excelx]) do |oo|
|
|
822
743
|
oo.default_sheet = oo.sheets.first
|
|
823
744
|
assert_equal 3735, oo.column('a').size
|
|
@@ -835,67 +756,17 @@ class TestRoo < Test::Unit::TestCase
|
|
|
835
756
|
assert_equal 10.75 , erg[1]['Start time']
|
|
836
757
|
assert_equal 12.50 , erg[1]['End time']
|
|
837
758
|
assert_equal 0 , erg[1]['Pause']
|
|
838
|
-
assert_equal 1.75 , erg[1]['Sum']
|
|
759
|
+
assert_equal 1.75 , erg[1]['Sum']
|
|
839
760
|
assert_equal "Task 1" , erg[1]['Comment']
|
|
840
761
|
end
|
|
841
762
|
end
|
|
842
763
|
|
|
843
|
-
# Ruby-spreadsheet now allows us to at least give the current value
|
|
844
|
-
# from a cell with a formula (no possible with parseexcel)
|
|
845
|
-
def test_bug_false_borders_with_formulas
|
|
846
|
-
with_each_spreadsheet(:name=>'false_encoding', :format=>:excel) do |oo|
|
|
847
|
-
assert_equal 1, oo.first_row
|
|
848
|
-
assert_equal 3, oo.last_row
|
|
849
|
-
assert_equal 1, oo.first_column
|
|
850
|
-
assert_equal 4, oo.last_column
|
|
851
|
-
end
|
|
852
|
-
end
|
|
853
|
-
|
|
854
|
-
# We'ce added minimal formula support so we can now read these
|
|
855
|
-
# though not sure how the spreadsheet reports older values....
|
|
856
|
-
def test_fe
|
|
857
|
-
with_each_spreadsheet(:name=>'false_encoding', :format=>:excel) do |oo|
|
|
858
|
-
assert_equal Date.new(2007,11,1), oo.cell('a',1)
|
|
859
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal true, oo.formula?('a',1)
|
|
860
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal '=TODAY()', oo.formula('a',1)
|
|
861
|
-
|
|
862
|
-
assert_equal Date.new(2008,2,9), oo.cell('B',1)
|
|
863
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal true, oo.formula?('B',1)
|
|
864
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal "=A1+100", oo.formula('B',1)
|
|
865
|
-
|
|
866
|
-
assert_kind_of DateTime, oo.cell('C',1)
|
|
867
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal true, oo.formula?('C',1)
|
|
868
|
-
#DOES NOT WORK IN EXCEL FILES: assert_equal "=C1", oo.formula('C',1)
|
|
869
|
-
|
|
870
|
-
assert_equal 'H1', oo.cell('A',2)
|
|
871
|
-
assert_equal 'H2', oo.cell('B',2)
|
|
872
|
-
assert_equal 'H3', oo.cell('C',2)
|
|
873
|
-
assert_equal 'H4', oo.cell('D',2)
|
|
874
|
-
assert_equal 'R1', oo.cell('A',3)
|
|
875
|
-
assert_equal 'R2', oo.cell('B',3)
|
|
876
|
-
assert_equal 'R3', oo.cell('C',3)
|
|
877
|
-
assert_equal 'R4', oo.cell('D',3)
|
|
878
|
-
end
|
|
879
|
-
end
|
|
880
|
-
|
|
881
|
-
def test_excel_does_not_support_formulas
|
|
882
|
-
with_each_spreadsheet(:name=>'false_encoding', :format=>:excel) do |oo|
|
|
883
|
-
assert_raise(NotImplementedError) { oo.formula('a',1) }
|
|
884
|
-
assert_raise(NotImplementedError) { oo.formula?('a',1) }
|
|
885
|
-
assert_raise(NotImplementedError) { oo.formulas(oo.sheets.first) }
|
|
886
|
-
end
|
|
887
|
-
end
|
|
888
|
-
|
|
889
764
|
def get_extension(oo)
|
|
890
765
|
case oo
|
|
891
766
|
when Roo::OpenOffice
|
|
892
767
|
".ods"
|
|
893
|
-
when Roo::Excel
|
|
894
|
-
".xls"
|
|
895
768
|
when Roo::Excelx
|
|
896
769
|
".xlsx"
|
|
897
|
-
when Roo::Google
|
|
898
|
-
""
|
|
899
770
|
end
|
|
900
771
|
end
|
|
901
772
|
|
|
@@ -951,109 +822,21 @@ class TestRoo < Test::Unit::TestCase
|
|
|
951
822
|
end
|
|
952
823
|
end
|
|
953
824
|
|
|
954
|
-
def test_bug_excel_numbers1_sheet5_last_row
|
|
955
|
-
with_each_spreadsheet(:name=>'numbers1', :format=>:excel) do |oo|
|
|
956
|
-
oo.default_sheet = "Tabelle1"
|
|
957
|
-
assert_equal 1, oo.first_row
|
|
958
|
-
assert_equal 18, oo.last_row
|
|
959
|
-
assert_equal Roo::OpenOffice.letter_to_number('A'), oo.first_column
|
|
960
|
-
assert_equal Roo::OpenOffice.letter_to_number('G'), oo.last_column
|
|
961
|
-
oo.default_sheet = "Name of Sheet 2"
|
|
962
|
-
assert_equal 5, oo.first_row
|
|
963
|
-
assert_equal 14, oo.last_row
|
|
964
|
-
assert_equal Roo::OpenOffice.letter_to_number('B'), oo.first_column
|
|
965
|
-
assert_equal Roo::OpenOffice.letter_to_number('E'), oo.last_column
|
|
966
|
-
oo.default_sheet = "Sheet3"
|
|
967
|
-
assert_equal 1, oo.first_row
|
|
968
|
-
assert_equal 1, oo.last_row
|
|
969
|
-
assert_equal Roo::OpenOffice.letter_to_number('A'), oo.first_column
|
|
970
|
-
assert_equal Roo::OpenOffice.letter_to_number('BA'), oo.last_column
|
|
971
|
-
oo.default_sheet = "Sheet4"
|
|
972
|
-
assert_equal 1, oo.first_row
|
|
973
|
-
assert_equal 1, oo.last_row
|
|
974
|
-
assert_equal Roo::OpenOffice.letter_to_number('A'), oo.first_column
|
|
975
|
-
assert_equal Roo::OpenOffice.letter_to_number('E'), oo.last_column
|
|
976
|
-
oo.default_sheet = "Sheet5"
|
|
977
|
-
assert_equal 1, oo.first_row
|
|
978
|
-
assert_equal 6, oo.last_row
|
|
979
|
-
assert_equal Roo::OpenOffice.letter_to_number('A'), oo.first_column
|
|
980
|
-
assert_equal Roo::OpenOffice.letter_to_number('E'), oo.last_column
|
|
981
|
-
end
|
|
982
|
-
end
|
|
983
|
-
|
|
984
825
|
def test_should_raise_file_not_found_error
|
|
985
826
|
if OPENOFFICE
|
|
986
|
-
|
|
827
|
+
assert_raises(IOError) {
|
|
987
828
|
Roo::OpenOffice.new(File.join('testnichtvorhanden','Bibelbund.ods'))
|
|
988
829
|
}
|
|
989
830
|
end
|
|
990
|
-
if EXCEL
|
|
991
|
-
assert_raise(IOError) {
|
|
992
|
-
Roo::Excel.new(File.join('testnichtvorhanden','Bibelbund.xls'))
|
|
993
|
-
}
|
|
994
|
-
end
|
|
995
831
|
if EXCELX
|
|
996
|
-
|
|
832
|
+
assert_raises(IOError) {
|
|
997
833
|
Roo::Excelx.new(File.join('testnichtvorhanden','Bibelbund.xlsx'))
|
|
998
834
|
}
|
|
999
835
|
end
|
|
1000
|
-
if GOOGLE
|
|
1001
|
-
# assert_raise(Net::HTTPServerException) {
|
|
1002
|
-
# Google.new(key_of('testnichtvorhanden'+'Bibelbund.ods'))
|
|
1003
|
-
# Google.new('testnichtvorhanden')
|
|
1004
|
-
# }
|
|
1005
|
-
end
|
|
1006
|
-
end
|
|
1007
|
-
|
|
1008
|
-
def test_write_google
|
|
1009
|
-
# write.me: http://spreadsheets.google.com/ccc?key=ptu6bbahNZpY0N0RrxQbWdw&hl=en_GB
|
|
1010
|
-
with_each_spreadsheet(:name=>'write.me', :format=>:google) do |oo|
|
|
1011
|
-
oo.default_sheet = oo.sheets.first
|
|
1012
|
-
oo.set(1,1,"hello from the tests")
|
|
1013
|
-
assert_equal "hello from the tests", oo.cell(1,1)
|
|
1014
|
-
oo.set(1,1, 1.0)
|
|
1015
|
-
assert_equal 1.0, oo.cell(1,1)
|
|
1016
|
-
end
|
|
1017
|
-
end
|
|
1018
|
-
|
|
1019
|
-
def test_bug_set_with_more_than_one_sheet_google
|
|
1020
|
-
# write.me: http://spreadsheets.google.com/ccc?key=ptu6bbahNZpY0N0RrxQbWdw&hl=en_GB
|
|
1021
|
-
with_each_spreadsheet(:name=>'write.me', :format=>:google) do |oo|
|
|
1022
|
-
content1 = 'AAA'
|
|
1023
|
-
content2 = 'BBB'
|
|
1024
|
-
oo.default_sheet = oo.sheets.first
|
|
1025
|
-
oo.set(1,1,content1)
|
|
1026
|
-
oo.default_sheet = oo.sheets[1]
|
|
1027
|
-
oo.set(1,1,content2) # in the second sheet
|
|
1028
|
-
oo.default_sheet = oo.sheets.first
|
|
1029
|
-
assert_equal content1, oo.cell(1,1)
|
|
1030
|
-
oo.default_sheet = oo.sheets[1]
|
|
1031
|
-
assert_equal content2, oo.cell(1,1)
|
|
1032
|
-
end
|
|
1033
|
-
end
|
|
1034
|
-
|
|
1035
|
-
def test_set_with_sheet_argument_google
|
|
1036
|
-
with_each_spreadsheet(:name=>'write.me', :format=>:google) do |oo|
|
|
1037
|
-
random_row = rand(10)+1
|
|
1038
|
-
random_column = rand(10)+1
|
|
1039
|
-
content1 = 'ABC'
|
|
1040
|
-
content2 = 'DEF'
|
|
1041
|
-
oo.set(random_row,random_column,content1,oo.sheets.first)
|
|
1042
|
-
oo.set(random_row,random_column,content2,oo.sheets[1])
|
|
1043
|
-
assert_equal content1, oo.cell(random_row,random_column,oo.sheets.first)
|
|
1044
|
-
assert_equal content2, oo.cell(random_row,random_column,oo.sheets[1])
|
|
1045
|
-
end
|
|
1046
|
-
end
|
|
1047
|
-
|
|
1048
|
-
def test_set_for_non_existing_sheet_google
|
|
1049
|
-
with_each_spreadsheet(:name=>'ptu6bbahNZpY0N0RrxQbWdw', :format=>:google) do |oo|
|
|
1050
|
-
assert_raise(RangeError) { oo.set(1,1,"dummy","no_sheet") }
|
|
1051
|
-
end
|
|
1052
836
|
end
|
|
1053
837
|
|
|
1054
838
|
def test_bug_bbu
|
|
1055
|
-
with_each_spreadsheet(:name=>'bbu', :format=>[:openoffice, :excelx
|
|
1056
|
-
assert_nothing_raised() {
|
|
839
|
+
with_each_spreadsheet(:name=>'bbu', :format=>[:openoffice, :excelx]) do |oo|
|
|
1057
840
|
assert_equal "File: bbu#{get_extension(oo)}
|
|
1058
841
|
Number of sheets: 3
|
|
1059
842
|
Sheets: 2007_12, Tabelle2, Tabelle3
|
|
@@ -1066,7 +849,6 @@ Sheet 2:
|
|
|
1066
849
|
- empty -
|
|
1067
850
|
Sheet 3:
|
|
1068
851
|
- empty -", oo.info
|
|
1069
|
-
}
|
|
1070
852
|
|
|
1071
853
|
oo.default_sheet = oo.sheets[1] # empty sheet
|
|
1072
854
|
assert_nil oo.first_row
|
|
@@ -1113,7 +895,18 @@ Sheet 3:
|
|
|
1113
895
|
end
|
|
1114
896
|
end
|
|
1115
897
|
end
|
|
1116
|
-
|
|
898
|
+
def test_link_to_csv
|
|
899
|
+
with_each_spreadsheet(:name=>'link',:format=>:excelx) do |oo|
|
|
900
|
+
Dir.mktmpdir do |tempdir|
|
|
901
|
+
csv_output = File.join(tempdir,'link.csv')
|
|
902
|
+
assert oo.to_csv(csv_output)
|
|
903
|
+
assert File.exists?(csv_output)
|
|
904
|
+
assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/link.csv #{csv_output}`
|
|
905
|
+
# --strip-trailing-cr is needed because the test-file use 0A and
|
|
906
|
+
# the test on an windows box generates 0D 0A as line endings
|
|
907
|
+
end
|
|
908
|
+
end
|
|
909
|
+
end
|
|
1117
910
|
def test_date_time_yaml
|
|
1118
911
|
with_each_spreadsheet(:name=>'time-test') do |oo|
|
|
1119
912
|
expected =
|
|
@@ -1143,7 +936,8 @@ Sheet 3:
|
|
|
1143
936
|
|
|
1144
937
|
def test_to_xml
|
|
1145
938
|
with_each_spreadsheet(:name=>'numbers1', :encoding => 'utf8') do |oo|
|
|
1146
|
-
|
|
939
|
+
skip if defined? JRUBY_VERSION
|
|
940
|
+
oo.to_xml
|
|
1147
941
|
sheetname = oo.sheets.first
|
|
1148
942
|
doc = Nokogiri::XML(oo.to_xml)
|
|
1149
943
|
sheet_count = 0
|
|
@@ -1177,15 +971,6 @@ Sheet 3:
|
|
|
1177
971
|
end
|
|
1178
972
|
end
|
|
1179
973
|
|
|
1180
|
-
def test_bug_row_column_fixnum_float
|
|
1181
|
-
with_each_spreadsheet(:name=>'bug-row-column-fixnum-float', :format=>:excel) do |oo|
|
|
1182
|
-
assert_equal 42.5, oo.cell('b',2)
|
|
1183
|
-
assert_equal 43 , oo.cell('c',2)
|
|
1184
|
-
assert_equal ['hij',42.5, 43], oo.row(2)
|
|
1185
|
-
assert_equal ['def',42.5, 'nop'], oo.column(2)
|
|
1186
|
-
end
|
|
1187
|
-
end
|
|
1188
|
-
|
|
1189
974
|
def test_file_warning_default
|
|
1190
975
|
if OPENOFFICE
|
|
1191
976
|
assert_raises(TypeError, "test/files/numbers1.xls is not an openoffice spreadsheet") {
|
|
@@ -1193,10 +978,6 @@ Sheet 3:
|
|
|
1193
978
|
}
|
|
1194
979
|
assert_raises(TypeError) { Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx")) }
|
|
1195
980
|
end
|
|
1196
|
-
if EXCEL
|
|
1197
|
-
assert_raises(TypeError) { Roo::Excel.new(File.join(TESTDIR,"numbers1.ods")) }
|
|
1198
|
-
assert_raises(TypeError) { Roo::Excel.new(File.join(TESTDIR,"numbers1.xlsx")) }
|
|
1199
|
-
end
|
|
1200
981
|
if EXCELX
|
|
1201
982
|
assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods")) }
|
|
1202
983
|
assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR,"numbers1.xls")) }
|
|
@@ -1205,54 +986,45 @@ Sheet 3:
|
|
|
1205
986
|
|
|
1206
987
|
def test_file_warning_error
|
|
1207
988
|
if OPENOFFICE
|
|
1208
|
-
assert_raises(TypeError) {
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
989
|
+
assert_raises(TypeError) {
|
|
990
|
+
Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xls"),
|
|
991
|
+
packed: false,
|
|
992
|
+
file_warning: :error
|
|
993
|
+
)
|
|
994
|
+
}
|
|
995
|
+
assert_raises(TypeError) {
|
|
996
|
+
Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx"),
|
|
997
|
+
packed: false,
|
|
998
|
+
file_warning: :error)
|
|
999
|
+
}
|
|
1214
1000
|
end
|
|
1215
1001
|
if EXCELX
|
|
1216
|
-
assert_raises(TypeError) {
|
|
1217
|
-
|
|
1002
|
+
assert_raises(TypeError) {
|
|
1003
|
+
Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods"),
|
|
1004
|
+
packed: false,
|
|
1005
|
+
file_warning: :error)
|
|
1006
|
+
}
|
|
1007
|
+
assert_raises(TypeError) {
|
|
1008
|
+
Roo::Excelx.new(File.join(TESTDIR,"numbers1.xls"),
|
|
1009
|
+
packed: false,
|
|
1010
|
+
file_warning: :error)
|
|
1011
|
+
}
|
|
1218
1012
|
end
|
|
1219
1013
|
end
|
|
1220
1014
|
|
|
1221
1015
|
def test_file_warning_warning
|
|
1222
1016
|
if OPENOFFICE
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
}
|
|
1228
|
-
assert_nothing_raised(TypeError) {
|
|
1229
|
-
assert_raises(Errno::ENOENT) {
|
|
1230
|
-
Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx"),false, :warning)
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1233
|
-
end
|
|
1234
|
-
if EXCEL
|
|
1235
|
-
assert_nothing_raised(TypeError) {
|
|
1236
|
-
assert_raises(Ole::Storage::FormatError) {
|
|
1237
|
-
Roo::Excel.new(File.join(TESTDIR,"numbers1.ods"),false, :warning)
|
|
1238
|
-
}
|
|
1239
|
-
}
|
|
1240
|
-
assert_nothing_raised(TypeError) {
|
|
1241
|
-
assert_raises(Ole::Storage::FormatError) {
|
|
1242
|
-
Roo::Excel.new(File.join(TESTDIR,"numbers1.xlsx"),false, :warning)
|
|
1243
|
-
}
|
|
1017
|
+
assert_raises(ArgumentError) {
|
|
1018
|
+
Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx"),
|
|
1019
|
+
packed: false,
|
|
1020
|
+
file_warning: :warning)
|
|
1244
1021
|
}
|
|
1245
1022
|
end
|
|
1246
1023
|
if EXCELX
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
}
|
|
1252
|
-
assert_nothing_raised(TypeError) {
|
|
1253
|
-
assert_raises(Zip::ZipError) {
|
|
1254
|
-
Roo::Excelx.new(File.join(TESTDIR,"numbers1.xls"),false, :warning)
|
|
1255
|
-
}
|
|
1024
|
+
assert_raises(ArgumentError) {
|
|
1025
|
+
Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods"),
|
|
1026
|
+
packed: false,
|
|
1027
|
+
file_warning: :warning)
|
|
1256
1028
|
}
|
|
1257
1029
|
end
|
|
1258
1030
|
end
|
|
@@ -1264,41 +1036,20 @@ Sheet 3:
|
|
|
1264
1036
|
# Es soll ohne Fehlermeldung oder Warnung
|
|
1265
1037
|
# oder Abbruch die Datei geoffnet werden
|
|
1266
1038
|
|
|
1267
|
-
# xls
|
|
1268
|
-
assert_nothing_raised() {
|
|
1269
|
-
Roo::OpenOffice.new(File.join(TESTDIR,"type_openoffice.xls"),false, :ignore)
|
|
1270
|
-
}
|
|
1271
1039
|
# xlsx
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
end
|
|
1276
|
-
if EXCEL
|
|
1277
|
-
assert_nothing_raised() {
|
|
1278
|
-
Roo::Excel.new(File.join(TESTDIR,"type_excel.ods"),false, :ignore)
|
|
1279
|
-
}
|
|
1280
|
-
assert_nothing_raised() {
|
|
1281
|
-
Roo::Excel.new(File.join(TESTDIR,"type_excel.xlsx"),false, :ignore)
|
|
1282
|
-
}
|
|
1040
|
+
Roo::OpenOffice.new(File.join(TESTDIR,"type_openoffice.xlsx"),
|
|
1041
|
+
packed: false,
|
|
1042
|
+
file_warning: :ignore)
|
|
1283
1043
|
end
|
|
1284
1044
|
if EXCELX
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
assert_nothing_raised() {
|
|
1289
|
-
Roo::Excelx.new(File.join(TESTDIR,"type_excelx.xls"),false, :ignore)
|
|
1290
|
-
}
|
|
1291
|
-
end
|
|
1292
|
-
end
|
|
1293
|
-
|
|
1294
|
-
def test_bug_last_row_excel
|
|
1295
|
-
with_each_spreadsheet(:name=>'time-test', :format=>:excel) do |oo|
|
|
1296
|
-
assert_equal 2, oo.last_row
|
|
1045
|
+
Roo::Excelx.new(File.join(TESTDIR,"type_excelx.ods"),
|
|
1046
|
+
packed: false,
|
|
1047
|
+
file_warning: :ignore)
|
|
1297
1048
|
end
|
|
1298
1049
|
end
|
|
1299
1050
|
|
|
1300
1051
|
def test_bug_to_xml_with_empty_sheets
|
|
1301
|
-
with_each_spreadsheet(:name=>'emptysheets', :format=>[:openoffice, :
|
|
1052
|
+
with_each_spreadsheet(:name=>'emptysheets', :format=>[:openoffice, :excelx]) do |oo|
|
|
1302
1053
|
oo.sheets.each { |sheet|
|
|
1303
1054
|
assert_equal nil, oo.first_row, "first_row not nil in sheet #{sheet}"
|
|
1304
1055
|
assert_equal nil, oo.last_row, "last_row not nil in sheet #{sheet}"
|
|
@@ -1309,7 +1060,7 @@ Sheet 3:
|
|
|
1309
1060
|
assert_equal nil, oo.first_column(sheet), "first_column not nil in sheet #{sheet}"
|
|
1310
1061
|
assert_equal nil, oo.last_column(sheet), "last_column not nil in sheet #{sheet}"
|
|
1311
1062
|
}
|
|
1312
|
-
|
|
1063
|
+
oo.to_xml
|
|
1313
1064
|
end
|
|
1314
1065
|
end
|
|
1315
1066
|
|
|
@@ -1364,12 +1115,12 @@ Sheet 3:
|
|
|
1364
1115
|
def test_datetime
|
|
1365
1116
|
with_each_spreadsheet(:name=>'datetime') do |oo|
|
|
1366
1117
|
val = oo.cell('c',3)
|
|
1367
|
-
assert_kind_of DateTime, val
|
|
1368
1118
|
assert_equal :datetime, oo.celltype('c',3)
|
|
1369
1119
|
assert_equal DateTime.new(1961,11,21,12,17,18), val
|
|
1120
|
+
assert_kind_of DateTime, val
|
|
1370
1121
|
val = oo.cell('a',1)
|
|
1371
|
-
assert_kind_of Date, val
|
|
1372
1122
|
assert_equal :date, oo.celltype('a',1)
|
|
1123
|
+
assert_kind_of Date, val
|
|
1373
1124
|
assert_equal Date.new(1961,11,21), val
|
|
1374
1125
|
assert_equal Date.new(1961,11,21), oo.cell('a',1)
|
|
1375
1126
|
assert_equal DateTime.new(1961,11,21,12,17,18), oo.cell('a',3)
|
|
@@ -1387,6 +1138,9 @@ Sheet 3:
|
|
|
1387
1138
|
assert_equal Date.new(1961,11,21), oo.cell('a',7)
|
|
1388
1139
|
assert_equal Date.new(1961,11,21), oo.cell('b',7)
|
|
1389
1140
|
assert_equal Date.new(1961,11,21), oo.cell('c',7)
|
|
1141
|
+
assert_equal DateTime.new(2013,11,5,11,45,00), oo.cell('a',8)
|
|
1142
|
+
assert_equal DateTime.new(2013,11,5,11,45,00), oo.cell('b',8)
|
|
1143
|
+
assert_equal DateTime.new(2013,11,5,11,45,00), oo.cell('c',8)
|
|
1390
1144
|
end
|
|
1391
1145
|
end
|
|
1392
1146
|
|
|
@@ -1402,7 +1156,7 @@ Sheet 3:
|
|
|
1402
1156
|
end
|
|
1403
1157
|
|
|
1404
1158
|
def test_cell_boolean
|
|
1405
|
-
with_each_spreadsheet(:name=>'boolean', :format=>[:openoffice, :
|
|
1159
|
+
with_each_spreadsheet(:name=>'boolean', :format=>[:openoffice, :excelx]) do |oo|
|
|
1406
1160
|
if oo.class == Roo::Excelx
|
|
1407
1161
|
assert_equal "TRUE", oo.cell(1,1), "failure in "+oo.class.to_s
|
|
1408
1162
|
assert_equal "FALSE", oo.cell(2,1), "failure in "+oo.class.to_s
|
|
@@ -1414,7 +1168,7 @@ Sheet 3:
|
|
|
1414
1168
|
end
|
|
1415
1169
|
|
|
1416
1170
|
def test_cell_multiline
|
|
1417
|
-
with_each_spreadsheet(:name=>'paragraph', :format=>[:openoffice, :
|
|
1171
|
+
with_each_spreadsheet(:name=>'paragraph', :format=>[:openoffice, :excelx]) do |oo|
|
|
1418
1172
|
assert_equal "This is a test\nof a multiline\nCell", oo.cell(1,1)
|
|
1419
1173
|
assert_equal "This is a test\n¶\nof a multiline\n\nCell", oo.cell(1,2)
|
|
1420
1174
|
assert_equal "first p\n\nsecond p\n\nlast p", oo.cell(2,1)
|
|
@@ -1425,8 +1179,7 @@ Sheet 3:
|
|
|
1425
1179
|
# styles only valid in excel spreadsheets?
|
|
1426
1180
|
# TODO: what todo with other spreadsheet types
|
|
1427
1181
|
with_each_spreadsheet(:name=>'style', :format=>[# :openoffice,
|
|
1428
|
-
:
|
|
1429
|
-
# :excelx
|
|
1182
|
+
:excelx
|
|
1430
1183
|
]) do |oo|
|
|
1431
1184
|
# bold
|
|
1432
1185
|
assert_equal true, oo.font(1,1).bold?
|
|
@@ -1485,18 +1238,6 @@ Sheet 3:
|
|
|
1485
1238
|
end
|
|
1486
1239
|
end
|
|
1487
1240
|
|
|
1488
|
-
# If a cell has a date-like string but is preceeded by a '
|
|
1489
|
-
# to force that date to be treated like a string, we were getting an exception.
|
|
1490
|
-
# This test just checks for that exception to make sure it's not raised in this case
|
|
1491
|
-
def test_date_to_float_conversion
|
|
1492
|
-
with_each_spreadsheet(:name=>'datetime_floatconv', :format=>:excel) do |oo|
|
|
1493
|
-
assert_nothing_raised(NoMethodError) do
|
|
1494
|
-
oo.cell('a',1)
|
|
1495
|
-
oo.cell('a',2)
|
|
1496
|
-
end
|
|
1497
|
-
end
|
|
1498
|
-
end
|
|
1499
|
-
|
|
1500
1241
|
# Need to extend to other formats
|
|
1501
1242
|
def test_row_whitespace
|
|
1502
1243
|
# auf dieses Dokument habe ich keinen Zugriff TODO:
|
|
@@ -1535,45 +1276,10 @@ Sheet 3:
|
|
|
1535
1276
|
end
|
|
1536
1277
|
end
|
|
1537
1278
|
|
|
1538
|
-
def test_ruby_spreadsheet_formula_bug
|
|
1539
|
-
with_each_spreadsheet(:name=>'formula_parse_error', :format=>:excel) do |oo|
|
|
1540
|
-
assert_equal '5026', oo.cell(2,3)
|
|
1541
|
-
assert_equal '5026', oo.cell(3,3)
|
|
1542
|
-
end
|
|
1543
|
-
end
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
def test_excel_links
|
|
1547
|
-
with_each_spreadsheet(:name=>'link', :format=>:excel) do |oo|
|
|
1548
|
-
assert_equal 'Google', oo.cell(1,1)
|
|
1549
|
-
assert_equal 'http://www.google.com', oo.cell(1,1).url
|
|
1550
|
-
end
|
|
1551
|
-
end
|
|
1552
|
-
|
|
1553
1279
|
def test_excelx_links
|
|
1554
1280
|
with_each_spreadsheet(:name=>'link', :format=>:excelx) do |oo|
|
|
1555
1281
|
assert_equal 'Google', oo.cell(1,1)
|
|
1556
|
-
assert_equal 'http://www.google.com', oo.cell(1,1).
|
|
1557
|
-
end
|
|
1558
|
-
end
|
|
1559
|
-
|
|
1560
|
-
# Excel has two base date formats one from 1900 and the other from 1904.
|
|
1561
|
-
# There's a MS bug that 1900 base dates include an extra day due to erroneously
|
|
1562
|
-
# including 1900 as a leap yar.
|
|
1563
|
-
def test_base_dates_in_excel
|
|
1564
|
-
with_each_spreadsheet(:name=>'1900_base', :format=>:excel) do |oo|
|
|
1565
|
-
assert_equal Date.new(2009,06,15), oo.cell(1,1)
|
|
1566
|
-
#we don't want to to 'interpret' formulas assert_equal Date.new(Time.now.year,Time.now.month,Time.now.day), oo.cell(2,1) #formula for TODAY()
|
|
1567
|
-
# if we test TODAY() we have also have to calculate
|
|
1568
|
-
# other date calculations
|
|
1569
|
-
#
|
|
1570
|
-
assert_equal :date, oo.celltype(1,1)
|
|
1571
|
-
end
|
|
1572
|
-
with_each_spreadsheet(:name=>'1904_base', :format=>:excel) do |oo|
|
|
1573
|
-
assert_equal Date.new(2009,06,15), oo.cell(1,1)
|
|
1574
|
-
# see comment above
|
|
1575
|
-
# assert_equal Date.new(Time.now.year,Time.now.month,Time.now.day), oo.cell(2,1) #formula for TODAY()
|
|
1576
|
-
assert_equal :date, oo.celltype(1,1)
|
|
1282
|
+
assert_equal 'http://www.google.com', oo.cell(1,1).href
|
|
1577
1283
|
end
|
|
1578
1284
|
end
|
|
1579
1285
|
|
|
@@ -1590,22 +1296,6 @@ Sheet 3:
|
|
|
1590
1296
|
end
|
|
1591
1297
|
end
|
|
1592
1298
|
|
|
1593
|
-
def test_bad_date
|
|
1594
|
-
with_each_spreadsheet(:name=>'prova', :format=>:excel) do |oo|
|
|
1595
|
-
assert_nothing_raised(ArgumentError) {
|
|
1596
|
-
assert_equal DateTime.new(2006,2,2,10,0,0), oo.cell('a',1)
|
|
1597
|
-
}
|
|
1598
|
-
end
|
|
1599
|
-
end
|
|
1600
|
-
|
|
1601
|
-
def test_bad_excel_date
|
|
1602
|
-
with_each_spreadsheet(:name=>'bad_excel_date', :format=>:excel) do |oo|
|
|
1603
|
-
assert_nothing_raised(ArgumentError) {
|
|
1604
|
-
assert_equal DateTime.new(2006,2,2,10,0,0), oo.cell('a',1)
|
|
1605
|
-
}
|
|
1606
|
-
end
|
|
1607
|
-
end
|
|
1608
|
-
|
|
1609
1299
|
def test_cell_methods
|
|
1610
1300
|
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
1611
1301
|
assert_equal 10, oo.a4 # cell(4,'A')
|
|
@@ -1747,7 +1437,7 @@ Sheet 3:
|
|
|
1747
1437
|
|
|
1748
1438
|
require 'matrix'
|
|
1749
1439
|
def test_matrix
|
|
1750
|
-
with_each_spreadsheet(:name => 'matrix', :format =>
|
|
1440
|
+
with_each_spreadsheet(:name => 'matrix', :format => :openoffice) do |oo|
|
|
1751
1441
|
oo.default_sheet = oo.sheets.first
|
|
1752
1442
|
assert_equal Matrix[
|
|
1753
1443
|
[1.0, 2.0, 3.0],
|
|
@@ -1757,7 +1447,7 @@ Sheet 3:
|
|
|
1757
1447
|
end
|
|
1758
1448
|
|
|
1759
1449
|
def test_matrix_selected_range
|
|
1760
|
-
with_each_spreadsheet(:name => 'matrix', :format
|
|
1450
|
+
with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
|
|
1761
1451
|
oo.default_sheet = 'Sheet2'
|
|
1762
1452
|
assert_equal Matrix[
|
|
1763
1453
|
[1.0, 2.0, 3.0],
|
|
@@ -1767,7 +1457,7 @@ Sheet 3:
|
|
|
1767
1457
|
end
|
|
1768
1458
|
|
|
1769
1459
|
def test_matrix_all_nil
|
|
1770
|
-
with_each_spreadsheet(:name => 'matrix', :format
|
|
1460
|
+
with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
|
|
1771
1461
|
oo.default_sheet = 'Sheet2'
|
|
1772
1462
|
assert_equal Matrix[
|
|
1773
1463
|
[nil, nil, nil],
|
|
@@ -1777,7 +1467,7 @@ Sheet 3:
|
|
|
1777
1467
|
end
|
|
1778
1468
|
|
|
1779
1469
|
def test_matrix_values_and_nil
|
|
1780
|
-
with_each_spreadsheet(:name => 'matrix', :format
|
|
1470
|
+
with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
|
|
1781
1471
|
oo.default_sheet = 'Sheet3'
|
|
1782
1472
|
assert_equal Matrix[
|
|
1783
1473
|
[1.0, nil, 3.0],
|
|
@@ -1787,7 +1477,7 @@ Sheet 3:
|
|
|
1787
1477
|
end
|
|
1788
1478
|
|
|
1789
1479
|
def test_matrix_specifying_sheet
|
|
1790
|
-
with_each_spreadsheet(:name => 'matrix', :format =>
|
|
1480
|
+
with_each_spreadsheet(:name => 'matrix', :format => :openoffice) do |oo|
|
|
1791
1481
|
oo.default_sheet = oo.sheets.first
|
|
1792
1482
|
assert_equal Matrix[
|
|
1793
1483
|
[1.0, nil, 3.0],
|
|
@@ -1839,11 +1529,9 @@ where the expected result is
|
|
|
1839
1529
|
# 2011-06-24
|
|
1840
1530
|
def test_bug_formulas_empty_sheet
|
|
1841
1531
|
with_each_spreadsheet(:name =>'emptysheets',
|
|
1842
|
-
:format=>[:openoffice,:excelx
|
|
1843
|
-
assert_nothing_raised(NoMethodError) {
|
|
1532
|
+
:format=>[:openoffice,:excelx]) do |oo|
|
|
1844
1533
|
oo.default_sheet = oo.sheets.first
|
|
1845
1534
|
oo.formulas
|
|
1846
|
-
}
|
|
1847
1535
|
assert_equal([], oo.formulas)
|
|
1848
1536
|
end
|
|
1849
1537
|
end
|
|
@@ -1853,11 +1541,9 @@ where the expected result is
|
|
|
1853
1541
|
# 2011-06-24
|
|
1854
1542
|
def test_bug_to_yaml_empty_sheet
|
|
1855
1543
|
with_each_spreadsheet(:name =>'emptysheets',
|
|
1856
|
-
:format=>[:openoffice,:excelx
|
|
1857
|
-
assert_nothing_raised(NoMethodError) {
|
|
1544
|
+
:format=>[:openoffice,:excelx]) do |oo|
|
|
1858
1545
|
oo.default_sheet = oo.sheets.first
|
|
1859
1546
|
oo.to_yaml
|
|
1860
|
-
}
|
|
1861
1547
|
assert_equal('', oo.to_yaml)
|
|
1862
1548
|
end
|
|
1863
1549
|
end
|
|
@@ -1867,11 +1553,9 @@ where the expected result is
|
|
|
1867
1553
|
# 2011-06-25
|
|
1868
1554
|
def test_bug_to_matrix_empty_sheet
|
|
1869
1555
|
with_each_spreadsheet(:name =>'emptysheets',
|
|
1870
|
-
:format=>[:openoffice,:excelx
|
|
1871
|
-
assert_nothing_raised(NoMethodError) {
|
|
1556
|
+
:format=>[:openoffice,:excelx]) do |oo|
|
|
1872
1557
|
oo.default_sheet = oo.sheets.first
|
|
1873
1558
|
oo.to_matrix
|
|
1874
|
-
}
|
|
1875
1559
|
assert_equal(Matrix.empty(0,0), oo.to_matrix)
|
|
1876
1560
|
end
|
|
1877
1561
|
end
|
|
@@ -1963,6 +1647,7 @@ where the expected result is
|
|
|
1963
1647
|
end
|
|
1964
1648
|
|
|
1965
1649
|
def test_bug_pfand_from_windows_phone_xlsx
|
|
1650
|
+
return if defined? JRUBY_VERSION
|
|
1966
1651
|
with_each_spreadsheet(:name=>'Pfand_from_windows_phone', :format=>:excelx) do |oo|
|
|
1967
1652
|
oo.default_sheet = oo.sheets.first
|
|
1968
1653
|
assert_equal ['Blatt1','Blatt2','Blatt3'], oo.sheets
|
|
@@ -1992,15 +1677,6 @@ where the expected result is
|
|
|
1992
1677
|
end
|
|
1993
1678
|
end
|
|
1994
1679
|
|
|
1995
|
-
def test_comment?
|
|
1996
|
-
with_each_spreadsheet(:name=>'comments', :format=>[:openoffice,:libreoffice,
|
|
1997
|
-
:excelx]) do |oo|
|
|
1998
|
-
oo.default_sheet = oo.sheets.first
|
|
1999
|
-
assert_equal true, oo.comment?('b',4)
|
|
2000
|
-
assert_equal false, oo.comment?('b',99)
|
|
2001
|
-
end
|
|
2002
|
-
end
|
|
2003
|
-
|
|
2004
1680
|
def test_comments
|
|
2005
1681
|
with_each_spreadsheet(:name=>'comments', :format=>[:openoffice,:libreoffice,
|
|
2006
1682
|
:excelx]) do |oo|
|
|
@@ -2013,6 +1689,11 @@ where the expected result is
|
|
|
2013
1689
|
oo.default_sheet = oo.sheets[1]
|
|
2014
1690
|
assert_equal [], oo.comments, "comments error in class #{oo.class}"
|
|
2015
1691
|
end
|
|
1692
|
+
|
|
1693
|
+
with_each_spreadsheet(:name=>'comments-google', :format=>[:excelx]) do |oo|
|
|
1694
|
+
oo.default_sheet = oo.sheets.first
|
|
1695
|
+
assert_equal [[1, 1, "this is a comment\n\t-Steven Daniels"]], oo.comments(oo.sheets.first), "comments error in class #{oo.class}"
|
|
1696
|
+
end
|
|
2016
1697
|
end
|
|
2017
1698
|
|
|
2018
1699
|
## PREVIOUSLY SKIPPED
|
|
@@ -2091,13 +1772,6 @@ where the expected result is
|
|
|
2091
1772
|
# end
|
|
2092
1773
|
# end
|
|
2093
1774
|
|
|
2094
|
-
def test_simple_google
|
|
2095
|
-
if GOOGLE
|
|
2096
|
-
go = Roo::Google.new("egal")
|
|
2097
|
-
assert_equal "42", go.cell(1,1)
|
|
2098
|
-
end
|
|
2099
|
-
end
|
|
2100
|
-
|
|
2101
1775
|
def test_download_uri
|
|
2102
1776
|
if ONLINE
|
|
2103
1777
|
if OPENOFFICE
|
|
@@ -2105,11 +1779,6 @@ where the expected result is
|
|
|
2105
1779
|
Roo::OpenOffice.new("http://gibbsnichtdomainxxxxx.com/file.ods")
|
|
2106
1780
|
}
|
|
2107
1781
|
end
|
|
2108
|
-
if EXCEL
|
|
2109
|
-
assert_raises(RuntimeError) {
|
|
2110
|
-
Roo::Excel.new("http://gibbsnichtdomainxxxxx.com/file.xls")
|
|
2111
|
-
}
|
|
2112
|
-
end
|
|
2113
1782
|
if EXCELX
|
|
2114
1783
|
assert_raises(RuntimeError) {
|
|
2115
1784
|
Roo::Excelx.new("http://gibbsnichtdomainxxxxx.com/file.xlsx")
|
|
@@ -2120,8 +1789,7 @@ where the expected result is
|
|
|
2120
1789
|
|
|
2121
1790
|
def test_download_uri_with_query_string
|
|
2122
1791
|
dir = File.expand_path("#{File.dirname __FILE__}/files")
|
|
2123
|
-
{
|
|
2124
|
-
xlsx: [EXCELX, Roo::Excelx],
|
|
1792
|
+
{ xlsx: [EXCELX, Roo::Excelx],
|
|
2125
1793
|
ods: [OPENOFFICE, Roo::OpenOffice]}.each do |extension, (flag, type)|
|
|
2126
1794
|
if flag
|
|
2127
1795
|
file = "#{dir}/simple_spreadsheet.#{extension}"
|
|
@@ -2285,8 +1953,136 @@ where the expected result is
|
|
|
2285
1953
|
|
|
2286
1954
|
def test_bug_numbered_sheet_names
|
|
2287
1955
|
with_each_spreadsheet(:name=>'bug-numbered-sheet-names', :format=>:excelx) do |oo|
|
|
2288
|
-
|
|
1956
|
+
oo.each_with_pagename { }
|
|
1957
|
+
end
|
|
1958
|
+
end
|
|
1959
|
+
|
|
1960
|
+
def test_parsing_xslx_from_numbers
|
|
1961
|
+
return unless EXCELX
|
|
1962
|
+
xlsx = Roo::Excelx.new(File.join(TESTDIR, "numbers-export.xlsx"))
|
|
1963
|
+
|
|
1964
|
+
xlsx.default_sheet = xlsx.sheets.first
|
|
1965
|
+
assert_equal 'Sheet 1', xlsx.cell('a',1)
|
|
1966
|
+
|
|
1967
|
+
# Another buggy behavior of Numbers 3.1: if a warkbook has more than a
|
|
1968
|
+
# single sheet, all sheets except the first one will have an extra row and
|
|
1969
|
+
# column added to the beginning. That's why we assert against cell B2 and
|
|
1970
|
+
# not A1
|
|
1971
|
+
xlsx.default_sheet = xlsx.sheets.last
|
|
1972
|
+
assert_equal 'Sheet 2', xlsx.cell('b',2)
|
|
1973
|
+
end
|
|
1974
|
+
|
|
1975
|
+
def test_openoffice_encryption
|
|
1976
|
+
if OPENOFFICE
|
|
1977
|
+
assert_raises(ArgumentError) { Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods")) }
|
|
1978
|
+
assert_raises(ArgumentError) { Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods"), :password => "badpassword") }
|
|
1979
|
+
oo = Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods"), :password => "letmein")
|
|
1980
|
+
oo.default_sheet = oo.sheets.first
|
|
1981
|
+
assert_equal "Hello World", oo.cell('a',1)
|
|
1982
|
+
end
|
|
1983
|
+
end
|
|
1984
|
+
|
|
1985
|
+
def test_expand_merged_range
|
|
1986
|
+
return unless EXCELX
|
|
1987
|
+
xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"), {:expand_merged_ranges => true})
|
|
1988
|
+
for row in 3..7 do
|
|
1989
|
+
for col in 'a'..'b'
|
|
1990
|
+
if row > 3 && row < 7 && col == 'a'
|
|
1991
|
+
assert_equal 'vertical1', xlsx.cell(col,row)
|
|
1992
|
+
else
|
|
1993
|
+
assert_nil xlsx.cell(col,row)
|
|
1994
|
+
end
|
|
1995
|
+
end
|
|
1996
|
+
end
|
|
1997
|
+
for row in 3..11 do
|
|
1998
|
+
for col in 'f'..'h'
|
|
1999
|
+
if row > 3 && row < 11 && col == 'g'
|
|
2000
|
+
assert_equal 'vertical2', xlsx.cell(col,row)
|
|
2001
|
+
else
|
|
2002
|
+
assert_nil xlsx.cell(col,row)
|
|
2003
|
+
end
|
|
2004
|
+
end
|
|
2005
|
+
end
|
|
2006
|
+
for row in 3..5 do
|
|
2007
|
+
for col in 'b'..'f'
|
|
2008
|
+
if row == 4 && col > 'b' && col < 'f'
|
|
2009
|
+
assert_equal 'horizontal', xlsx.cell(col,row)
|
|
2010
|
+
else
|
|
2011
|
+
assert_nil xlsx.cell(col,row)
|
|
2012
|
+
end
|
|
2013
|
+
end
|
|
2014
|
+
end
|
|
2015
|
+
for row in 8..13 do
|
|
2016
|
+
for col in 'a'..'e'
|
|
2017
|
+
if row > 8 && row < 13 && col > 'a' && col < 'e'
|
|
2018
|
+
assert_equal 'block', xlsx.cell(col,row)
|
|
2019
|
+
else
|
|
2020
|
+
assert_nil xlsx.cell(col,row)
|
|
2021
|
+
end
|
|
2022
|
+
end
|
|
2289
2023
|
end
|
|
2290
2024
|
end
|
|
2291
2025
|
|
|
2026
|
+
def test_noexpand_merged_range
|
|
2027
|
+
return unless EXCELX
|
|
2028
|
+
xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"))
|
|
2029
|
+
for row in 3..7 do
|
|
2030
|
+
for col in 'a'..'b'
|
|
2031
|
+
if row == 4 && col == 'a'
|
|
2032
|
+
assert_equal 'vertical1', xlsx.cell(col,row)
|
|
2033
|
+
else
|
|
2034
|
+
assert_nil xlsx.cell(col,row)
|
|
2035
|
+
end
|
|
2036
|
+
end
|
|
2037
|
+
end
|
|
2038
|
+
for row in 3..11 do
|
|
2039
|
+
for col in 'f'..'h'
|
|
2040
|
+
if row == 4 && col == 'g'
|
|
2041
|
+
assert_equal 'vertical2', xlsx.cell(col,row)
|
|
2042
|
+
else
|
|
2043
|
+
assert_nil xlsx.cell(col,row)
|
|
2044
|
+
end
|
|
2045
|
+
end
|
|
2046
|
+
end
|
|
2047
|
+
for row in 3..5 do
|
|
2048
|
+
for col in 'b'..'f'
|
|
2049
|
+
if row == 4 && col == 'c'
|
|
2050
|
+
assert_equal 'horizontal', xlsx.cell(col,row)
|
|
2051
|
+
else
|
|
2052
|
+
assert_nil xlsx.cell(col,row)
|
|
2053
|
+
end
|
|
2054
|
+
end
|
|
2055
|
+
end
|
|
2056
|
+
for row in 8..13 do
|
|
2057
|
+
for col in 'a'..'e'
|
|
2058
|
+
if row == 9 && col == 'b'
|
|
2059
|
+
assert_equal 'block', xlsx.cell(col,row)
|
|
2060
|
+
else
|
|
2061
|
+
assert_nil xlsx.cell(col,row)
|
|
2062
|
+
end
|
|
2063
|
+
end
|
|
2064
|
+
end
|
|
2065
|
+
end
|
|
2066
|
+
|
|
2067
|
+
def test_open_stream
|
|
2068
|
+
return unless EXCELX
|
|
2069
|
+
file_contents = File.read File.join(TESTDIR, fixture_filename(:numbers1, :excelx))
|
|
2070
|
+
stream = StringIO.new(file_contents)
|
|
2071
|
+
xlsx = Roo::Excelx.new(stream)
|
|
2072
|
+
assert_equal ["Tabelle1","Name of Sheet 2","Sheet3","Sheet4","Sheet5"], xlsx.sheets
|
|
2073
|
+
end
|
|
2074
|
+
|
|
2075
|
+
def test_close
|
|
2076
|
+
with_each_spreadsheet(:name=>'numbers1') do |oo|
|
|
2077
|
+
next unless (tempdir = oo.instance_variable_get('@tmpdir'))
|
|
2078
|
+
oo.close
|
|
2079
|
+
assert !File.exists?(tempdir), "Expected #{tempdir} to be cleaned up, but it still exists"
|
|
2080
|
+
end
|
|
2081
|
+
end
|
|
2082
|
+
|
|
2083
|
+
def test_cleanup_on_error
|
|
2084
|
+
old_temp_files = Dir.open(Dir.tmpdir).to_a
|
|
2085
|
+
with_each_spreadsheet(:name=>'non_existent_file', :ignore_errors=>true) do |oo|; end
|
|
2086
|
+
assert_equal Dir.open(Dir.tmpdir).to_a, old_temp_files
|
|
2087
|
+
end
|
|
2292
2088
|
end # class
|