keeguon-spreadsheet 0.9.3

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