ruby-spreadsheet 0.6.5

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.
Files changed (64) hide show
  1. data/.document +5 -0
  2. data/GUIDE.txt +267 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +20 -0
  5. data/History.txt +307 -0
  6. data/LICENSE.txt +619 -0
  7. data/README.txt +91 -0
  8. data/Rakefile +53 -0
  9. data/VERSION +1 -0
  10. data/bin/xlsopcodes +18 -0
  11. data/lib/parseexcel.rb +27 -0
  12. data/lib/parseexcel/parseexcel.rb +75 -0
  13. data/lib/parseexcel/parser.rb +11 -0
  14. data/lib/spreadsheet.rb +79 -0
  15. data/lib/spreadsheet/column.rb +71 -0
  16. data/lib/spreadsheet/compatibility.rb +23 -0
  17. data/lib/spreadsheet/datatypes.rb +110 -0
  18. data/lib/spreadsheet/encodings.rb +46 -0
  19. data/lib/spreadsheet/excel.rb +88 -0
  20. data/lib/spreadsheet/excel/error.rb +26 -0
  21. data/lib/spreadsheet/excel/internals.rb +386 -0
  22. data/lib/spreadsheet/excel/internals/biff5.rb +17 -0
  23. data/lib/spreadsheet/excel/internals/biff8.rb +19 -0
  24. data/lib/spreadsheet/excel/offset.rb +41 -0
  25. data/lib/spreadsheet/excel/reader.rb +1173 -0
  26. data/lib/spreadsheet/excel/reader/biff5.rb +22 -0
  27. data/lib/spreadsheet/excel/reader/biff8.rb +193 -0
  28. data/lib/spreadsheet/excel/row.rb +92 -0
  29. data/lib/spreadsheet/excel/sst_entry.rb +46 -0
  30. data/lib/spreadsheet/excel/workbook.rb +80 -0
  31. data/lib/spreadsheet/excel/worksheet.rb +100 -0
  32. data/lib/spreadsheet/excel/writer.rb +1 -0
  33. data/lib/spreadsheet/excel/writer/biff8.rb +75 -0
  34. data/lib/spreadsheet/excel/writer/format.rb +253 -0
  35. data/lib/spreadsheet/excel/writer/workbook.rb +652 -0
  36. data/lib/spreadsheet/excel/writer/worksheet.rb +948 -0
  37. data/lib/spreadsheet/font.rb +92 -0
  38. data/lib/spreadsheet/format.rb +177 -0
  39. data/lib/spreadsheet/formula.rb +9 -0
  40. data/lib/spreadsheet/helpers.rb +11 -0
  41. data/lib/spreadsheet/link.rb +43 -0
  42. data/lib/spreadsheet/row.rb +132 -0
  43. data/lib/spreadsheet/workbook.rb +120 -0
  44. data/lib/spreadsheet/worksheet.rb +279 -0
  45. data/lib/spreadsheet/writer.rb +30 -0
  46. data/ruby-spreadsheet.gemspec +126 -0
  47. data/test/data/test_changes.xls +0 -0
  48. data/test/data/test_copy.xls +0 -0
  49. data/test/data/test_datetime.xls +0 -0
  50. data/test/data/test_empty.xls +0 -0
  51. data/test/data/test_formula.xls +0 -0
  52. data/test/data/test_missing_row.xls +0 -0
  53. data/test/data/test_version_excel5.xls +0 -0
  54. data/test/data/test_version_excel95.xls +0 -0
  55. data/test/data/test_version_excel97.xls +0 -0
  56. data/test/excel/row.rb +35 -0
  57. data/test/excel/writer/worksheet.rb +23 -0
  58. data/test/font.rb +163 -0
  59. data/test/integration.rb +1281 -0
  60. data/test/row.rb +33 -0
  61. data/test/suite.rb +14 -0
  62. data/test/workbook.rb +21 -0
  63. data/test/worksheet.rb +80 -0
  64. metadata +203 -0
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/test/excel/row.rb ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::TestRow -- Spreadsheet -- 12.10.2008 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+ require 'spreadsheet'
8
+
9
+ module Spreadsheet
10
+ module Excel
11
+ class TestRow < Test::Unit::TestCase
12
+ def setup
13
+ @workbook = Excel::Workbook.new
14
+ @worksheet = Excel::Worksheet.new
15
+ @workbook.add_worksheet @worksheet
16
+ end
17
+ def test_date
18
+ row = Row.new @worksheet, 0, [nil, 27627.6789]
19
+ assert_equal Date.new(1975,8,21), row.date(1)
20
+ end
21
+ def test_datetime
22
+ row = Row.new @worksheet, 0, [nil, 27627.765]
23
+ d1 = DateTime.new(1975,8,21) + 0.765
24
+ d2 = row.datetime 1
25
+ assert_equal d1, d2
26
+ end
27
+ def test_datetime_overflow
28
+ row = Row.new @worksheet, 0, [nil, 40010.6666666666]
29
+ d1 = DateTime.new(2009,07,16,16)
30
+ d2 = row.datetime 1
31
+ assert_equal d1, d2
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::Writer::TestWorksheet -- Spreadheet -- 21.11.2007 -- hwyss@ywesee.com
3
+
4
+ require 'test/unit'
5
+ require 'spreadsheet/excel/writer/worksheet'
6
+
7
+ module Spreadsheet
8
+ module Excel
9
+ module Writer
10
+ class TestWorksheet < Test::Unit::TestCase
11
+ def test_need_number
12
+ sheet = Worksheet.new nil, nil
13
+ assert_equal false, sheet.need_number?(10)
14
+ assert_equal false, sheet.need_number?(114.55)
15
+ assert_equal false, sheet.need_number?(0.1)
16
+ assert_equal false, sheet.need_number?(0.01)
17
+ assert_equal true, sheet.need_number?(0.001)
18
+ assert_equal true, sheet.need_number?(10000000.0)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
data/test/font.rb ADDED
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env ruby
2
+ # TestFont -- Spreadsheet -- 09.10.2008 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+ require 'spreadsheet'
8
+
9
+ module Spreadsheet
10
+ class TestFont < Test::Unit::TestCase
11
+ def setup
12
+ @font = Font.new 'Arial'
13
+ end
14
+ def test_italic
15
+ assert_equal false, @font.italic
16
+ @font.italic!
17
+ assert_equal true, @font.italic
18
+ @font.italic = nil
19
+ assert_equal false, @font.italic
20
+ @font.italic = 1
21
+ assert_equal true, @font.italic
22
+ end
23
+ def test_encoding
24
+ assert_equal :default, @font.encoding
25
+ @font.encoding = :apple_roman
26
+ assert_equal :apple_roman, @font.encoding
27
+ @font.encoding = 'Chinese Simplified'
28
+ assert_equal :chinese_simplified, @font.encoding
29
+ assert_raises ArgumentError do @font.size = 'ascii' end
30
+ assert_equal :chinese_simplified, @font.encoding
31
+ @font.encoding = nil
32
+ assert_equal :default, @font.encoding
33
+ end
34
+ def test_family
35
+ assert_equal :none, @font.family
36
+ @font.family = :roman
37
+ assert_equal :roman, @font.family
38
+ @font.family = 'Swiss'
39
+ assert_equal :swiss, @font.family
40
+ assert_raises ArgumentError do @font.size = :greek end
41
+ assert_equal :swiss, @font.family
42
+ @font.family = nil
43
+ assert_equal :none, @font.family
44
+ end
45
+ def test_name
46
+ assert_equal 'Arial', @font.name
47
+ @font.name = 'Helvetica'
48
+ assert_equal 'Helvetica', @font.name
49
+ end
50
+ def test_outline
51
+ assert_equal false, @font.outline
52
+ @font.outline!
53
+ assert_equal true, @font.outline
54
+ @font.outline = nil
55
+ assert_equal false, @font.outline
56
+ @font.outline = 1
57
+ assert_equal true, @font.outline
58
+ end
59
+ def test_escapement
60
+ assert_equal :normal, @font.escapement
61
+ @font.escapement = :superscript
62
+ assert_equal :superscript, @font.escapement
63
+ @font.escapement = 'sub'
64
+ assert_equal :subscript, @font.escapement
65
+ assert_raises ArgumentError do @font.size = "upwards" end
66
+ assert_equal :subscript, @font.escapement
67
+ @font.escapement = nil
68
+ assert_equal :normal, @font.escapement
69
+ end
70
+ def test_shadow
71
+ assert_equal false, @font.shadow
72
+ @font.shadow!
73
+ assert_equal true, @font.shadow
74
+ @font.shadow = nil
75
+ assert_equal false, @font.shadow
76
+ @font.shadow = 1
77
+ assert_equal true, @font.shadow
78
+ end
79
+ def test_size
80
+ assert_equal 10, @font.size
81
+ @font.size = 12
82
+ assert_equal 12, @font.size
83
+ @font.size = 11.2
84
+ assert_equal 11.2, @font.size
85
+ assert_raises ArgumentError do @font.size = "123" end
86
+ end
87
+ def test_strikeout
88
+ assert_equal false, @font.strikeout
89
+ @font.strikeout!
90
+ assert_equal true, @font.strikeout
91
+ @font.strikeout = nil
92
+ assert_equal false, @font.strikeout
93
+ @font.strikeout = 1
94
+ assert_equal true, @font.strikeout
95
+ end
96
+ def test_underline
97
+ assert_equal :none, @font.underline
98
+ @font.underline = :single
99
+ assert_equal :single, @font.underline
100
+ @font.underline = 'double accounting'
101
+ assert_equal :double_accounting, @font.underline
102
+ assert_raises ArgumentError do @font.size = :triple end
103
+ assert_equal :double_accounting, @font.underline
104
+ @font.underline = nil
105
+ assert_equal :none, @font.underline
106
+ @font.underline = true
107
+ assert_equal :single, @font.underline
108
+ end
109
+ def test_weight
110
+ assert_equal :normal, @font.weight
111
+ @font.weight = :bold
112
+ assert_equal :bold, @font.weight
113
+ @font.weight = 100
114
+ assert_equal 100, @font.weight
115
+ assert_raises ArgumentError do @font.weight = Object.new end
116
+ assert_equal 100, @font.weight
117
+ @font.weight = 'bold'
118
+ assert_equal :bold, @font.weight
119
+ @font.weight = nil
120
+ assert_equal :normal, @font.weight
121
+ end
122
+ def test_key
123
+ expected = 'Arial_10_normal_normal_none_text_none_default'
124
+ assert_equal expected, @font.key
125
+ @font.name = 'Helvetica'
126
+ expected = 'Helvetica_10_normal_normal_none_text_none_default'
127
+ assert_equal expected, @font.key
128
+ @font.size = 12
129
+ expected = 'Helvetica_12_normal_normal_none_text_none_default'
130
+ assert_equal expected, @font.key
131
+ @font.weight = :bold
132
+ expected = 'Helvetica_12_bold_normal_none_text_none_default'
133
+ assert_equal expected, @font.key
134
+ @font.italic!
135
+ expected = 'Helvetica_12_bold_italic_normal_none_text_none_default'
136
+ assert_equal expected, @font.key
137
+ @font.strikeout!
138
+ expected = 'Helvetica_12_bold_italic_strikeout_normal_none_text_none_default'
139
+ assert_equal expected, @font.key
140
+ @font.outline!
141
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_normal_none_text_none_default'
142
+ assert_equal expected, @font.key
143
+ @font.shadow!
144
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_normal_none_text_none_default'
145
+ assert_equal expected, @font.key
146
+ @font.escapement = :super
147
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_none_text_none_default'
148
+ assert_equal expected, @font.key
149
+ @font.underline = :double
150
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_text_none_default'
151
+ assert_equal expected, @font.key
152
+ @font.color = :blue
153
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_none_default'
154
+ assert_equal expected, @font.key
155
+ @font.family = :swiss
156
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_swiss_default'
157
+ assert_equal expected, @font.key
158
+ @font.encoding = :iso_latin1
159
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_swiss_iso_latin1'
160
+ assert_equal expected, @font.key
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,1281 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # TestIntegration -- Spreadheet -- 08.10.2007 -- hwyss@ywesee.com
4
+
5
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'spreadsheet'
9
+ require 'fileutils'
10
+
11
+ module Spreadsheet
12
+ class TestIntegration < Test::Unit::TestCase
13
+ if RUBY_VERSION >= '1.9'
14
+ class IconvStub
15
+ def initialize to, from
16
+ @to, @from = to, from
17
+ end
18
+ def iconv str
19
+ dp = str.dup
20
+ dp.force_encoding @from
21
+ dp.encode @to
22
+ end
23
+ end
24
+ @@iconv = IconvStub.new('UTF-16LE', 'UTF-8')
25
+ @@bytesize = :bytesize
26
+ else
27
+ @@iconv = Iconv.new('UTF-16LE', 'UTF-8')
28
+ @@bytesize = :size
29
+ end
30
+ def setup
31
+ @var = File.expand_path 'var', File.dirname(__FILE__)
32
+ FileUtils.mkdir_p @var
33
+ @data = File.expand_path 'data', File.dirname(__FILE__)
34
+ FileUtils.mkdir_p @data
35
+ end
36
+ def teardown
37
+ Spreadsheet.client_encoding = 'UTF-8'
38
+ FileUtils.rm_r @var
39
+ end
40
+ def test_copy__identical__file_paths
41
+ path = File.join @data, 'test_copy.xls'
42
+ copy = File.join @data, 'test_copy1.xls'
43
+ book = Spreadsheet.open path
44
+ assert_instance_of Excel::Workbook, book
45
+ book.write copy
46
+ assert_equal File.read(path), File.read(copy)
47
+ ensure
48
+ File.delete copy if File.exist? copy
49
+ end
50
+ def test_empty_workbook
51
+ path = File.join @data, 'test_empty.xls'
52
+ book = Spreadsheet.open path
53
+ assert_instance_of Excel::Workbook, book
54
+ assert_equal 8, book.biff_version
55
+ assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
56
+ enc = 'UTF-16LE'
57
+ if defined? Encoding
58
+ enc = Encoding.find enc
59
+ end
60
+ assert_equal enc, book.encoding
61
+ assert_equal 21, book.formats.size
62
+ assert_equal 4, book.fonts.size
63
+ assert_equal 0, book.sst.size
64
+ sheet = book.worksheet 0
65
+ assert_equal 0, sheet.row_count
66
+ assert_equal 0, sheet.column_count
67
+ assert_nothing_raised do sheet.inspect end
68
+ end
69
+ def test_version_excel97__ooffice__utf16
70
+ Spreadsheet.client_encoding = 'UTF-16LE'
71
+ assert_equal 'UTF-16LE', Spreadsheet.client_encoding
72
+ path = File.join @data, 'test_version_excel97.xls'
73
+ book = Spreadsheet.open path
74
+ assert_instance_of Excel::Workbook, book
75
+ assert_equal 8, book.biff_version
76
+ assert_equal @@iconv.iconv('Microsoft Excel 97/2000/XP'),
77
+ book.version_string
78
+ enc = 'UTF-16LE'
79
+ if defined? Encoding
80
+ enc = Encoding.find enc
81
+ end
82
+ assert_equal enc, book.encoding
83
+ assert_equal 25, book.formats.size
84
+ assert_equal 5, book.fonts.size
85
+ str1 = book.shared_string 0
86
+ other = @@iconv.iconv('Shared String')
87
+ assert_equal @@iconv.iconv('Shared String'), str1
88
+ str2 = book.shared_string 1
89
+ assert_equal @@iconv.iconv('Another Shared String'), str2
90
+ str3 = book.shared_string 2
91
+ long = @@iconv.iconv('1234567890 ' * 1000)
92
+ if str3 != long
93
+ long.size.times do |idx|
94
+ len = idx.next
95
+ if str3[0,len] != long[0,len]
96
+ assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
97
+ end
98
+ end
99
+ end
100
+ assert_equal long, str3
101
+ str4 = book.shared_string 3
102
+ long = @@iconv.iconv('9876543210 ' * 1000)
103
+ if str4 != long
104
+ long.size.times do |idx|
105
+ len = idx.next
106
+ if str4[0,len] != long[0,len]
107
+ assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
108
+ end
109
+ end
110
+ end
111
+ assert_equal long, str4
112
+ sheet = book.worksheet 0
113
+ assert_equal 11, sheet.row_count
114
+ assert_equal 12, sheet.column_count
115
+ useds = [0,0,0,0,0,0,0,1,0,0,11]
116
+ unuseds = [2,2,1,1,1,2,1,11,1,2,12]
117
+ sheet.each do |row|
118
+ assert_equal useds.shift, row.first_used
119
+ assert_equal unuseds.shift, row.first_unused
120
+ end
121
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
122
+ row = sheet.row 0
123
+ assert_equal str1, row[0]
124
+ assert_equal str1, sheet[0,0]
125
+ assert_equal str1, sheet.cell(0,0)
126
+ assert_equal str1, row[1]
127
+ assert_equal str1, sheet[0,1]
128
+ assert_equal str1, sheet.cell(0,1)
129
+ row = sheet.row 1
130
+ assert_equal str2, row[0]
131
+ assert_equal str2, sheet[1,0]
132
+ assert_equal str2, sheet.cell(1,0)
133
+ assert_equal str2, row[1]
134
+ assert_equal str2, sheet[1,1]
135
+ assert_equal str2, sheet.cell(1,1)
136
+ row = sheet.row 2
137
+ assert_equal str3, row[0]
138
+ assert_equal str3, sheet[2,0]
139
+ assert_equal str3, sheet.cell(2,0)
140
+ assert_nil row[1]
141
+ assert_nil sheet[2,1]
142
+ assert_nil sheet.cell(2,1)
143
+ row = sheet.row 3
144
+ assert_equal str4, row[0]
145
+ assert_equal str4, sheet[3,0]
146
+ assert_equal str4, sheet.cell(3,0)
147
+ assert_nil row[1]
148
+ assert_nil sheet[3,1]
149
+ assert_nil sheet.cell(3,1)
150
+ row = sheet.row 4
151
+ assert_equal 0.25, row[0]
152
+ assert_equal 0.25, sheet[4,0]
153
+ assert_equal 0.25, sheet.cell(4,0)
154
+ row = sheet.row 5
155
+ assert_equal 0.75, row[0]
156
+ assert_equal 0.75, sheet[5,0]
157
+ assert_equal 0.75, sheet.cell(5,0)
158
+ date = Date.new 1975, 8, 21
159
+ assert_equal date, row[1]
160
+ assert_equal date, sheet[5,1]
161
+ assert_equal date, sheet.cell(5,1)
162
+ row = sheet.row 6
163
+ assert_equal 1, row[0]
164
+ assert_equal 1, sheet[6,0]
165
+ assert_equal 1, sheet.cell(6,0)
166
+ row = sheet.row 7
167
+ assert_nil row[0]
168
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
169
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
170
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
171
+ row = sheet.row 8
172
+ assert_equal 0.0001, row[0]
173
+ row = sheet.row 9
174
+ assert_equal 0.00009, row[0]
175
+ assert_equal :green, sheet.row(10).format(11).pattern_fg_color
176
+ end
177
+ def test_version_excel97__ooffice
178
+ path = File.join @data, 'test_version_excel97.xls'
179
+ book = Spreadsheet.open path
180
+ assert_instance_of Excel::Workbook, book
181
+ assert_equal 8, book.biff_version
182
+ assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
183
+ enc = 'UTF-16LE'
184
+ if defined? Encoding
185
+ enc = Encoding.find enc
186
+ end
187
+ assert_equal enc, book.encoding
188
+ assert_equal 25, book.formats.size
189
+ assert_equal 5, book.fonts.size
190
+ str1 = book.shared_string 0
191
+ assert_equal 'Shared String', str1
192
+ str2 = book.shared_string 1
193
+ assert_equal 'Another Shared String', str2
194
+ str3 = book.shared_string 2
195
+ long = '1234567890 ' * 1000
196
+ if str3 != long
197
+ long.size.times do |idx|
198
+ len = idx.next
199
+ if str3[0,len] != long[0,len]
200
+ assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
201
+ end
202
+ end
203
+ end
204
+ assert_equal long, str3
205
+ str4 = book.shared_string 3
206
+ long = '9876543210 ' * 1000
207
+ if str4 != long
208
+ long.size.times do |idx|
209
+ len = idx.next
210
+ if str4[0,len] != long[0,len]
211
+ assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
212
+ end
213
+ end
214
+ end
215
+ assert_equal long, str4
216
+ sheet = book.worksheet 0
217
+ assert_equal 11, sheet.row_count
218
+ assert_equal 12, sheet.column_count
219
+ useds = [0,0,0,0,0,0,0,1,0,0,11]
220
+ unuseds = [2,2,1,1,1,2,1,11,1,2,12]
221
+ sheet.each do |row|
222
+ assert_equal useds.shift, row.first_used
223
+ assert_equal unuseds.shift, row.first_unused
224
+ end
225
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
226
+ row = sheet.row 0
227
+ assert_equal str1, row[0]
228
+ assert_equal str1, sheet[0,0]
229
+ assert_equal str1, sheet.cell(0,0)
230
+ assert_equal str1, row[1]
231
+ assert_equal str1, sheet[0,1]
232
+ assert_equal str1, sheet.cell(0,1)
233
+ row = sheet.row 1
234
+ assert_equal str2, row[0]
235
+ assert_equal str2, sheet[1,0]
236
+ assert_equal str2, sheet.cell(1,0)
237
+ assert_equal str2, row[1]
238
+ assert_equal str2, sheet[1,1]
239
+ assert_equal str2, sheet.cell(1,1)
240
+ row = sheet.row 2
241
+ assert_equal str3, row[0]
242
+ assert_equal str3, sheet[2,0]
243
+ assert_equal str3, sheet.cell(2,0)
244
+ assert_nil row[1]
245
+ assert_nil sheet[2,1]
246
+ assert_nil sheet.cell(2,1)
247
+ row = sheet.row 3
248
+ assert_equal str4, row[0]
249
+ assert_equal str4, sheet[3,0]
250
+ assert_equal str4, sheet.cell(3,0)
251
+ assert_nil row[1]
252
+ assert_nil sheet[3,1]
253
+ assert_nil sheet.cell(3,1)
254
+ row = sheet.row 4
255
+ assert_equal 0.25, row[0]
256
+ assert_equal 0.25, sheet[4,0]
257
+ assert_equal 0.25, sheet.cell(4,0)
258
+ row = sheet.row 5
259
+ assert_equal 0.75, row[0]
260
+ assert_equal 0.75, sheet[5,0]
261
+ assert_equal 0.75, sheet.cell(5,0)
262
+ date = Date.new 1975, 8, 21
263
+ assert_equal date, row[1]
264
+ assert_equal date, sheet[5,1]
265
+ assert_equal date, sheet.cell(5,1)
266
+ row = sheet.row 6
267
+ assert_equal 1, row[0]
268
+ assert_equal 1, sheet[6,0]
269
+ assert_equal 1, sheet.cell(6,0)
270
+ row = sheet.row 7
271
+ assert_nil row[0]
272
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
273
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
274
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
275
+ row = sheet.row 8
276
+ assert_equal 0.0001, row[0]
277
+ row = sheet.row 9
278
+ assert_equal 0.00009, row[0]
279
+ link = row[1]
280
+ assert_instance_of Link, link
281
+ assert_equal 'Link-Text', link
282
+ assert_equal 'http://scm.ywesee.com/spreadsheet', link.url
283
+ assert_equal 'http://scm.ywesee.com/spreadsheet', link.href
284
+ end
285
+ def test_version_excel95__ooffice__utf16
286
+ Spreadsheet.client_encoding = 'UTF-16LE'
287
+ path = File.join @data, 'test_version_excel95.xls'
288
+ book = Spreadsheet.open path
289
+ assert_instance_of Excel::Workbook, book
290
+ assert_equal 5, book.biff_version
291
+ assert_equal @@iconv.iconv('Microsoft Excel 95'), book.version_string
292
+ enc = 'WINDOWS-1252'
293
+ if defined? Encoding
294
+ enc = Encoding.find enc
295
+ end
296
+ assert_equal enc, book.encoding
297
+ str1 = @@iconv.iconv('Shared String')
298
+ str2 = @@iconv.iconv('Another Shared String')
299
+ str3 = @@iconv.iconv(('1234567890 ' * 26)[0,255])
300
+ str4 = @@iconv.iconv(('9876543210 ' * 26)[0,255])
301
+ sheet = book.worksheet 0
302
+ assert_equal 8, sheet.row_count
303
+ assert_equal 11, sheet.column_count
304
+ useds = [0,0,0,0,0,0,0,1]
305
+ unuseds = [2,2,1,1,1,1,1,11]
306
+ sheet.each do |row|
307
+ assert_equal useds.shift, row.first_used
308
+ assert_equal unuseds.shift, row.first_unused
309
+ end
310
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
311
+ row = sheet.row 0
312
+ assert_equal str1, row[0]
313
+ assert_equal str1, sheet[0,0]
314
+ assert_equal str1, sheet.cell(0,0)
315
+ assert_equal str1, row[1]
316
+ assert_equal str1, sheet[0,1]
317
+ assert_equal str1, sheet.cell(0,1)
318
+ row = sheet.row 1
319
+ assert_equal str2, row[0]
320
+ assert_equal str2, sheet[1,0]
321
+ assert_equal str2, sheet.cell(1,0)
322
+ assert_equal str2, row[1]
323
+ assert_equal str2, sheet[1,1]
324
+ assert_equal str2, sheet.cell(1,1)
325
+ row = sheet.row 2
326
+ assert_equal 510, row[0].send(@@bytesize)
327
+ assert_equal str3, row[0]
328
+ assert_equal str3, sheet[2,0]
329
+ assert_equal str3, sheet.cell(2,0)
330
+ assert_nil row[1]
331
+ assert_nil sheet[2,1]
332
+ assert_nil sheet.cell(2,1)
333
+ row = sheet.row 3
334
+ assert_equal 510, row[0].send(@@bytesize)
335
+ assert_equal str4, row[0]
336
+ assert_equal str4, sheet[3,0]
337
+ assert_equal str4, sheet.cell(3,0)
338
+ assert_nil row[1]
339
+ assert_nil sheet[3,1]
340
+ assert_nil sheet.cell(3,1)
341
+ row = sheet.row 4
342
+ assert_equal 0.25, row[0]
343
+ assert_equal 0.25, sheet[4,0]
344
+ assert_equal 0.25, sheet.cell(4,0)
345
+ row = sheet.row 5
346
+ assert_equal 0.75, row[0]
347
+ assert_equal 0.75, sheet[5,0]
348
+ assert_equal 0.75, sheet.cell(5,0)
349
+ row = sheet.row 6
350
+ assert_equal 1, row[0]
351
+ assert_equal 1, sheet[6,0]
352
+ assert_equal 1, sheet.cell(6,0)
353
+ row = sheet.row 7
354
+ assert_nil row[0]
355
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
356
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
357
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
358
+ end
359
+ def test_version_excel95__ooffice
360
+ path = File.join @data, 'test_version_excel95.xls'
361
+ book = Spreadsheet.open path
362
+ assert_instance_of Excel::Workbook, book
363
+ assert_equal 5, book.biff_version
364
+ assert_equal 'Microsoft Excel 95', book.version_string
365
+ enc = 'WINDOWS-1252'
366
+ if defined? Encoding
367
+ enc = Encoding.find enc
368
+ end
369
+ assert_equal enc, book.encoding
370
+ str1 = 'Shared String'
371
+ str2 = 'Another Shared String'
372
+ str3 = ('1234567890 ' * 26)[0,255]
373
+ str4 = ('9876543210 ' * 26)[0,255]
374
+ sheet = book.worksheet 0
375
+ assert_equal 8, sheet.row_count
376
+ assert_equal 11, sheet.column_count
377
+ useds = [0,0,0,0,0,0,0,1]
378
+ unuseds = [2,2,1,1,1,1,1,11]
379
+ sheet.each do |row|
380
+ assert_equal useds.shift, row.first_used
381
+ assert_equal unuseds.shift, row.first_unused
382
+ end
383
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
384
+ row = sheet.row 0
385
+ assert_equal str1, row[0]
386
+ assert_equal str1, sheet[0,0]
387
+ assert_equal str1, sheet.cell(0,0)
388
+ assert_equal str1, row[1]
389
+ assert_equal str1, sheet[0,1]
390
+ assert_equal str1, sheet.cell(0,1)
391
+ row = sheet.row 1
392
+ assert_equal str2, row[0]
393
+ assert_equal str2, sheet[1,0]
394
+ assert_equal str2, sheet.cell(1,0)
395
+ assert_equal str2, row[1]
396
+ assert_equal str2, sheet[1,1]
397
+ assert_equal str2, sheet.cell(1,1)
398
+ row = sheet.row 2
399
+ assert_equal 255, row[0].send(@@bytesize)
400
+ assert_equal str3, row[0]
401
+ assert_equal str3, sheet[2,0]
402
+ assert_equal str3, sheet.cell(2,0)
403
+ assert_nil row[1]
404
+ assert_nil sheet[2,1]
405
+ assert_nil sheet.cell(2,1)
406
+ row = sheet.row 3
407
+ assert_equal 255, row[0].send(@@bytesize)
408
+ assert_equal str4, row[0]
409
+ assert_equal str4, sheet[3,0]
410
+ assert_equal str4, sheet.cell(3,0)
411
+ assert_nil row[1]
412
+ assert_nil sheet[3,1]
413
+ assert_nil sheet.cell(3,1)
414
+ row = sheet.row 4
415
+ assert_equal 0.25, row[0]
416
+ assert_equal 0.25, sheet[4,0]
417
+ assert_equal 0.25, sheet.cell(4,0)
418
+ row = sheet.row 5
419
+ assert_equal 0.75, row[0]
420
+ assert_equal 0.75, sheet[5,0]
421
+ assert_equal 0.75, sheet.cell(5,0)
422
+ row = sheet.row 6
423
+ assert_equal 1, row[0]
424
+ assert_equal 1, sheet[6,0]
425
+ assert_equal 1, sheet.cell(6,0)
426
+ row = sheet.row 7
427
+ assert_nil row[0]
428
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
429
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
430
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
431
+ end
432
+ def test_version_excel5__ooffice
433
+ path = File.join @data, 'test_version_excel5.xls'
434
+ book = Spreadsheet.open path
435
+ assert_instance_of Excel::Workbook, book
436
+ assert_equal 5, book.biff_version
437
+ assert_equal 'Microsoft Excel 95', book.version_string
438
+ enc = 'WINDOWS-1252'
439
+ if defined? Encoding
440
+ enc = Encoding.find enc
441
+ end
442
+ assert_equal enc, book.encoding
443
+ str1 = 'Shared String'
444
+ str2 = 'Another Shared String'
445
+ str3 = ('1234567890 ' * 26)[0,255]
446
+ str4 = ('9876543210 ' * 26)[0,255]
447
+ sheet = book.worksheet 0
448
+ assert_equal 8, sheet.row_count
449
+ assert_equal 11, sheet.column_count
450
+ useds = [0,0,0,0,0,0,0,1]
451
+ unuseds = [2,2,1,1,1,1,1,11]
452
+ sheet.each do |row|
453
+ assert_equal useds.shift, row.first_used
454
+ assert_equal unuseds.shift, row.first_unused
455
+ end
456
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
457
+ row = sheet.row 0
458
+ assert_equal str1, row[0]
459
+ assert_equal str1, sheet[0,0]
460
+ assert_equal str1, sheet.cell(0,0)
461
+ assert_equal str1, row[1]
462
+ assert_equal str1, sheet[0,1]
463
+ assert_equal str1, sheet.cell(0,1)
464
+ row = sheet.row 1
465
+ assert_equal str2, row[0]
466
+ assert_equal str2, sheet[1,0]
467
+ assert_equal str2, sheet.cell(1,0)
468
+ assert_equal str2, row[1]
469
+ assert_equal str2, sheet[1,1]
470
+ assert_equal str2, sheet.cell(1,1)
471
+ row = sheet.row 2
472
+ assert_equal 255, row[0].send(@@bytesize)
473
+ assert_equal str3, row[0]
474
+ assert_equal str3, sheet[2,0]
475
+ assert_equal str3, sheet.cell(2,0)
476
+ assert_nil row[1]
477
+ assert_nil sheet[2,1]
478
+ assert_nil sheet.cell(2,1)
479
+ row = sheet.row 3
480
+ assert_equal 255, row[0].send(@@bytesize)
481
+ assert_equal str4, row[0]
482
+ assert_equal str4, sheet[3,0]
483
+ assert_equal str4, sheet.cell(3,0)
484
+ assert_nil row[1]
485
+ assert_nil sheet[3,1]
486
+ assert_nil sheet.cell(3,1)
487
+ row = sheet.row 4
488
+ assert_equal 0.25, row[0]
489
+ assert_equal 0.25, sheet[4,0]
490
+ assert_equal 0.25, sheet.cell(4,0)
491
+ row = sheet.row 5
492
+ assert_equal 0.75, row[0]
493
+ assert_equal 0.75, sheet[5,0]
494
+ assert_equal 0.75, sheet.cell(5,0)
495
+ row = sheet.row 6
496
+ assert_equal 1, row[0]
497
+ assert_equal 1, sheet[6,0]
498
+ assert_equal 1, sheet.cell(6,0)
499
+ row = sheet.row 7
500
+ assert_nil row[0]
501
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
502
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
503
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
504
+ end
505
+ def test_worksheets
506
+ path = File.join @data, 'test_copy.xls'
507
+ book = Spreadsheet.open path
508
+ sheets = book.worksheets
509
+ assert_equal 3, sheets.size
510
+ sheet = book.worksheet 0
511
+ assert_instance_of Excel::Worksheet, sheet
512
+ assert_equal sheet, book.worksheet('Sheet1')
513
+ end
514
+ def test_worksheets__utf16
515
+ Spreadsheet.client_encoding = 'UTF-16LE'
516
+ path = File.join @data, 'test_copy.xls'
517
+ book = Spreadsheet.open path
518
+ sheets = book.worksheets
519
+ assert_equal 3, sheets.size
520
+ sheet = book.worksheet 0
521
+ assert_instance_of Excel::Worksheet, sheet
522
+ str = "S\000h\000e\000e\000t\0001\000"
523
+ if RUBY_VERSION >= '1.9'
524
+ str.force_encoding 'UTF-16LE' if str.respond_to? :force_encoding
525
+ end
526
+ assert_equal sheet, book.worksheet(str)
527
+ end
528
+ def test_read_datetime
529
+ path = File.join @data, 'test_datetime.xls'
530
+ book = Spreadsheet.open path
531
+ assert_instance_of Excel::Workbook, book
532
+ sheet = book.worksheet 0
533
+ time = sheet[0,0]
534
+ assert_equal 22, time.hour
535
+ assert_equal 00, time.min
536
+ assert_equal 00, time.sec
537
+ time = sheet[1,0]
538
+ assert_equal 1899, time.year
539
+ assert_equal 12, time.month
540
+ assert_equal 30, time.day
541
+ assert_equal 22, time.hour
542
+ assert_equal 30, time.min
543
+ assert_equal 45, time.sec
544
+ time = sheet[0,1]
545
+ assert_equal 1899, time.year
546
+ assert_equal 12, time.month
547
+ assert_equal 31, time.day
548
+ assert_equal 4, time.hour
549
+ assert_equal 30, time.min
550
+ assert_equal 45, time.sec
551
+ end
552
+ def test_change_encoding
553
+ path = File.join @data, 'test_version_excel95.xls'
554
+ book = Spreadsheet.open path
555
+ assert_instance_of Excel::Workbook, book
556
+ assert_equal 5, book.biff_version
557
+ assert_equal 'Microsoft Excel 95', book.version_string
558
+ enc = 'WINDOWS-1252'
559
+ if defined? Encoding
560
+ enc = Encoding.find enc
561
+ end
562
+ assert_equal enc, book.encoding
563
+ enc = 'WINDOWS-1256'
564
+ if defined? Encoding
565
+ enc = Encoding.find enc
566
+ end
567
+ book.encoding = enc
568
+ path = File.join @var, 'test_change_encoding.xls'
569
+ book.write path
570
+ assert_nothing_raised do book = Spreadsheet.open path end
571
+ assert_equal enc, book.encoding
572
+ end
573
+ def test_change_cell
574
+ path = File.join @data, 'test_version_excel97.xls'
575
+ book = Spreadsheet.open path
576
+ assert_instance_of Excel::Workbook, book
577
+ assert_equal 8, book.biff_version
578
+ assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
579
+ path = File.join @var, 'test_change_cell.xls'
580
+ str1 = book.shared_string 0
581
+ assert_equal 'Shared String', str1
582
+ str2 = book.shared_string 1
583
+ assert_equal 'Another Shared String', str2
584
+ str3 = book.shared_string 2
585
+ long = '1234567890 ' * 1000
586
+ if str3 != long
587
+ long.size.times do |idx|
588
+ len = idx.next
589
+ if str3[0,len] != long[0,len]
590
+ assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
591
+ end
592
+ end
593
+ end
594
+ assert_equal long, str3
595
+ str4 = book.shared_string 3
596
+ long = '9876543210 ' * 1000
597
+ if str4 != long
598
+ long.size.times do |idx|
599
+ len = idx.next
600
+ if str4[0,len] != long[0,len]
601
+ assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
602
+ end
603
+ end
604
+ end
605
+ assert_equal long, str4
606
+ sheet = book.worksheet 0
607
+ sheet[0,0] = 4
608
+ row = sheet.row 1
609
+ row[0] = 3
610
+ book.write path
611
+ assert_nothing_raised do book = Spreadsheet.open path end
612
+ sheet = book.worksheet 0
613
+ assert_equal 11, sheet.row_count
614
+ assert_equal 12, sheet.column_count
615
+ useds = [0,0,0,0,0,0,0,0,0,0,0]
616
+ unuseds = [2,2,1,1,1,2,1,11,1,2,12]
617
+ sheet.each do |rw|
618
+ assert_equal useds.shift, rw.first_used
619
+ assert_equal unuseds.shift, rw.first_unused
620
+ end
621
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
622
+ row = sheet.row 0
623
+ assert_equal 4, row[0]
624
+ assert_equal 4, sheet[0,0]
625
+ assert_equal 4, sheet.cell(0,0)
626
+ assert_equal str1, row[1]
627
+ assert_equal str1, sheet[0,1]
628
+ assert_equal str1, sheet.cell(0,1)
629
+ row = sheet.row 1
630
+ assert_equal 3, row[0]
631
+ assert_equal 3, sheet[1,0]
632
+ assert_equal 3, sheet.cell(1,0)
633
+ assert_equal str2, row[1]
634
+ assert_equal str2, sheet[1,1]
635
+ assert_equal str2, sheet.cell(1,1)
636
+ row = sheet.row 2
637
+ assert_equal str3, row[0]
638
+ assert_equal str3, sheet[2,0]
639
+ assert_equal str3, sheet.cell(2,0)
640
+ assert_nil row[1]
641
+ assert_nil sheet[2,1]
642
+ assert_nil sheet.cell(2,1)
643
+ row = sheet.row 3
644
+ assert_equal str4, row[0]
645
+ assert_equal str4, sheet[3,0]
646
+ assert_equal str4, sheet.cell(3,0)
647
+ assert_nil row[1]
648
+ assert_nil sheet[3,1]
649
+ assert_nil sheet.cell(3,1)
650
+ row = sheet.row 4
651
+ assert_equal 0.25, row[0]
652
+ assert_equal 0.25, sheet[4,0]
653
+ assert_equal 0.25, sheet.cell(4,0)
654
+ row = sheet.row 5
655
+ assert_equal 0.75, row[0]
656
+ assert_equal 0.75, sheet[5,0]
657
+ assert_equal 0.75, sheet.cell(5,0)
658
+ date = Date.new 1975, 8, 21
659
+ assert_equal date, row[1]
660
+ assert_equal date, sheet[5,1]
661
+ assert_equal date, sheet.cell(5,1)
662
+ row = sheet.row 6
663
+ assert_equal 1, row[0]
664
+ assert_equal 1, sheet[6,0]
665
+ assert_equal 1, sheet.cell(6,0)
666
+ row = sheet.row 7
667
+ assert_nil row[0]
668
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
669
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
670
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
671
+ row = sheet.row 8
672
+ assert_equal 0.0001, row[0]
673
+ row = sheet.row 9
674
+ assert_equal 0.00009, row[0]
675
+ end
676
+ def test_change_cell__complete_sst_rewrite
677
+ path = File.join @data, 'test_version_excel97.xls'
678
+ book = Spreadsheet.open path
679
+ assert_instance_of Excel::Workbook, book
680
+ assert_equal 8, book.biff_version
681
+ assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
682
+ path = File.join @var, 'test_change_cell.xls'
683
+ str1 = book.shared_string 0
684
+ assert_equal 'Shared String', str1
685
+ str2 = book.shared_string 1
686
+ assert_equal 'Another Shared String', str2
687
+ str3 = book.shared_string 2
688
+ long = '1234567890 ' * 1000
689
+ if str3 != long
690
+ long.size.times do |idx|
691
+ len = idx.next
692
+ if str3[0,len] != long[0,len]
693
+ assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
694
+ end
695
+ end
696
+ end
697
+ assert_equal long, str3
698
+ str4 = book.shared_string 3
699
+ long = '9876543210 ' * 1000
700
+ if str4 != long
701
+ long.size.times do |idx|
702
+ len = idx.next
703
+ if str4[0,len] != long[0,len]
704
+ assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
705
+ end
706
+ end
707
+ end
708
+ assert_equal long, str4
709
+ sheet = book.worksheet 0
710
+ sheet[0,0] = 4
711
+ str5 = 'A completely different String'
712
+ sheet[0,1] = str5
713
+ row = sheet.row 1
714
+ row[0] = 3
715
+ book.write path
716
+ assert_nothing_raised do book = Spreadsheet.open path end
717
+ assert_equal str5, book.shared_string(0)
718
+ assert_equal str2, book.shared_string(1)
719
+ assert_equal str3, book.shared_string(2)
720
+ assert_equal str4, book.shared_string(3)
721
+ sheet = book.worksheet 0
722
+ assert_equal 11, sheet.row_count
723
+ assert_equal 12, sheet.column_count
724
+ useds = [0,0,0,0,0,0,0,0,0,0,0]
725
+ unuseds = [2,2,1,1,1,2,1,11,1,2,12]
726
+ sheet.each do |rw|
727
+ assert_equal useds.shift, rw.first_used
728
+ assert_equal unuseds.shift, rw.first_unused
729
+ end
730
+ assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
731
+ row = sheet.row 0
732
+ assert_equal 4, row[0]
733
+ assert_equal 4, sheet[0,0]
734
+ assert_equal 4, sheet.cell(0,0)
735
+ assert_equal str5, row[1]
736
+ assert_equal str5, sheet[0,1]
737
+ assert_equal str5, sheet.cell(0,1)
738
+ row = sheet.row 1
739
+ assert_equal 3, row[0]
740
+ assert_equal 3, sheet[1,0]
741
+ assert_equal 3, sheet.cell(1,0)
742
+ assert_equal str2, row[1]
743
+ assert_equal str2, sheet[1,1]
744
+ assert_equal str2, sheet.cell(1,1)
745
+ row = sheet.row 2
746
+ assert_equal str3, row[0]
747
+ assert_equal str3, sheet[2,0]
748
+ assert_equal str3, sheet.cell(2,0)
749
+ assert_nil row[1]
750
+ assert_nil sheet[2,1]
751
+ assert_nil sheet.cell(2,1)
752
+ row = sheet.row 3
753
+ assert_equal str4, row[0]
754
+ assert_equal str4, sheet[3,0]
755
+ assert_equal str4, sheet.cell(3,0)
756
+ assert_nil row[1]
757
+ assert_nil sheet[3,1]
758
+ assert_nil sheet.cell(3,1)
759
+ row = sheet.row 4
760
+ assert_equal 0.25, row[0]
761
+ assert_equal 0.25, sheet[4,0]
762
+ assert_equal 0.25, sheet.cell(4,0)
763
+ row = sheet.row 5
764
+ assert_equal 0.75, row[0]
765
+ assert_equal 0.75, sheet[5,0]
766
+ assert_equal 0.75, sheet.cell(5,0)
767
+ date = Date.new 1975, 8, 21
768
+ assert_equal date, row[1]
769
+ assert_equal date, sheet[5,1]
770
+ assert_equal date, sheet.cell(5,1)
771
+ row = sheet.row 6
772
+ assert_equal 1, row[0]
773
+ assert_equal 1, sheet[6,0]
774
+ assert_equal 1, sheet.cell(6,0)
775
+ row = sheet.row 7
776
+ assert_nil row[0]
777
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
778
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
779
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
780
+ row = sheet.row 8
781
+ assert_equal 0.0001, row[0]
782
+ row = sheet.row 9
783
+ assert_equal 0.00009, row[0]
784
+ end
785
+ def test_write_to_stringio
786
+ book = Spreadsheet::Excel::Workbook.new
787
+ sheet = book.create_worksheet :name => 'My Worksheet'
788
+ sheet[0,0] = 'my cell'
789
+ data = StringIO.new ''
790
+ assert_nothing_raised do
791
+ book.write data
792
+ end
793
+ assert_nothing_raised do
794
+ book = Spreadsheet.open data
795
+ end
796
+ assert_instance_of Spreadsheet::Excel::Workbook, book
797
+ assert_equal 1, book.worksheets.size
798
+ sheet = book.worksheet 0
799
+ assert_equal 'My Worksheet', sheet.name
800
+ assert_equal 'my cell', sheet[0,0]
801
+ end
802
+ def test_write_new_workbook
803
+ book = Spreadsheet::Workbook.new
804
+ path = File.join @var, 'test_write_workbook.xls'
805
+ sheet1 = book.create_worksheet
806
+ str1 = 'My Shared String'
807
+ str2 = 'Another Shared String'
808
+ assert_equal 1, (str1.size + str2.size) % 2,
809
+ "str3 should start at an odd offset to test splitting of wide strings"
810
+ str3 = '–––––––––– ' * 1000
811
+ str4 = '1234567890 ' * 1000
812
+ fmt1 = Format.new :italic => true, :color => :blue
813
+ sheet1.format_column 1, fmt1, :width => 20
814
+ fmt2 = Format.new(:weight => :bold, :color => :yellow)
815
+ sheet1.format_column 2, fmt2
816
+ sheet1.format_column 3, Format.new(:weight => :bold, :color => :red)
817
+ sheet1.format_column 6..9, fmt1
818
+ sheet1.format_column [4,5,7], fmt2
819
+ sheet1.row(0).height = 20
820
+ sheet1[0,0] = str1
821
+ sheet1.row(0).push str1
822
+ sheet1.row(1).concat [str2, str2]
823
+ sheet1[2,0] = str3
824
+ sheet1[3,0] = str4
825
+ fmt = Format.new :color => 'red'
826
+ sheet1[4,0] = 0.25
827
+ sheet1.row(4).set_format 0, fmt
828
+ fmt = Format.new :color => 'aqua'
829
+ sheet1[5,0] = 0.75
830
+ sheet1.row(5).set_format 0, fmt
831
+ link = Link.new 'http://scm.ywesee.com/?p=spreadsheet;a=summary',
832
+ 'The Spreadsheet GitWeb', 'top'
833
+ sheet1[5,1] = link
834
+ sheet1[6,0] = 1
835
+ fmt = Format.new :color => 'green'
836
+ sheet1.row(6).set_format 0, fmt
837
+ sheet1[6,1] = Date.new 2008, 10, 10
838
+ sheet1[6,2] = Date.new 2008, 10, 12
839
+ fmt = Format.new :number_format => 'D.M.YY'
840
+ sheet1.row(6).set_format 1, fmt
841
+ sheet1.update_row 7, nil, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
842
+ sheet1[8,0] = 0.0005
843
+ sheet1[8,1] = 0.005
844
+ sheet1[8,2] = 0.05
845
+ sheet1[8,3] = 10.5
846
+ sheet1[8,4] = 1.05
847
+ sheet1[8,5] = 100.5
848
+ sheet1[8,6] = 10.05
849
+ sheet1[8,7] = 1.005
850
+ sheet1[9,0] = 100.5
851
+ sheet1[9,1] = 10.05
852
+ sheet1[9,2] = 1.005
853
+ sheet1[9,3] = 1000.5
854
+ sheet1[9,4] = 100.05
855
+ sheet1[9,5] = 10.005
856
+ sheet1[9,6] = 1.0005
857
+ sheet1[10,0] = 10000.5
858
+ sheet1[10,1] = 1000.05
859
+ sheet1[10,2] = 100.005
860
+ sheet1[10,3] = 10.0005
861
+ sheet1[10,4] = 1.00005
862
+ sheet1.insert_row 9, ['a', 'b', 'c']
863
+ assert_equal 'a', sheet1[9,0]
864
+ assert_equal 'b', sheet1[9,1]
865
+ assert_equal 'c', sheet1[9,2]
866
+ sheet1.delete_row 9
867
+ row = sheet1.row(11)
868
+ row.height = 40
869
+ row.push 'x'
870
+ row.pop
871
+ sheet2 = book.create_worksheet :name => 'my name'
872
+ book.write path
873
+ Spreadsheet.client_encoding = 'UTF-16LE'
874
+ str1 = @@iconv.iconv str1
875
+ str2 = @@iconv.iconv str2
876
+ str3 = @@iconv.iconv str3
877
+ str4 = @@iconv.iconv str4
878
+ assert_nothing_raised do book = Spreadsheet.open path end
879
+ if RUBY_VERSION >= '1.9'
880
+ assert_equal 'UTF-16LE', book.encoding.name
881
+ else
882
+ assert_equal 'UTF-16LE', book.encoding
883
+ end
884
+ assert_equal str1, book.shared_string(0)
885
+ assert_equal str2, book.shared_string(1)
886
+ test = nil
887
+ assert_nothing_raised "I've probably split a two-byte-character" do
888
+ test = book.shared_string 2
889
+ end
890
+ if test != str3
891
+ str3.size.times do |idx|
892
+ len = idx.next
893
+ if test[0,len] != str3[0,len]
894
+ assert_equal str3[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
895
+ end
896
+ end
897
+ end
898
+ assert_equal str3, test
899
+ test = book.shared_string 3
900
+ if test != str4
901
+ str4.size.times do |idx|
902
+ len = idx.next
903
+ if test[0,len] != str4[0,len]
904
+ assert_equal str4[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
905
+ end
906
+ end
907
+ end
908
+ assert_equal str4, test
909
+ assert_equal 2, book.worksheets.size
910
+ sheet = book.worksheets.first
911
+ assert_instance_of Spreadsheet::Excel::Worksheet, sheet
912
+ name = "W\000o\000r\000k\000s\000h\000e\000e\000t\0001\000"
913
+ name.force_encoding 'UTF-16LE' if name.respond_to?(:force_encoding)
914
+ assert_equal name, sheet.name
915
+ assert_not_nil sheet.offset
916
+ assert_not_nil col = sheet.column(1)
917
+ assert_equal true, col.default_format.font.italic?
918
+ assert_equal :blue, col.default_format.font.color
919
+ assert_equal 20, col.width
920
+ row = sheet.row 0
921
+ assert_equal col.default_format, row.format(1)
922
+ assert_equal 20, row.height
923
+ assert_equal str1, row[0]
924
+ assert_equal str1, sheet[0,0]
925
+ assert_equal str1, sheet.cell(0,0)
926
+ assert_equal str1, row[1]
927
+ assert_equal str1, sheet[0,1]
928
+ assert_equal str1, sheet.cell(0,1)
929
+ row = sheet.row 1
930
+ assert_equal str2, row[0]
931
+ assert_equal str2, sheet[1,0]
932
+ assert_equal str2, sheet.cell(1,0)
933
+ assert_equal str2, row[1]
934
+ assert_equal str2, sheet[1,1]
935
+ assert_equal str2, sheet.cell(1,1)
936
+ row = sheet.row 2
937
+ assert_equal str3, row[0]
938
+ assert_equal str3, sheet[2,0]
939
+ assert_equal str3, sheet.cell(2,0)
940
+ assert_nil row[1]
941
+ assert_nil sheet[2,1]
942
+ assert_nil sheet.cell(2,1)
943
+ row = sheet.row 3
944
+ assert_equal str4, row[0]
945
+ assert_equal str4, sheet[3,0]
946
+ assert_equal str4, sheet.cell(3,0)
947
+ assert_nil row[1]
948
+ assert_nil sheet[3,1]
949
+ assert_nil sheet.cell(3,1)
950
+ row = sheet.row 4
951
+ assert_equal :red, row.format(0).font.color
952
+ assert_equal 0.25, row[0]
953
+ assert_equal 0.25, sheet[4,0]
954
+ assert_equal 0.25, sheet.cell(4,0)
955
+ row = sheet.row 5
956
+ assert_equal :cyan, row.format(0).font.color
957
+ assert_equal 0.75, row[0]
958
+ assert_equal 0.75, sheet[5,0]
959
+ assert_equal 0.75, sheet.cell(5,0)
960
+ link = row[1]
961
+ assert_instance_of Link, link
962
+ url = @@iconv.iconv 'http://scm.ywesee.com/?p=spreadsheet;a=summary'
963
+ assert_equal @@iconv.iconv('The Spreadsheet GitWeb'), link
964
+ assert_equal url, link.url
965
+ assert_equal @@iconv.iconv('top'), link.fragment
966
+ row = sheet.row 6
967
+ assert_equal :green, row.format(0).font.color
968
+ assert_equal 1, row[0]
969
+ assert_equal 1, sheet[6,0]
970
+ assert_equal 1, sheet.cell(6,0)
971
+ assert_equal @@iconv.iconv('D.M.YY'), row.format(1).number_format
972
+ date = Date.new 2008, 10, 10
973
+ assert_equal date, row[1]
974
+ assert_equal date, sheet[6,1]
975
+ assert_equal date, sheet.cell(6,1)
976
+ assert_equal @@iconv.iconv('DD.MM.YYYY'), row.format(2).number_format
977
+ date = Date.new 2008, 10, 12
978
+ assert_equal date, row[2]
979
+ assert_equal date, sheet[6,2]
980
+ assert_equal date, sheet.cell(6,2)
981
+ row = sheet.row 7
982
+ assert_nil row[0]
983
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
984
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
985
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
986
+ assert_equal 0.0005, sheet1[8,0]
987
+ assert_equal 0.005, sheet1[8,1]
988
+ assert_equal 0.05, sheet1[8,2]
989
+ assert_equal 10.5, sheet1[8,3]
990
+ assert_equal 1.05, sheet1[8,4]
991
+ assert_equal 100.5, sheet1[8,5]
992
+ assert_equal 10.05, sheet1[8,6]
993
+ assert_equal 1.005, sheet1[8,7]
994
+ assert_equal 100.5, sheet1[9,0]
995
+ assert_equal 10.05, sheet1[9,1]
996
+ assert_equal 1.005, sheet1[9,2]
997
+ assert_equal 1000.5, sheet1[9,3]
998
+ assert_equal 100.05, sheet1[9,4]
999
+ assert_equal 10.005, sheet1[9,5]
1000
+ assert_equal 1.0005, sheet1[9,6]
1001
+ assert_equal 10000.5, sheet1[10,0]
1002
+ assert_equal 1000.05, sheet1[10,1]
1003
+ assert_equal 100.005, sheet1[10,2]
1004
+ assert_equal 10.0005, sheet1[10,3]
1005
+ assert_equal 1.00005, sheet1[10,4]
1006
+ assert_equal 40, sheet1.row(11).height
1007
+ assert_instance_of Spreadsheet::Excel::Worksheet, sheet
1008
+ sheet = book.worksheets.last
1009
+ name = "m\000y\000 \000n\000a\000m\000e\000"
1010
+ name.force_encoding 'UTF-16LE' if name.respond_to?(:force_encoding)
1011
+ assert_equal name, sheet.name
1012
+ assert_not_nil sheet.offset
1013
+ end
1014
+ def test_write_new_workbook__utf16
1015
+ Spreadsheet.client_encoding = 'UTF-16LE'
1016
+ book = Spreadsheet::Workbook.new
1017
+ path = File.join @var, 'test_write_workbook.xls'
1018
+ sheet1 = book.create_worksheet
1019
+ str1 = @@iconv.iconv 'Shared String'
1020
+ str2 = @@iconv.iconv 'Another Shared String'
1021
+ str3 = @@iconv.iconv('1234567890 ' * 1000)
1022
+ str4 = @@iconv.iconv('9876543210 ' * 1000)
1023
+ fmt = Format.new :italic => true, :color => :blue
1024
+ sheet1.format_column 1, fmt, :width => 20
1025
+ sheet1[0,0] = str1
1026
+ sheet1.row(0).push str1
1027
+ sheet1.row(1).concat [str2, str2]
1028
+ sheet1[2,0] = str3
1029
+ sheet1[3,0] = str4
1030
+ fmt = Format.new :color => 'red'
1031
+ sheet1[4,0] = 0.25
1032
+ sheet1.row(4).set_format 0, fmt
1033
+ fmt = Format.new :color => 'aqua'
1034
+ sheet1[5,0] = 0.75
1035
+ sheet1.row(5).set_format 0, fmt
1036
+ sheet1[6,0] = 1
1037
+ fmt = Format.new :color => 'green'
1038
+ sheet1.row(6).set_format 0, fmt
1039
+ sheet1[6,1] = Date.new 2008, 10, 10
1040
+ sheet1[6,2] = Date.new 2008, 10, 12
1041
+ fmt = Format.new :number_format => @@iconv.iconv("DD.MM.YYYY")
1042
+ sheet1.row(6).set_format 1, fmt
1043
+ sheet1.update_row 7, nil, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
1044
+ sheet1.row(8).default_format = fmt
1045
+ sheet1[8,0] = @@iconv.iconv 'formatted when empty'
1046
+ sheet2 = book.create_worksheet :name => @@iconv.iconv("my name")
1047
+ book.write path
1048
+ Spreadsheet.client_encoding = 'UTF-8'
1049
+ str1 = 'Shared String'
1050
+ str2 = 'Another Shared String'
1051
+ str3 = '1234567890 ' * 1000
1052
+ str4 = '9876543210 ' * 1000
1053
+ assert_nothing_raised do book = Spreadsheet.open path end
1054
+ if RUBY_VERSION >= '1.9'
1055
+ assert_equal 'UTF-16LE', book.encoding.name
1056
+ else
1057
+ assert_equal 'UTF-16LE', book.encoding
1058
+ end
1059
+ assert_equal str1, book.shared_string(0)
1060
+ assert_equal str2, book.shared_string(1)
1061
+ test = book.shared_string 2
1062
+ if test != str3
1063
+ str3.size.times do |idx|
1064
+ len = idx.next
1065
+ if test[0,len] != str3[0,len]
1066
+ assert_equal str3[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
1067
+ end
1068
+ end
1069
+ end
1070
+ assert_equal str3, test
1071
+ test = book.shared_string 3
1072
+ if test != str4
1073
+ str4.size.times do |idx|
1074
+ len = idx.next
1075
+ if test[0,len] != str4[0,len]
1076
+ assert_equal str4[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
1077
+ end
1078
+ end
1079
+ end
1080
+ assert_equal str4, test
1081
+ assert_equal 2, book.worksheets.size
1082
+ sheet = book.worksheets.first
1083
+ assert_instance_of Spreadsheet::Excel::Worksheet, sheet
1084
+ assert_equal "Worksheet1", sheet.name
1085
+ assert_not_nil sheet.offset
1086
+ assert_not_nil col = sheet.column(1)
1087
+ assert_equal true, col.default_format.font.italic?
1088
+ assert_equal :blue, col.default_format.font.color
1089
+ row = sheet.row 0
1090
+ assert_equal col.default_format, row.format(1)
1091
+ assert_equal str1, row[0]
1092
+ assert_equal str1, sheet[0,0]
1093
+ assert_equal str1, sheet.cell(0,0)
1094
+ assert_equal str1, row[1]
1095
+ assert_equal str1, sheet[0,1]
1096
+ assert_equal str1, sheet.cell(0,1)
1097
+ row = sheet.row 1
1098
+ assert_equal str2, row[0]
1099
+ assert_equal str2, sheet[1,0]
1100
+ assert_equal str2, sheet.cell(1,0)
1101
+ assert_equal str2, row[1]
1102
+ assert_equal str2, sheet[1,1]
1103
+ assert_equal str2, sheet.cell(1,1)
1104
+ row = sheet.row 2
1105
+ assert_equal str3, row[0]
1106
+ assert_equal str3, sheet[2,0]
1107
+ assert_equal str3, sheet.cell(2,0)
1108
+ assert_nil row[1]
1109
+ assert_nil sheet[2,1]
1110
+ assert_nil sheet.cell(2,1)
1111
+ row = sheet.row 3
1112
+ assert_equal str4, row[0]
1113
+ assert_equal str4, sheet[3,0]
1114
+ assert_equal str4, sheet.cell(3,0)
1115
+ assert_nil row[1]
1116
+ assert_nil sheet[3,1]
1117
+ assert_nil sheet.cell(3,1)
1118
+ row = sheet.row 4
1119
+ assert_equal :red, row.format(0).font.color
1120
+ assert_equal 0.25, row[0]
1121
+ assert_equal 0.25, sheet[4,0]
1122
+ assert_equal 0.25, sheet.cell(4,0)
1123
+ row = sheet.row 5
1124
+ assert_equal :cyan, row.format(0).font.color
1125
+ assert_equal 0.75, row[0]
1126
+ assert_equal 0.75, sheet[5,0]
1127
+ assert_equal 0.75, sheet.cell(5,0)
1128
+ row = sheet.row 6
1129
+ assert_equal :green, row.format(0).font.color
1130
+ assert_equal 1, row[0]
1131
+ assert_equal 1, sheet[6,0]
1132
+ assert_equal 1, sheet.cell(6,0)
1133
+ assert_equal 'DD.MM.YYYY', row.format(1).number_format
1134
+ date = Date.new 2008, 10, 10
1135
+ assert_equal date, row[1]
1136
+ assert_equal date, sheet[6,1]
1137
+ assert_equal date, sheet.cell(6,1)
1138
+ assert_equal 'DD.MM.YYYY', row.format(2).number_format
1139
+ date = Date.new 2008, 10, 12
1140
+ assert_equal date, row[2]
1141
+ assert_equal date, sheet[6,2]
1142
+ assert_equal date, sheet.cell(6,2)
1143
+ row = sheet.row 7
1144
+ assert_nil row[0]
1145
+ assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
1146
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
1147
+ assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
1148
+ row = sheet.row 8
1149
+ assert_equal 'formatted when empty', row[0]
1150
+ assert_not_nil row.default_format
1151
+ assert_instance_of Spreadsheet::Excel::Worksheet, sheet
1152
+ sheet = book.worksheets.last
1153
+ assert_equal "my name",
1154
+ sheet.name
1155
+ assert_not_nil sheet.offset
1156
+ end
1157
+ def test_template
1158
+ template = File.join @data, 'test_copy.xls'
1159
+ output = File.join @var, 'test_template.xls'
1160
+ book = Spreadsheet.open template
1161
+ sheet1 = book.worksheet 0
1162
+ sheet1.row(4).replace [ 'Daniel J. Berger', 'U.S.A.',
1163
+ 'Author of original code for Spreadsheet::Excel' ]
1164
+ book.write output
1165
+ assert_nothing_raised do
1166
+ book = Spreadsheet.open output
1167
+ end
1168
+ sheet = book.worksheet 0
1169
+ row = sheet.row(4)
1170
+ assert_equal 'Daniel J. Berger', row[0]
1171
+ end
1172
+ def test_bignum
1173
+ smallnum = 0x1fffffff
1174
+ bignum = smallnum + 1
1175
+ book = Spreadsheet::Workbook.new
1176
+ sheet = book.create_worksheet
1177
+ sheet[0,0] = bignum
1178
+ sheet[1,0] = -bignum
1179
+ sheet[0,1] = smallnum
1180
+ sheet[1,1] = -smallnum
1181
+ sheet[0,2] = bignum - 0.1
1182
+ sheet[1,2] = -bignum - 0.1
1183
+ sheet[0,3] = smallnum - 0.1
1184
+ sheet[1,3] = -smallnum - 0.1
1185
+ path = File.join @var, 'test_big-number.xls'
1186
+ book.write path
1187
+ assert_nothing_raised do
1188
+ book = Spreadsheet.open path
1189
+ end
1190
+ assert_equal bignum, book.worksheet(0)[0,0]
1191
+ assert_equal(-bignum, book.worksheet(0)[1,0])
1192
+ assert_equal smallnum, book.worksheet(0)[0,1]
1193
+ assert_equal(-smallnum, book.worksheet(0)[1,1])
1194
+ assert_equal bignum - 0.1, book.worksheet(0)[0,2]
1195
+ assert_equal(-bignum - 0.1, book.worksheet(0)[1,2])
1196
+ assert_equal smallnum - 0.1, book.worksheet(0)[0,3]
1197
+ assert_equal(-smallnum - 0.1, book.worksheet(0)[1,3])
1198
+ end
1199
+ def test_bigfloat
1200
+ # reported in http://rubyforge.org/tracker/index.php?func=detail&aid=24119&group_id=678&atid=2677
1201
+ bigfloat = 10000000.0
1202
+ book = Spreadsheet::Workbook.new
1203
+ sheet = book.create_worksheet
1204
+ sheet[0,0] = bigfloat
1205
+ sheet[0,1] = bigfloat + 0.1
1206
+ sheet[0,2] = bigfloat - 0.1
1207
+ sheet[1,0] = -bigfloat
1208
+ sheet[1,1] = -bigfloat + 0.1
1209
+ sheet[1,2] = -bigfloat - 0.1
1210
+ path = File.join @var, 'test_big-float.xls'
1211
+ book.write path
1212
+ assert_nothing_raised do
1213
+ book = Spreadsheet.open path
1214
+ end
1215
+ sheet = book.worksheet(0)
1216
+ assert_equal bigfloat, sheet[0,0]
1217
+ assert_equal bigfloat + 0.1, sheet[0,1]
1218
+ assert_equal bigfloat - 0.1, sheet[0,2]
1219
+ assert_equal(-bigfloat, sheet[1,0])
1220
+ assert_equal(-bigfloat + 0.1, sheet[1,1])
1221
+ assert_equal(-bigfloat - 0.1, sheet[1,2])
1222
+ end
1223
+ def test_datetime__off_by_one
1224
+ # reported in http://rubyforge.org/tracker/index.php?func=detail&aid=24414&group_id=678&atid=2677
1225
+ datetime1 = DateTime.new(2008)
1226
+ datetime2 = DateTime.new(2008, 1, 1, 1, 0, 1)
1227
+ date1 = Date.new(2008)
1228
+ date2 = Date.new(2009)
1229
+ book = Spreadsheet::Workbook.new
1230
+ sheet = book.create_worksheet
1231
+ sheet[0,0] = datetime1
1232
+ sheet[0,1] = datetime2
1233
+ sheet[1,0] = date1
1234
+ sheet[1,1] = date2
1235
+ path = File.join @var, 'test_datetime.xls'
1236
+ book.write path
1237
+ assert_nothing_raised do
1238
+ book = Spreadsheet.open path
1239
+ end
1240
+ sheet = book.worksheet(0)
1241
+ assert_equal datetime1, sheet[0,0]
1242
+ assert_equal datetime2, sheet[0,1]
1243
+ assert_equal date1, sheet[1,0]
1244
+ assert_equal date2, sheet[1,1]
1245
+ assert_equal date1, sheet.row(0).date(0)
1246
+ assert_equal datetime1, sheet.row(1).datetime(0)
1247
+ end
1248
+ def test_sharedfmla
1249
+ path = File.join @data, 'test_formula.xls'
1250
+ book = Spreadsheet.open path
1251
+ assert_instance_of Excel::Workbook, book
1252
+ sheet = book.worksheet 0
1253
+ 64.times do |idx|
1254
+ assert_equal '5026', sheet[idx.next, 2].value
1255
+ end
1256
+ end
1257
+ def test_missing_row_op
1258
+ path = File.join @data, 'test_missing_row.xls'
1259
+ book = Spreadsheet.open path
1260
+ assert_instance_of Excel::Workbook, book
1261
+ sheet = book.worksheet 0
1262
+ assert_not_nil sheet[1,0]
1263
+ assert_not_nil sheet[2,1]
1264
+ end
1265
+ def test_changes
1266
+ path = File.join @data, 'test_changes.xls'
1267
+ book = Spreadsheet.open path
1268
+ assert_instance_of Excel::Workbook, book
1269
+ sheet = book.worksheet 1
1270
+ sheet[20,0] = 'Ciao Mundo!'
1271
+ target = File.join @var, 'test_changes.xls'
1272
+ assert_nothing_raised do book.write target end
1273
+ end
1274
+ def untest_read_baltic
1275
+ path = File.join @data, 'test_baltic.xls'
1276
+ assert_nothing_raised do
1277
+ Spreadsheet.open path
1278
+ end
1279
+ end
1280
+ end
1281
+ end