spreadsheet 0.6.0
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.
- data/GUIDE.txt +209 -0
- data/History.txt +8 -0
- data/LICENSE.txt +619 -0
- data/Manifest.txt +46 -0
- data/README.txt +54 -0
- data/Rakefile +15 -0
- data/lib/parseexcel.rb +27 -0
- data/lib/parseexcel/parseexcel.rb +75 -0
- data/lib/parseexcel/parser.rb +11 -0
- data/lib/spreadsheet.rb +79 -0
- data/lib/spreadsheet/datatypes.rb +99 -0
- data/lib/spreadsheet/encodings.rb +49 -0
- data/lib/spreadsheet/excel.rb +75 -0
- data/lib/spreadsheet/excel/error.rb +26 -0
- data/lib/spreadsheet/excel/internals.rb +322 -0
- data/lib/spreadsheet/excel/internals/biff5.rb +17 -0
- data/lib/spreadsheet/excel/internals/biff8.rb +19 -0
- data/lib/spreadsheet/excel/offset.rb +37 -0
- data/lib/spreadsheet/excel/reader.rb +798 -0
- data/lib/spreadsheet/excel/reader/biff5.rb +22 -0
- data/lib/spreadsheet/excel/reader/biff8.rb +168 -0
- data/lib/spreadsheet/excel/row.rb +67 -0
- data/lib/spreadsheet/excel/sst_entry.rb +45 -0
- data/lib/spreadsheet/excel/workbook.rb +76 -0
- data/lib/spreadsheet/excel/worksheet.rb +85 -0
- data/lib/spreadsheet/excel/writer.rb +1 -0
- data/lib/spreadsheet/excel/writer/biff8.rb +66 -0
- data/lib/spreadsheet/excel/writer/format.rb +270 -0
- data/lib/spreadsheet/excel/writer/workbook.rb +586 -0
- data/lib/spreadsheet/excel/writer/worksheet.rb +556 -0
- data/lib/spreadsheet/font.rb +86 -0
- data/lib/spreadsheet/format.rb +172 -0
- data/lib/spreadsheet/formula.rb +9 -0
- data/lib/spreadsheet/row.rb +87 -0
- data/lib/spreadsheet/workbook.rb +120 -0
- data/lib/spreadsheet/worksheet.rb +215 -0
- data/lib/spreadsheet/writer.rb +29 -0
- data/test/data/test_copy.xls +0 -0
- data/test/data/test_version_excel5.xls +0 -0
- data/test/data/test_version_excel95.xls +0 -0
- data/test/data/test_version_excel97.xls +0 -0
- data/test/excel/row.rb +29 -0
- data/test/font.rb +163 -0
- data/test/integration.rb +1021 -0
- data/test/workbook.rb +21 -0
- data/test/worksheet.rb +62 -0
- metadata +113 -0
data/test/integration.rb
ADDED
@@ -0,0 +1,1021 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# TestIntegration -- Spreadheet -- 08.10.2007 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'spreadsheet'
|
8
|
+
require 'fileutils'
|
9
|
+
|
10
|
+
module Spreadsheet
|
11
|
+
class TestIntegration < Test::Unit::TestCase
|
12
|
+
@@iconv = Iconv.new('UTF-16LE', 'UTF8')
|
13
|
+
def setup
|
14
|
+
@var = File.expand_path 'var', File.dirname(__FILE__)
|
15
|
+
FileUtils.mkdir_p @var
|
16
|
+
@data = File.expand_path 'data', File.dirname(__FILE__)
|
17
|
+
FileUtils.mkdir_p @data
|
18
|
+
end
|
19
|
+
def teardown
|
20
|
+
Spreadsheet.client_encoding = 'UTF8'
|
21
|
+
FileUtils.rm_r @var
|
22
|
+
end
|
23
|
+
def test_copy__identical__file_paths
|
24
|
+
path = File.join @data, 'test_copy.xls'
|
25
|
+
copy = File.join @data, 'test_copy1.xls'
|
26
|
+
book = Spreadsheet.open path
|
27
|
+
assert_instance_of Excel::Workbook, book
|
28
|
+
book.write copy
|
29
|
+
assert_equal File.read(path), File.read(copy)
|
30
|
+
ensure
|
31
|
+
File.delete copy if File.exist? copy
|
32
|
+
end
|
33
|
+
def test_version_excel97__ooffice__utf16
|
34
|
+
Spreadsheet.client_encoding = 'UTF-16LE'
|
35
|
+
assert_equal 'UTF-16LE', Spreadsheet.client_encoding
|
36
|
+
path = File.join @data, 'test_version_excel97.xls'
|
37
|
+
book = Spreadsheet.open path
|
38
|
+
assert_instance_of Excel::Workbook, book
|
39
|
+
assert_equal 8, book.biff_version
|
40
|
+
assert_equal @@iconv.iconv('Microsoft Excel 97/2000/XP'),
|
41
|
+
book.version_string
|
42
|
+
enc = 'UTF-16LE'
|
43
|
+
if defined? Encoding
|
44
|
+
enc = Encoding.find enc
|
45
|
+
end
|
46
|
+
assert_equal enc, book.encoding
|
47
|
+
assert_equal 23, book.formats.size
|
48
|
+
assert_equal 4, book.fonts.size
|
49
|
+
str1 = book.shared_string 0
|
50
|
+
assert_equal @@iconv.iconv('Shared String'), str1
|
51
|
+
str2 = book.shared_string 1
|
52
|
+
assert_equal @@iconv.iconv('Another Shared String'), str2
|
53
|
+
str3 = book.shared_string 2
|
54
|
+
long = @@iconv.iconv('1234567890 ' * 1000)
|
55
|
+
if str3 != long
|
56
|
+
long.size.times do |idx|
|
57
|
+
len = idx.next
|
58
|
+
if str3[0,len] != long[0,len]
|
59
|
+
assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
assert_equal long, str3
|
64
|
+
str4 = book.shared_string 3
|
65
|
+
long = @@iconv.iconv('9876543210 ' * 1000)
|
66
|
+
if str4 != long
|
67
|
+
long.size.times do |idx|
|
68
|
+
len = idx.next
|
69
|
+
if str4[0,len] != long[0,len]
|
70
|
+
assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
assert_equal long, str4
|
75
|
+
sheet = book.worksheet 0
|
76
|
+
assert_equal 10, sheet.row_count
|
77
|
+
assert_equal 11, sheet.column_count
|
78
|
+
useds = [0,0,0,0,0,0,0,1,0,0]
|
79
|
+
unuseds = [2,2,1,1,1,2,1,11,1,1]
|
80
|
+
sheet.each do |row|
|
81
|
+
assert_equal useds.shift, row.first_used
|
82
|
+
assert_equal unuseds.shift, row.first_unused
|
83
|
+
end
|
84
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
85
|
+
row = sheet.row 0
|
86
|
+
assert_equal str1, row[0]
|
87
|
+
assert_equal str1, sheet[0,0]
|
88
|
+
assert_equal str1, sheet.cell(0,0)
|
89
|
+
assert_equal str1, row[1]
|
90
|
+
assert_equal str1, sheet[0,1]
|
91
|
+
assert_equal str1, sheet.cell(0,1)
|
92
|
+
row = sheet.row 1
|
93
|
+
assert_equal str2, row[0]
|
94
|
+
assert_equal str2, sheet[1,0]
|
95
|
+
assert_equal str2, sheet.cell(1,0)
|
96
|
+
assert_equal str2, row[1]
|
97
|
+
assert_equal str2, sheet[1,1]
|
98
|
+
assert_equal str2, sheet.cell(1,1)
|
99
|
+
row = sheet.row 2
|
100
|
+
assert_equal str3, row[0]
|
101
|
+
assert_equal str3, sheet[2,0]
|
102
|
+
assert_equal str3, sheet.cell(2,0)
|
103
|
+
assert_nil row[1]
|
104
|
+
assert_nil sheet[2,1]
|
105
|
+
assert_nil sheet.cell(2,1)
|
106
|
+
row = sheet.row 3
|
107
|
+
assert_equal str4, row[0]
|
108
|
+
assert_equal str4, sheet[3,0]
|
109
|
+
assert_equal str4, sheet.cell(3,0)
|
110
|
+
assert_nil row[1]
|
111
|
+
assert_nil sheet[3,1]
|
112
|
+
assert_nil sheet.cell(3,1)
|
113
|
+
row = sheet.row 4
|
114
|
+
assert_equal 0.25, row[0]
|
115
|
+
assert_equal 0.25, sheet[4,0]
|
116
|
+
assert_equal 0.25, sheet.cell(4,0)
|
117
|
+
row = sheet.row 5
|
118
|
+
assert_equal 0.75, row[0]
|
119
|
+
assert_equal 0.75, sheet[5,0]
|
120
|
+
assert_equal 0.75, sheet.cell(5,0)
|
121
|
+
date = Date.new 1975, 8, 21
|
122
|
+
assert_equal date, row[1]
|
123
|
+
assert_equal date, sheet[5,1]
|
124
|
+
assert_equal date, sheet.cell(5,1)
|
125
|
+
row = sheet.row 6
|
126
|
+
assert_equal 1, row[0]
|
127
|
+
assert_equal 1, sheet[6,0]
|
128
|
+
assert_equal 1, sheet.cell(6,0)
|
129
|
+
row = sheet.row 7
|
130
|
+
assert_nil row[0]
|
131
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
132
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
133
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
134
|
+
row = sheet.row 8
|
135
|
+
assert_equal 0.0001, row[0]
|
136
|
+
row = sheet.row 9
|
137
|
+
assert_equal 0.00009, row[0]
|
138
|
+
end
|
139
|
+
def test_version_excel97__ooffice
|
140
|
+
path = File.join @data, 'test_version_excel97.xls'
|
141
|
+
book = Spreadsheet.open path
|
142
|
+
assert_instance_of Excel::Workbook, book
|
143
|
+
assert_equal 8, book.biff_version
|
144
|
+
assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
|
145
|
+
enc = 'UTF-16LE'
|
146
|
+
if defined? Encoding
|
147
|
+
enc = Encoding.find enc
|
148
|
+
end
|
149
|
+
assert_equal enc, book.encoding
|
150
|
+
assert_equal 23, book.formats.size
|
151
|
+
assert_equal 4, book.fonts.size
|
152
|
+
str1 = book.shared_string 0
|
153
|
+
assert_equal 'Shared String', str1
|
154
|
+
str2 = book.shared_string 1
|
155
|
+
assert_equal 'Another Shared String', str2
|
156
|
+
str3 = book.shared_string 2
|
157
|
+
long = '1234567890 ' * 1000
|
158
|
+
if str3 != long
|
159
|
+
long.size.times do |idx|
|
160
|
+
len = idx.next
|
161
|
+
if str3[0,len] != long[0,len]
|
162
|
+
assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
assert_equal long, str3
|
167
|
+
str4 = book.shared_string 3
|
168
|
+
long = '9876543210 ' * 1000
|
169
|
+
if str4 != long
|
170
|
+
long.size.times do |idx|
|
171
|
+
len = idx.next
|
172
|
+
if str4[0,len] != long[0,len]
|
173
|
+
assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
assert_equal long, str4
|
178
|
+
sheet = book.worksheet 0
|
179
|
+
assert_equal 10, sheet.row_count
|
180
|
+
assert_equal 11, sheet.column_count
|
181
|
+
useds = [0,0,0,0,0,0,0,1,0,0]
|
182
|
+
unuseds = [2,2,1,1,1,2,1,11,1,1]
|
183
|
+
sheet.each do |row|
|
184
|
+
assert_equal useds.shift, row.first_used
|
185
|
+
assert_equal unuseds.shift, row.first_unused
|
186
|
+
end
|
187
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
188
|
+
row = sheet.row 0
|
189
|
+
assert_equal str1, row[0]
|
190
|
+
assert_equal str1, sheet[0,0]
|
191
|
+
assert_equal str1, sheet.cell(0,0)
|
192
|
+
assert_equal str1, row[1]
|
193
|
+
assert_equal str1, sheet[0,1]
|
194
|
+
assert_equal str1, sheet.cell(0,1)
|
195
|
+
row = sheet.row 1
|
196
|
+
assert_equal str2, row[0]
|
197
|
+
assert_equal str2, sheet[1,0]
|
198
|
+
assert_equal str2, sheet.cell(1,0)
|
199
|
+
assert_equal str2, row[1]
|
200
|
+
assert_equal str2, sheet[1,1]
|
201
|
+
assert_equal str2, sheet.cell(1,1)
|
202
|
+
row = sheet.row 2
|
203
|
+
assert_equal str3, row[0]
|
204
|
+
assert_equal str3, sheet[2,0]
|
205
|
+
assert_equal str3, sheet.cell(2,0)
|
206
|
+
assert_nil row[1]
|
207
|
+
assert_nil sheet[2,1]
|
208
|
+
assert_nil sheet.cell(2,1)
|
209
|
+
row = sheet.row 3
|
210
|
+
assert_equal str4, row[0]
|
211
|
+
assert_equal str4, sheet[3,0]
|
212
|
+
assert_equal str4, sheet.cell(3,0)
|
213
|
+
assert_nil row[1]
|
214
|
+
assert_nil sheet[3,1]
|
215
|
+
assert_nil sheet.cell(3,1)
|
216
|
+
row = sheet.row 4
|
217
|
+
assert_equal 0.25, row[0]
|
218
|
+
assert_equal 0.25, sheet[4,0]
|
219
|
+
assert_equal 0.25, sheet.cell(4,0)
|
220
|
+
row = sheet.row 5
|
221
|
+
assert_equal 0.75, row[0]
|
222
|
+
assert_equal 0.75, sheet[5,0]
|
223
|
+
assert_equal 0.75, sheet.cell(5,0)
|
224
|
+
date = Date.new 1975, 8, 21
|
225
|
+
assert_equal date, row[1]
|
226
|
+
assert_equal date, sheet[5,1]
|
227
|
+
assert_equal date, sheet.cell(5,1)
|
228
|
+
row = sheet.row 6
|
229
|
+
assert_equal 1, row[0]
|
230
|
+
assert_equal 1, sheet[6,0]
|
231
|
+
assert_equal 1, sheet.cell(6,0)
|
232
|
+
row = sheet.row 7
|
233
|
+
assert_nil row[0]
|
234
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
235
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
236
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
237
|
+
row = sheet.row 8
|
238
|
+
assert_equal 0.0001, row[0]
|
239
|
+
row = sheet.row 9
|
240
|
+
assert_equal 0.00009, row[0]
|
241
|
+
end
|
242
|
+
def test_version_excel95__ooffice__utf16
|
243
|
+
Spreadsheet.client_encoding = 'UTF-16LE'
|
244
|
+
path = File.join @data, 'test_version_excel95.xls'
|
245
|
+
book = Spreadsheet.open path
|
246
|
+
assert_instance_of Excel::Workbook, book
|
247
|
+
assert_equal 5, book.biff_version
|
248
|
+
assert_equal @@iconv.iconv('Microsoft Excel 95'), book.version_string
|
249
|
+
enc = 'WINDOWS-1252'
|
250
|
+
if defined? Encoding
|
251
|
+
enc = Encoding.find enc
|
252
|
+
end
|
253
|
+
assert_equal enc, book.encoding
|
254
|
+
str1 = @@iconv.iconv('Shared String')
|
255
|
+
str2 = @@iconv.iconv('Another Shared String')
|
256
|
+
str3 = @@iconv.iconv(('1234567890 ' * 26)[0,255])
|
257
|
+
str4 = @@iconv.iconv(('9876543210 ' * 26)[0,255])
|
258
|
+
sheet = book.worksheet 0
|
259
|
+
assert_equal 8, sheet.row_count
|
260
|
+
assert_equal 11, sheet.column_count
|
261
|
+
useds = [0,0,0,0,0,0,0,1]
|
262
|
+
unuseds = [2,2,1,1,1,1,1,11]
|
263
|
+
sheet.each do |row|
|
264
|
+
assert_equal useds.shift, row.first_used
|
265
|
+
assert_equal unuseds.shift, row.first_unused
|
266
|
+
end
|
267
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
268
|
+
row = sheet.row 0
|
269
|
+
assert_equal str1, row[0]
|
270
|
+
assert_equal str1, sheet[0,0]
|
271
|
+
assert_equal str1, sheet.cell(0,0)
|
272
|
+
assert_equal str1, row[1]
|
273
|
+
assert_equal str1, sheet[0,1]
|
274
|
+
assert_equal str1, sheet.cell(0,1)
|
275
|
+
row = sheet.row 1
|
276
|
+
assert_equal str2, row[0]
|
277
|
+
assert_equal str2, sheet[1,0]
|
278
|
+
assert_equal str2, sheet.cell(1,0)
|
279
|
+
assert_equal str2, row[1]
|
280
|
+
assert_equal str2, sheet[1,1]
|
281
|
+
assert_equal str2, sheet.cell(1,1)
|
282
|
+
row = sheet.row 2
|
283
|
+
assert_equal 510, row[0].size
|
284
|
+
assert_equal str3, row[0]
|
285
|
+
assert_equal str3, sheet[2,0]
|
286
|
+
assert_equal str3, sheet.cell(2,0)
|
287
|
+
assert_nil row[1]
|
288
|
+
assert_nil sheet[2,1]
|
289
|
+
assert_nil sheet.cell(2,1)
|
290
|
+
row = sheet.row 3
|
291
|
+
assert_equal 510, row[0].size
|
292
|
+
assert_equal str4, row[0]
|
293
|
+
assert_equal str4, sheet[3,0]
|
294
|
+
assert_equal str4, sheet.cell(3,0)
|
295
|
+
assert_nil row[1]
|
296
|
+
assert_nil sheet[3,1]
|
297
|
+
assert_nil sheet.cell(3,1)
|
298
|
+
row = sheet.row 4
|
299
|
+
assert_equal 0.25, row[0]
|
300
|
+
assert_equal 0.25, sheet[4,0]
|
301
|
+
assert_equal 0.25, sheet.cell(4,0)
|
302
|
+
row = sheet.row 5
|
303
|
+
assert_equal 0.75, row[0]
|
304
|
+
assert_equal 0.75, sheet[5,0]
|
305
|
+
assert_equal 0.75, sheet.cell(5,0)
|
306
|
+
row = sheet.row 6
|
307
|
+
assert_equal 1, row[0]
|
308
|
+
assert_equal 1, sheet[6,0]
|
309
|
+
assert_equal 1, sheet.cell(6,0)
|
310
|
+
row = sheet.row 7
|
311
|
+
assert_nil row[0]
|
312
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
313
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
314
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
315
|
+
end
|
316
|
+
def test_version_excel95__ooffice
|
317
|
+
path = File.join @data, 'test_version_excel95.xls'
|
318
|
+
book = Spreadsheet.open path
|
319
|
+
assert_instance_of Excel::Workbook, book
|
320
|
+
assert_equal 5, book.biff_version
|
321
|
+
assert_equal 'Microsoft Excel 95', book.version_string
|
322
|
+
enc = 'WINDOWS-1252'
|
323
|
+
if defined? Encoding
|
324
|
+
enc = Encoding.find enc
|
325
|
+
end
|
326
|
+
assert_equal enc, book.encoding
|
327
|
+
str1 = 'Shared String'
|
328
|
+
str2 = 'Another Shared String'
|
329
|
+
str3 = ('1234567890 ' * 26)[0,255]
|
330
|
+
str4 = ('9876543210 ' * 26)[0,255]
|
331
|
+
sheet = book.worksheet 0
|
332
|
+
assert_equal 8, sheet.row_count
|
333
|
+
assert_equal 11, sheet.column_count
|
334
|
+
useds = [0,0,0,0,0,0,0,1]
|
335
|
+
unuseds = [2,2,1,1,1,1,1,11]
|
336
|
+
sheet.each do |row|
|
337
|
+
assert_equal useds.shift, row.first_used
|
338
|
+
assert_equal unuseds.shift, row.first_unused
|
339
|
+
end
|
340
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
341
|
+
row = sheet.row 0
|
342
|
+
assert_equal str1, row[0]
|
343
|
+
assert_equal str1, sheet[0,0]
|
344
|
+
assert_equal str1, sheet.cell(0,0)
|
345
|
+
assert_equal str1, row[1]
|
346
|
+
assert_equal str1, sheet[0,1]
|
347
|
+
assert_equal str1, sheet.cell(0,1)
|
348
|
+
row = sheet.row 1
|
349
|
+
assert_equal str2, row[0]
|
350
|
+
assert_equal str2, sheet[1,0]
|
351
|
+
assert_equal str2, sheet.cell(1,0)
|
352
|
+
assert_equal str2, row[1]
|
353
|
+
assert_equal str2, sheet[1,1]
|
354
|
+
assert_equal str2, sheet.cell(1,1)
|
355
|
+
row = sheet.row 2
|
356
|
+
assert_equal 255, row[0].size
|
357
|
+
assert_equal str3, row[0]
|
358
|
+
assert_equal str3, sheet[2,0]
|
359
|
+
assert_equal str3, sheet.cell(2,0)
|
360
|
+
assert_nil row[1]
|
361
|
+
assert_nil sheet[2,1]
|
362
|
+
assert_nil sheet.cell(2,1)
|
363
|
+
row = sheet.row 3
|
364
|
+
assert_equal 255, row[0].size
|
365
|
+
assert_equal str4, row[0]
|
366
|
+
assert_equal str4, sheet[3,0]
|
367
|
+
assert_equal str4, sheet.cell(3,0)
|
368
|
+
assert_nil row[1]
|
369
|
+
assert_nil sheet[3,1]
|
370
|
+
assert_nil sheet.cell(3,1)
|
371
|
+
row = sheet.row 4
|
372
|
+
assert_equal 0.25, row[0]
|
373
|
+
assert_equal 0.25, sheet[4,0]
|
374
|
+
assert_equal 0.25, sheet.cell(4,0)
|
375
|
+
row = sheet.row 5
|
376
|
+
assert_equal 0.75, row[0]
|
377
|
+
assert_equal 0.75, sheet[5,0]
|
378
|
+
assert_equal 0.75, sheet.cell(5,0)
|
379
|
+
row = sheet.row 6
|
380
|
+
assert_equal 1, row[0]
|
381
|
+
assert_equal 1, sheet[6,0]
|
382
|
+
assert_equal 1, sheet.cell(6,0)
|
383
|
+
row = sheet.row 7
|
384
|
+
assert_nil row[0]
|
385
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
386
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
387
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
388
|
+
end
|
389
|
+
def test_version_excel5__ooffice
|
390
|
+
path = File.join @data, 'test_version_excel5.xls'
|
391
|
+
book = Spreadsheet.open path
|
392
|
+
assert_instance_of Excel::Workbook, book
|
393
|
+
assert_equal 5, book.biff_version
|
394
|
+
assert_equal 'Microsoft Excel 95', book.version_string
|
395
|
+
enc = 'WINDOWS-1252'
|
396
|
+
if defined? Encoding
|
397
|
+
enc = Encoding.find enc
|
398
|
+
end
|
399
|
+
assert_equal enc, book.encoding
|
400
|
+
str1 = 'Shared String'
|
401
|
+
str2 = 'Another Shared String'
|
402
|
+
str3 = ('1234567890 ' * 26)[0,255]
|
403
|
+
str4 = ('9876543210 ' * 26)[0,255]
|
404
|
+
sheet = book.worksheet 0
|
405
|
+
assert_equal 8, sheet.row_count
|
406
|
+
assert_equal 11, sheet.column_count
|
407
|
+
useds = [0,0,0,0,0,0,0,1]
|
408
|
+
unuseds = [2,2,1,1,1,1,1,11]
|
409
|
+
sheet.each do |row|
|
410
|
+
assert_equal useds.shift, row.first_used
|
411
|
+
assert_equal unuseds.shift, row.first_unused
|
412
|
+
end
|
413
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
414
|
+
row = sheet.row 0
|
415
|
+
assert_equal str1, row[0]
|
416
|
+
assert_equal str1, sheet[0,0]
|
417
|
+
assert_equal str1, sheet.cell(0,0)
|
418
|
+
assert_equal str1, row[1]
|
419
|
+
assert_equal str1, sheet[0,1]
|
420
|
+
assert_equal str1, sheet.cell(0,1)
|
421
|
+
row = sheet.row 1
|
422
|
+
assert_equal str2, row[0]
|
423
|
+
assert_equal str2, sheet[1,0]
|
424
|
+
assert_equal str2, sheet.cell(1,0)
|
425
|
+
assert_equal str2, row[1]
|
426
|
+
assert_equal str2, sheet[1,1]
|
427
|
+
assert_equal str2, sheet.cell(1,1)
|
428
|
+
row = sheet.row 2
|
429
|
+
assert_equal 255, row[0].size
|
430
|
+
assert_equal str3, row[0]
|
431
|
+
assert_equal str3, sheet[2,0]
|
432
|
+
assert_equal str3, sheet.cell(2,0)
|
433
|
+
assert_nil row[1]
|
434
|
+
assert_nil sheet[2,1]
|
435
|
+
assert_nil sheet.cell(2,1)
|
436
|
+
row = sheet.row 3
|
437
|
+
assert_equal 255, row[0].size
|
438
|
+
assert_equal str4, row[0]
|
439
|
+
assert_equal str4, sheet[3,0]
|
440
|
+
assert_equal str4, sheet.cell(3,0)
|
441
|
+
assert_nil row[1]
|
442
|
+
assert_nil sheet[3,1]
|
443
|
+
assert_nil sheet.cell(3,1)
|
444
|
+
row = sheet.row 4
|
445
|
+
assert_equal 0.25, row[0]
|
446
|
+
assert_equal 0.25, sheet[4,0]
|
447
|
+
assert_equal 0.25, sheet.cell(4,0)
|
448
|
+
row = sheet.row 5
|
449
|
+
assert_equal 0.75, row[0]
|
450
|
+
assert_equal 0.75, sheet[5,0]
|
451
|
+
assert_equal 0.75, sheet.cell(5,0)
|
452
|
+
row = sheet.row 6
|
453
|
+
assert_equal 1, row[0]
|
454
|
+
assert_equal 1, sheet[6,0]
|
455
|
+
assert_equal 1, sheet.cell(6,0)
|
456
|
+
row = sheet.row 7
|
457
|
+
assert_nil row[0]
|
458
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
459
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
460
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
461
|
+
end
|
462
|
+
def test_worksheets
|
463
|
+
path = File.join @data, 'test_copy.xls'
|
464
|
+
book = Spreadsheet.open path
|
465
|
+
sheets = book.worksheets
|
466
|
+
assert_equal 3, sheets.size
|
467
|
+
sheet = book.worksheet 0
|
468
|
+
assert_instance_of Excel::Worksheet, sheet
|
469
|
+
assert_equal sheet, book.worksheet('Sheet1')
|
470
|
+
end
|
471
|
+
def test_worksheets__utf16
|
472
|
+
Spreadsheet.client_encoding = 'UTF-16LE'
|
473
|
+
path = File.join @data, 'test_copy.xls'
|
474
|
+
book = Spreadsheet.open path
|
475
|
+
sheets = book.worksheets
|
476
|
+
assert_equal 3, sheets.size
|
477
|
+
sheet = book.worksheet 0
|
478
|
+
assert_instance_of Excel::Worksheet, sheet
|
479
|
+
assert_equal sheet, book.worksheet("S\000h\000e\000e\000t\0001\000")
|
480
|
+
end
|
481
|
+
def test_change_encoding
|
482
|
+
path = File.join @data, 'test_version_excel95.xls'
|
483
|
+
book = Spreadsheet.open path
|
484
|
+
assert_instance_of Excel::Workbook, book
|
485
|
+
assert_equal 5, book.biff_version
|
486
|
+
assert_equal 'Microsoft Excel 95', book.version_string
|
487
|
+
enc = 'WINDOWS-1252'
|
488
|
+
if defined? Encoding
|
489
|
+
enc = Encoding.find enc
|
490
|
+
end
|
491
|
+
assert_equal enc, book.encoding
|
492
|
+
enc = 'WINDOWS-1256'
|
493
|
+
if defined? Encoding
|
494
|
+
enc = Encoding.find enc
|
495
|
+
end
|
496
|
+
book.encoding = enc
|
497
|
+
path = File.join @var, 'test_change_encoding.xls'
|
498
|
+
book.write path
|
499
|
+
assert_nothing_raised do book = Spreadsheet.open path end
|
500
|
+
assert_equal enc, book.encoding
|
501
|
+
end
|
502
|
+
def test_change_cell
|
503
|
+
path = File.join @data, 'test_version_excel97.xls'
|
504
|
+
book = Spreadsheet.open path
|
505
|
+
assert_instance_of Excel::Workbook, book
|
506
|
+
assert_equal 8, book.biff_version
|
507
|
+
assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
|
508
|
+
path = File.join @var, 'test_change_cell.xls'
|
509
|
+
str1 = book.shared_string 0
|
510
|
+
assert_equal 'Shared String', str1
|
511
|
+
str2 = book.shared_string 1
|
512
|
+
assert_equal 'Another Shared String', str2
|
513
|
+
str3 = book.shared_string 2
|
514
|
+
long = '1234567890 ' * 1000
|
515
|
+
if str3 != long
|
516
|
+
long.size.times do |idx|
|
517
|
+
len = idx.next
|
518
|
+
if str3[0,len] != long[0,len]
|
519
|
+
assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
|
520
|
+
end
|
521
|
+
end
|
522
|
+
end
|
523
|
+
assert_equal long, str3
|
524
|
+
str4 = book.shared_string 3
|
525
|
+
long = '9876543210 ' * 1000
|
526
|
+
if str4 != long
|
527
|
+
long.size.times do |idx|
|
528
|
+
len = idx.next
|
529
|
+
if str4[0,len] != long[0,len]
|
530
|
+
assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
|
531
|
+
end
|
532
|
+
end
|
533
|
+
end
|
534
|
+
assert_equal long, str4
|
535
|
+
sheet = book.worksheet 0
|
536
|
+
sheet[0,0] = 4
|
537
|
+
row = sheet.row 1
|
538
|
+
row[0] = 3
|
539
|
+
book.write path
|
540
|
+
assert_nothing_raised do book = Spreadsheet.open path end
|
541
|
+
sheet = book.worksheet 0
|
542
|
+
assert_equal 10, sheet.row_count
|
543
|
+
assert_equal 11, sheet.column_count
|
544
|
+
useds = [0,0,0,0,0,0,0,1,0,0]
|
545
|
+
unuseds = [2,2,1,1,1,2,1,11,1,1]
|
546
|
+
sheet.each do |row|
|
547
|
+
assert_equal useds.shift, row.first_used
|
548
|
+
assert_equal unuseds.shift, row.first_unused
|
549
|
+
end
|
550
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
551
|
+
row = sheet.row 0
|
552
|
+
assert_equal 4, row[0]
|
553
|
+
assert_equal 4, sheet[0,0]
|
554
|
+
assert_equal 4, sheet.cell(0,0)
|
555
|
+
assert_equal str1, row[1]
|
556
|
+
assert_equal str1, sheet[0,1]
|
557
|
+
assert_equal str1, sheet.cell(0,1)
|
558
|
+
row = sheet.row 1
|
559
|
+
assert_equal 3, row[0]
|
560
|
+
assert_equal 3, sheet[1,0]
|
561
|
+
assert_equal 3, sheet.cell(1,0)
|
562
|
+
assert_equal str2, row[1]
|
563
|
+
assert_equal str2, sheet[1,1]
|
564
|
+
assert_equal str2, sheet.cell(1,1)
|
565
|
+
row = sheet.row 2
|
566
|
+
assert_equal str3, row[0]
|
567
|
+
assert_equal str3, sheet[2,0]
|
568
|
+
assert_equal str3, sheet.cell(2,0)
|
569
|
+
assert_nil row[1]
|
570
|
+
assert_nil sheet[2,1]
|
571
|
+
assert_nil sheet.cell(2,1)
|
572
|
+
row = sheet.row 3
|
573
|
+
assert_equal str4, row[0]
|
574
|
+
assert_equal str4, sheet[3,0]
|
575
|
+
assert_equal str4, sheet.cell(3,0)
|
576
|
+
assert_nil row[1]
|
577
|
+
assert_nil sheet[3,1]
|
578
|
+
assert_nil sheet.cell(3,1)
|
579
|
+
row = sheet.row 4
|
580
|
+
assert_equal 0.25, row[0]
|
581
|
+
assert_equal 0.25, sheet[4,0]
|
582
|
+
assert_equal 0.25, sheet.cell(4,0)
|
583
|
+
row = sheet.row 5
|
584
|
+
assert_equal 0.75, row[0]
|
585
|
+
assert_equal 0.75, sheet[5,0]
|
586
|
+
assert_equal 0.75, sheet.cell(5,0)
|
587
|
+
date = Date.new 1975, 8, 21
|
588
|
+
assert_equal date, row[1]
|
589
|
+
assert_equal date, sheet[5,1]
|
590
|
+
assert_equal date, sheet.cell(5,1)
|
591
|
+
row = sheet.row 6
|
592
|
+
assert_equal 1, row[0]
|
593
|
+
assert_equal 1, sheet[6,0]
|
594
|
+
assert_equal 1, sheet.cell(6,0)
|
595
|
+
row = sheet.row 7
|
596
|
+
assert_nil row[0]
|
597
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
598
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
599
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
600
|
+
row = sheet.row 8
|
601
|
+
assert_equal 0.0001, row[0]
|
602
|
+
row = sheet.row 9
|
603
|
+
assert_equal 0.00009, row[0]
|
604
|
+
end
|
605
|
+
def test_change_cell__complete_sst_rewrite
|
606
|
+
path = File.join @data, 'test_version_excel97.xls'
|
607
|
+
book = Spreadsheet.open path
|
608
|
+
assert_instance_of Excel::Workbook, book
|
609
|
+
assert_equal 8, book.biff_version
|
610
|
+
assert_equal 'Microsoft Excel 97/2000/XP', book.version_string
|
611
|
+
path = File.join @var, 'test_change_cell.xls'
|
612
|
+
str1 = book.shared_string 0
|
613
|
+
assert_equal 'Shared String', str1
|
614
|
+
str2 = book.shared_string 1
|
615
|
+
assert_equal 'Another Shared String', str2
|
616
|
+
str3 = book.shared_string 2
|
617
|
+
long = '1234567890 ' * 1000
|
618
|
+
if str3 != long
|
619
|
+
long.size.times do |idx|
|
620
|
+
len = idx.next
|
621
|
+
if str3[0,len] != long[0,len]
|
622
|
+
assert_equal long[idx - 5, 10], str3[idx - 5, 10], "in position #{idx}"
|
623
|
+
end
|
624
|
+
end
|
625
|
+
end
|
626
|
+
assert_equal long, str3
|
627
|
+
str4 = book.shared_string 3
|
628
|
+
long = '9876543210 ' * 1000
|
629
|
+
if str4 != long
|
630
|
+
long.size.times do |idx|
|
631
|
+
len = idx.next
|
632
|
+
if str4[0,len] != long[0,len]
|
633
|
+
assert_equal long[idx - 5, 10], str4[idx - 5, 10], "in position #{idx}"
|
634
|
+
end
|
635
|
+
end
|
636
|
+
end
|
637
|
+
assert_equal long, str4
|
638
|
+
sheet = book.worksheet 0
|
639
|
+
sheet[0,0] = 4
|
640
|
+
str5 = 'A completely different String'
|
641
|
+
sheet[0,1] = str5
|
642
|
+
row = sheet.row 1
|
643
|
+
row[0] = 3
|
644
|
+
book.write path
|
645
|
+
assert_nothing_raised do book = Spreadsheet.open path end
|
646
|
+
assert_equal str5, book.shared_string(0)
|
647
|
+
assert_equal str2, book.shared_string(1)
|
648
|
+
assert_equal str3, book.shared_string(2)
|
649
|
+
assert_equal str4, book.shared_string(3)
|
650
|
+
sheet = book.worksheet 0
|
651
|
+
assert_equal 10, sheet.row_count
|
652
|
+
assert_equal 11, sheet.column_count
|
653
|
+
useds = [0,0,0,0,0,0,0,1,0,0]
|
654
|
+
unuseds = [2,2,1,1,1,2,1,11,1,1]
|
655
|
+
sheet.each do |row|
|
656
|
+
assert_equal useds.shift, row.first_used
|
657
|
+
assert_equal unuseds.shift, row.first_unused
|
658
|
+
end
|
659
|
+
assert unuseds.empty?, "not all rows were visited in Spreadsheet#each"
|
660
|
+
row = sheet.row 0
|
661
|
+
assert_equal 4, row[0]
|
662
|
+
assert_equal 4, sheet[0,0]
|
663
|
+
assert_equal 4, sheet.cell(0,0)
|
664
|
+
assert_equal str5, row[1]
|
665
|
+
assert_equal str5, sheet[0,1]
|
666
|
+
assert_equal str5, sheet.cell(0,1)
|
667
|
+
row = sheet.row 1
|
668
|
+
assert_equal 3, row[0]
|
669
|
+
assert_equal 3, sheet[1,0]
|
670
|
+
assert_equal 3, sheet.cell(1,0)
|
671
|
+
assert_equal str2, row[1]
|
672
|
+
assert_equal str2, sheet[1,1]
|
673
|
+
assert_equal str2, sheet.cell(1,1)
|
674
|
+
row = sheet.row 2
|
675
|
+
assert_equal str3, row[0]
|
676
|
+
assert_equal str3, sheet[2,0]
|
677
|
+
assert_equal str3, sheet.cell(2,0)
|
678
|
+
assert_nil row[1]
|
679
|
+
assert_nil sheet[2,1]
|
680
|
+
assert_nil sheet.cell(2,1)
|
681
|
+
row = sheet.row 3
|
682
|
+
assert_equal str4, row[0]
|
683
|
+
assert_equal str4, sheet[3,0]
|
684
|
+
assert_equal str4, sheet.cell(3,0)
|
685
|
+
assert_nil row[1]
|
686
|
+
assert_nil sheet[3,1]
|
687
|
+
assert_nil sheet.cell(3,1)
|
688
|
+
row = sheet.row 4
|
689
|
+
assert_equal 0.25, row[0]
|
690
|
+
assert_equal 0.25, sheet[4,0]
|
691
|
+
assert_equal 0.25, sheet.cell(4,0)
|
692
|
+
row = sheet.row 5
|
693
|
+
assert_equal 0.75, row[0]
|
694
|
+
assert_equal 0.75, sheet[5,0]
|
695
|
+
assert_equal 0.75, sheet.cell(5,0)
|
696
|
+
date = Date.new 1975, 8, 21
|
697
|
+
assert_equal date, row[1]
|
698
|
+
assert_equal date, sheet[5,1]
|
699
|
+
assert_equal date, sheet.cell(5,1)
|
700
|
+
row = sheet.row 6
|
701
|
+
assert_equal 1, row[0]
|
702
|
+
assert_equal 1, sheet[6,0]
|
703
|
+
assert_equal 1, sheet.cell(6,0)
|
704
|
+
row = sheet.row 7
|
705
|
+
assert_nil row[0]
|
706
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
707
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
708
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
709
|
+
row = sheet.row 8
|
710
|
+
assert_equal 0.0001, row[0]
|
711
|
+
row = sheet.row 9
|
712
|
+
assert_equal 0.00009, row[0]
|
713
|
+
end
|
714
|
+
def test_write_new_workbook
|
715
|
+
book = Spreadsheet::Excel::Workbook.new
|
716
|
+
path = File.join @var, 'test_write_workbook.xls'
|
717
|
+
sheet1 = book.create_worksheet
|
718
|
+
str1 = 'Shared String'
|
719
|
+
str2 = 'Another Shared String'
|
720
|
+
str3 = '1234567890 ' * 1000
|
721
|
+
str4 = '9876543210 ' * 1000
|
722
|
+
sheet1[0,0] = str1
|
723
|
+
sheet1.row(0).push str1
|
724
|
+
sheet1.row(1).concat [str2, str2]
|
725
|
+
sheet1[2,0] = str3
|
726
|
+
sheet1[3,0] = str4
|
727
|
+
fmt = Format.new :color => 'red'
|
728
|
+
sheet1[4,0] = 0.25
|
729
|
+
sheet1.row(4).set_format 0, fmt
|
730
|
+
fmt = Format.new :color => 'aqua'
|
731
|
+
sheet1[5,0] = 0.75
|
732
|
+
sheet1.row(5).set_format 0, fmt
|
733
|
+
sheet1[6,0] = 1
|
734
|
+
fmt = Format.new :color => 'green'
|
735
|
+
sheet1.row(6).set_format 0, fmt
|
736
|
+
sheet1[6,1] = Date.new 2008, 10, 10
|
737
|
+
sheet1[6,2] = Date.new 2008, 10, 12
|
738
|
+
fmt = Format.new :number_format => 'DD.MM.YYYY'
|
739
|
+
sheet1.row(6).set_format 1, fmt
|
740
|
+
sheet1.update_row 7, nil, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
|
741
|
+
sheet1[8,0] = 0.0005
|
742
|
+
sheet1[8,1] = 0.005
|
743
|
+
sheet1[8,2] = 0.05
|
744
|
+
sheet1[8,3] = 10.5
|
745
|
+
sheet1[8,4] = 1.05
|
746
|
+
sheet1[8,5] = 100.5
|
747
|
+
sheet1[8,6] = 10.05
|
748
|
+
sheet1[8,7] = 1.005
|
749
|
+
sheet1[9,0] = 100.5
|
750
|
+
sheet1[9,1] = 10.05
|
751
|
+
sheet1[9,2] = 1.005
|
752
|
+
sheet1[9,3] = 1000.5
|
753
|
+
sheet1[9,4] = 100.05
|
754
|
+
sheet1[9,5] = 10.005
|
755
|
+
sheet1[9,6] = 1.0005
|
756
|
+
sheet1[10,0] = 10000.5
|
757
|
+
sheet1[10,1] = 1000.05
|
758
|
+
sheet1[10,2] = 100.005
|
759
|
+
sheet1[10,3] = 10.0005
|
760
|
+
sheet1[10,4] = 1.00005
|
761
|
+
sheet1.insert_row 9, ['a', 'b', 'c']
|
762
|
+
assert_equal 'a', sheet1[9,0]
|
763
|
+
assert_equal 'b', sheet1[9,1]
|
764
|
+
assert_equal 'c', sheet1[9,2]
|
765
|
+
sheet1.delete_row 9
|
766
|
+
sheet2 = book.create_worksheet :name => 'my name'
|
767
|
+
book.write path
|
768
|
+
Spreadsheet.client_encoding = 'UTF-16LE'
|
769
|
+
str1 = @@iconv.iconv str1
|
770
|
+
str2 = @@iconv.iconv str2
|
771
|
+
str3 = @@iconv.iconv str3
|
772
|
+
str4 = @@iconv.iconv str4
|
773
|
+
assert_nothing_raised do book = Spreadsheet.open path end
|
774
|
+
assert_equal 'UTF-16LE', book.encoding
|
775
|
+
assert_equal str1, book.shared_string(0)
|
776
|
+
assert_equal str2, book.shared_string(1)
|
777
|
+
test = book.shared_string 2
|
778
|
+
if test != str3
|
779
|
+
str3.size.times do |idx|
|
780
|
+
len = idx.next
|
781
|
+
if test[0,len] != str3[0,len]
|
782
|
+
assert_equal str3[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
|
783
|
+
end
|
784
|
+
end
|
785
|
+
end
|
786
|
+
assert_equal str3, test
|
787
|
+
test = book.shared_string 3
|
788
|
+
if test != str4
|
789
|
+
str4.size.times do |idx|
|
790
|
+
len = idx.next
|
791
|
+
if test[0,len] != str4[0,len]
|
792
|
+
assert_equal str4[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
|
793
|
+
end
|
794
|
+
end
|
795
|
+
end
|
796
|
+
assert_equal str4, test
|
797
|
+
assert_equal 2, book.worksheets.size
|
798
|
+
sheet = book.worksheets.first
|
799
|
+
assert_instance_of Spreadsheet::Excel::Worksheet, sheet
|
800
|
+
assert_equal "W\000o\000r\000k\000s\000h\000e\000e\000t\0001\000",
|
801
|
+
sheet.name
|
802
|
+
assert_not_nil sheet.offset
|
803
|
+
row = sheet.row 0
|
804
|
+
assert_equal str1, row[0]
|
805
|
+
assert_equal str1, sheet[0,0]
|
806
|
+
assert_equal str1, sheet.cell(0,0)
|
807
|
+
assert_equal str1, row[1]
|
808
|
+
assert_equal str1, sheet[0,1]
|
809
|
+
assert_equal str1, sheet.cell(0,1)
|
810
|
+
row = sheet.row 1
|
811
|
+
assert_equal str2, row[0]
|
812
|
+
assert_equal str2, sheet[1,0]
|
813
|
+
assert_equal str2, sheet.cell(1,0)
|
814
|
+
assert_equal str2, row[1]
|
815
|
+
assert_equal str2, sheet[1,1]
|
816
|
+
assert_equal str2, sheet.cell(1,1)
|
817
|
+
row = sheet.row 2
|
818
|
+
assert_equal str3, row[0]
|
819
|
+
assert_equal str3, sheet[2,0]
|
820
|
+
assert_equal str3, sheet.cell(2,0)
|
821
|
+
assert_nil row[1]
|
822
|
+
assert_nil sheet[2,1]
|
823
|
+
assert_nil sheet.cell(2,1)
|
824
|
+
row = sheet.row 3
|
825
|
+
assert_equal str4, row[0]
|
826
|
+
assert_equal str4, sheet[3,0]
|
827
|
+
assert_equal str4, sheet.cell(3,0)
|
828
|
+
assert_nil row[1]
|
829
|
+
assert_nil sheet[3,1]
|
830
|
+
assert_nil sheet.cell(3,1)
|
831
|
+
row = sheet.row 4
|
832
|
+
assert_equal :red, row.format(0).font.color
|
833
|
+
assert_equal 0.25, row[0]
|
834
|
+
assert_equal 0.25, sheet[4,0]
|
835
|
+
assert_equal 0.25, sheet.cell(4,0)
|
836
|
+
row = sheet.row 5
|
837
|
+
assert_equal :cyan, row.format(0).font.color
|
838
|
+
assert_equal 0.75, row[0]
|
839
|
+
assert_equal 0.75, sheet[5,0]
|
840
|
+
assert_equal 0.75, sheet.cell(5,0)
|
841
|
+
row = sheet.row 6
|
842
|
+
assert_equal :green, row.format(0).font.color
|
843
|
+
assert_equal 1, row[0]
|
844
|
+
assert_equal 1, sheet[6,0]
|
845
|
+
assert_equal 1, sheet.cell(6,0)
|
846
|
+
assert_equal @@iconv.iconv('DD.MM.YYYY'), row.format(1).number_format
|
847
|
+
date = Date.new 2008, 10, 10
|
848
|
+
assert_equal date, row[1]
|
849
|
+
assert_equal date, sheet[6,1]
|
850
|
+
assert_equal date, sheet.cell(6,1)
|
851
|
+
assert_equal @@iconv.iconv('M/D/YY'), row.format(2).number_format
|
852
|
+
date = Date.new 2008, 10, 12
|
853
|
+
assert_equal date, row[2]
|
854
|
+
assert_equal date, sheet[6,2]
|
855
|
+
assert_equal date, sheet.cell(6,2)
|
856
|
+
row = sheet.row 7
|
857
|
+
assert_nil row[0]
|
858
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
859
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
860
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
861
|
+
assert_equal 0.0005, sheet1[8,0]
|
862
|
+
assert_equal 0.005, sheet1[8,1]
|
863
|
+
assert_equal 0.05, sheet1[8,2]
|
864
|
+
assert_equal 10.5, sheet1[8,3]
|
865
|
+
assert_equal 1.05, sheet1[8,4]
|
866
|
+
assert_equal 100.5, sheet1[8,5]
|
867
|
+
assert_equal 10.05, sheet1[8,6]
|
868
|
+
assert_equal 1.005, sheet1[8,7]
|
869
|
+
assert_equal 100.5, sheet1[9,0]
|
870
|
+
assert_equal 10.05, sheet1[9,1]
|
871
|
+
assert_equal 1.005, sheet1[9,2]
|
872
|
+
assert_equal 1000.5, sheet1[9,3]
|
873
|
+
assert_equal 100.05, sheet1[9,4]
|
874
|
+
assert_equal 10.005, sheet1[9,5]
|
875
|
+
assert_equal 1.0005, sheet1[9,6]
|
876
|
+
assert_equal 10000.5, sheet1[10,0]
|
877
|
+
assert_equal 1000.05, sheet1[10,1]
|
878
|
+
assert_equal 100.005, sheet1[10,2]
|
879
|
+
assert_equal 10.0005, sheet1[10,3]
|
880
|
+
assert_equal 1.00005, sheet1[10,4]
|
881
|
+
assert_instance_of Spreadsheet::Excel::Worksheet, sheet
|
882
|
+
sheet = book.worksheets.last
|
883
|
+
assert_equal "m\000y\000 \000n\000a\000m\000e\000",
|
884
|
+
sheet.name
|
885
|
+
assert_not_nil sheet.offset
|
886
|
+
end
|
887
|
+
def test_write_new_workbook__utf16
|
888
|
+
Spreadsheet.client_encoding = 'UTF-16LE'
|
889
|
+
book = Spreadsheet::Excel::Workbook.new
|
890
|
+
path = File.join @var, 'test_write_workbook.xls'
|
891
|
+
sheet1 = book.create_worksheet
|
892
|
+
str1 = @@iconv.iconv 'Shared String'
|
893
|
+
str2 = @@iconv.iconv 'Another Shared String'
|
894
|
+
str3 = @@iconv.iconv('1234567890 ' * 1000)
|
895
|
+
str4 = @@iconv.iconv('9876543210 ' * 1000)
|
896
|
+
sheet1[0,0] = str1
|
897
|
+
sheet1.row(0).push str1
|
898
|
+
sheet1.row(1).concat [str2, str2]
|
899
|
+
sheet1[2,0] = str3
|
900
|
+
sheet1[3,0] = str4
|
901
|
+
fmt = Format.new :color => 'red'
|
902
|
+
sheet1[4,0] = 0.25
|
903
|
+
sheet1.row(4).set_format 0, fmt
|
904
|
+
fmt = Format.new :color => 'aqua'
|
905
|
+
sheet1[5,0] = 0.75
|
906
|
+
sheet1.row(5).set_format 0, fmt
|
907
|
+
sheet1[6,0] = 1
|
908
|
+
fmt = Format.new :color => 'green'
|
909
|
+
sheet1.row(6).set_format 0, fmt
|
910
|
+
sheet1[6,1] = Date.new 2008, 10, 10
|
911
|
+
sheet1[6,2] = Date.new 2008, 10, 12
|
912
|
+
fmt = Format.new :number_format => "D\0D\0.\0M\0M\0.\0Y\0Y\0Y\0Y\0"
|
913
|
+
sheet1.row(6).set_format 1, fmt
|
914
|
+
sheet1.update_row 7, nil, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
|
915
|
+
sheet2 = book.create_worksheet :name => "m\0y\0 \0n\0a\0m\0e\0"
|
916
|
+
book.write path
|
917
|
+
Spreadsheet.client_encoding = 'UTF8'
|
918
|
+
str1 = 'Shared String'
|
919
|
+
str2 = 'Another Shared String'
|
920
|
+
str3 = '1234567890 ' * 1000
|
921
|
+
str4 = '9876543210 ' * 1000
|
922
|
+
assert_nothing_raised do book = Spreadsheet.open path end
|
923
|
+
assert_equal 'UTF-16LE', book.encoding
|
924
|
+
assert_equal str1, book.shared_string(0)
|
925
|
+
assert_equal str2, book.shared_string(1)
|
926
|
+
test = book.shared_string 2
|
927
|
+
if test != str3
|
928
|
+
str3.size.times do |idx|
|
929
|
+
len = idx.next
|
930
|
+
if test[0,len] != str3[0,len]
|
931
|
+
assert_equal str3[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
|
932
|
+
end
|
933
|
+
end
|
934
|
+
end
|
935
|
+
assert_equal str3, test
|
936
|
+
test = book.shared_string 3
|
937
|
+
if test != str4
|
938
|
+
str4.size.times do |idx|
|
939
|
+
len = idx.next
|
940
|
+
if test[0,len] != str4[0,len]
|
941
|
+
assert_equal str4[idx - 5, 10], test[idx - 5, 10], "in position #{idx}"
|
942
|
+
end
|
943
|
+
end
|
944
|
+
end
|
945
|
+
assert_equal str4, test
|
946
|
+
assert_equal 2, book.worksheets.size
|
947
|
+
sheet = book.worksheets.first
|
948
|
+
assert_instance_of Spreadsheet::Excel::Worksheet, sheet
|
949
|
+
assert_equal "Worksheet1", sheet.name
|
950
|
+
assert_not_nil sheet.offset
|
951
|
+
row = sheet.row 0
|
952
|
+
assert_equal str1, row[0]
|
953
|
+
assert_equal str1, sheet[0,0]
|
954
|
+
assert_equal str1, sheet.cell(0,0)
|
955
|
+
assert_equal str1, row[1]
|
956
|
+
assert_equal str1, sheet[0,1]
|
957
|
+
assert_equal str1, sheet.cell(0,1)
|
958
|
+
row = sheet.row 1
|
959
|
+
assert_equal str2, row[0]
|
960
|
+
assert_equal str2, sheet[1,0]
|
961
|
+
assert_equal str2, sheet.cell(1,0)
|
962
|
+
assert_equal str2, row[1]
|
963
|
+
assert_equal str2, sheet[1,1]
|
964
|
+
assert_equal str2, sheet.cell(1,1)
|
965
|
+
row = sheet.row 2
|
966
|
+
assert_equal str3, row[0]
|
967
|
+
assert_equal str3, sheet[2,0]
|
968
|
+
assert_equal str3, sheet.cell(2,0)
|
969
|
+
assert_nil row[1]
|
970
|
+
assert_nil sheet[2,1]
|
971
|
+
assert_nil sheet.cell(2,1)
|
972
|
+
row = sheet.row 3
|
973
|
+
assert_equal str4, row[0]
|
974
|
+
assert_equal str4, sheet[3,0]
|
975
|
+
assert_equal str4, sheet.cell(3,0)
|
976
|
+
assert_nil row[1]
|
977
|
+
assert_nil sheet[3,1]
|
978
|
+
assert_nil sheet.cell(3,1)
|
979
|
+
row = sheet.row 4
|
980
|
+
assert_equal :red, row.format(0).font.color
|
981
|
+
assert_equal 0.25, row[0]
|
982
|
+
assert_equal 0.25, sheet[4,0]
|
983
|
+
assert_equal 0.25, sheet.cell(4,0)
|
984
|
+
row = sheet.row 5
|
985
|
+
assert_equal :cyan, row.format(0).font.color
|
986
|
+
assert_equal 0.75, row[0]
|
987
|
+
assert_equal 0.75, sheet[5,0]
|
988
|
+
assert_equal 0.75, sheet.cell(5,0)
|
989
|
+
row = sheet.row 6
|
990
|
+
assert_equal :green, row.format(0).font.color
|
991
|
+
assert_equal 1, row[0]
|
992
|
+
assert_equal 1, sheet[6,0]
|
993
|
+
assert_equal 1, sheet.cell(6,0)
|
994
|
+
assert_equal 'DD.MM.YYYY', row.format(1).number_format
|
995
|
+
date = Date.new 2008, 10, 10
|
996
|
+
assert_equal date, row[1]
|
997
|
+
assert_equal date, sheet[6,1]
|
998
|
+
assert_equal date, sheet.cell(6,1)
|
999
|
+
assert_equal 'M/D/YY', row.format(2).number_format
|
1000
|
+
date = Date.new 2008, 10, 12
|
1001
|
+
assert_equal date, row[2]
|
1002
|
+
assert_equal date, sheet[6,2]
|
1003
|
+
assert_equal date, sheet.cell(6,2)
|
1004
|
+
row = sheet.row 7
|
1005
|
+
assert_nil row[0]
|
1006
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], row[1,10]
|
1007
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet[7,1..10]
|
1008
|
+
assert_equal [1,2,3,4,5,6,7,8,9,0], sheet.cell(7,1..10)
|
1009
|
+
assert_instance_of Spreadsheet::Excel::Worksheet, sheet
|
1010
|
+
sheet = book.worksheets.last
|
1011
|
+
assert_equal "my name",
|
1012
|
+
sheet.name
|
1013
|
+
assert_not_nil sheet.offset
|
1014
|
+
end
|
1015
|
+
def test_read_bsv
|
1016
|
+
book = Spreadsheet.open '/home/hwyss/cogito/oddb.org/data/xls/BSV_per_2008.10.01.xls'
|
1017
|
+
sheet = book.worksheet 0
|
1018
|
+
assert_equal Date.new(2000), sheet[1,6]
|
1019
|
+
end
|
1020
|
+
end
|
1021
|
+
end
|