ttb-spreadsheet 0.6.5.8

Sign up to get free protection for your applications and to get access to all the features.
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