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