ttb-spreadsheet 0.6.5.8

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