writeexcel 0.1.0 → 0.3.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.
Files changed (143) hide show
  1. data/README +26 -31
  2. data/examples/a_simple.rb +42 -42
  3. data/examples/{autofilters.rb → autofilter.rb} +264 -266
  4. data/examples/bigfile.rb +29 -0
  5. data/examples/chart_area.rb +120 -0
  6. data/examples/chart_bar.rb +119 -0
  7. data/examples/chart_column.rb +119 -0
  8. data/examples/chart_line.rb +119 -0
  9. data/examples/chart_pie.rb +107 -0
  10. data/examples/chart_scatter.rb +120 -0
  11. data/examples/chart_stock.rb +147 -0
  12. data/examples/copyformat.rb +51 -51
  13. data/examples/data_validate.rb +278 -278
  14. data/examples/date_time.rb +86 -86
  15. data/examples/defined_name.rb +31 -0
  16. data/examples/demo.rb +120 -118
  17. data/examples/diag_border.rb +35 -35
  18. data/examples/formats.rb +489 -489
  19. data/examples/header.rb +136 -136
  20. data/examples/hidden.rb +28 -28
  21. data/examples/hyperlink.rb +42 -42
  22. data/examples/images.rb +52 -52
  23. data/examples/merge1.rb +39 -39
  24. data/examples/merge2.rb +44 -44
  25. data/examples/merge3.rb +65 -65
  26. data/examples/merge4.rb +82 -82
  27. data/examples/merge5.rb +79 -79
  28. data/examples/properties.rb +33 -0
  29. data/examples/properties_jp.rb +32 -0
  30. data/examples/protection.rb +46 -46
  31. data/examples/regions.rb +52 -52
  32. data/examples/repeat.rb +42 -42
  33. data/examples/stats.rb +75 -75
  34. data/examples/stocks.rb +80 -80
  35. data/examples/tab_colors.rb +30 -30
  36. data/examples/write_arrays.rb +82 -0
  37. data/lib/writeexcel.rb +1134 -18
  38. data/lib/writeexcel/biffwriter.rb +273 -260
  39. data/lib/writeexcel/chart.rb +2306 -217
  40. data/lib/writeexcel/charts/area.rb +152 -0
  41. data/lib/writeexcel/charts/bar.rb +177 -0
  42. data/lib/writeexcel/charts/column.rb +156 -0
  43. data/lib/writeexcel/charts/external.rb +61 -0
  44. data/lib/writeexcel/charts/line.rb +152 -0
  45. data/lib/writeexcel/charts/pie.rb +169 -0
  46. data/lib/writeexcel/charts/scatter.rb +192 -0
  47. data/lib/writeexcel/charts/stock.rb +211 -0
  48. data/lib/writeexcel/excelformulaparser.rb +208 -195
  49. data/lib/writeexcel/format.rb +1697 -1108
  50. data/lib/writeexcel/formula.rb +1050 -986
  51. data/lib/writeexcel/olewriter.rb +322 -322
  52. data/lib/writeexcel/properties.rb +251 -250
  53. data/lib/writeexcel/storage_lite.rb +968 -0
  54. data/lib/writeexcel/workbook.rb +3294 -2630
  55. data/lib/writeexcel/worksheet.rb +9012 -6377
  56. data/test/excelfile/Chart1.xls +0 -0
  57. data/test/excelfile/Chart2.xls +0 -0
  58. data/test/excelfile/Chart3.xls +0 -0
  59. data/test/excelfile/Chart4.xls +0 -0
  60. data/test/excelfile/Chart5.xls +0 -0
  61. data/test/perl_output/Chart1.xls.data +0 -0
  62. data/test/perl_output/Chart2.xls.data +0 -0
  63. data/test/perl_output/Chart3.xls.data +0 -0
  64. data/test/perl_output/Chart4.xls.data +0 -0
  65. data/test/perl_output/Chart5.xls.data +0 -0
  66. data/test/perl_output/a_simple.xls +0 -0
  67. data/test/perl_output/autofilter.xls +0 -0
  68. data/test/perl_output/chart_area.xls +0 -0
  69. data/test/perl_output/chart_bar.xls +0 -0
  70. data/test/perl_output/chart_column.xls +0 -0
  71. data/test/perl_output/chart_line.xls +0 -0
  72. data/test/perl_output/data_validate.xls +0 -0
  73. data/test/perl_output/date_time.xls +0 -0
  74. data/test/perl_output/demo.xls +0 -0
  75. data/test/perl_output/demo101.bin +0 -0
  76. data/test/perl_output/demo201.bin +0 -0
  77. data/test/perl_output/demo301.bin +0 -0
  78. data/test/perl_output/demo401.bin +0 -0
  79. data/test/perl_output/demo501.bin +0 -0
  80. data/test/perl_output/diag_border.xls +0 -0
  81. data/test/perl_output/headers.xls +0 -0
  82. data/test/perl_output/hyperlink.xls +0 -0
  83. data/test/perl_output/images.xls +0 -0
  84. data/test/perl_output/merge1.xls +0 -0
  85. data/test/perl_output/merge2.xls +0 -0
  86. data/test/perl_output/merge3.xls +0 -0
  87. data/test/perl_output/merge4.xls +0 -0
  88. data/test/perl_output/merge5.xls +0 -0
  89. data/test/perl_output/protection.xls +0 -0
  90. data/test/perl_output/regions.xls +0 -0
  91. data/test/perl_output/stats.xls +0 -0
  92. data/test/perl_output/stocks.xls +0 -0
  93. data/test/perl_output/tab_colors.xls +0 -0
  94. data/test/perl_output/unicode_cyrillic.xls +0 -0
  95. data/test/perl_output/workbook1.xls +0 -0
  96. data/test/perl_output/workbook2.xls +0 -0
  97. data/test/tc_all.rb +32 -31
  98. data/test/tc_biff.rb +104 -104
  99. data/test/tc_chart.rb +22 -22
  100. data/test/tc_example_match.rb +1944 -1280
  101. data/test/tc_format.rb +1254 -1267
  102. data/test/tc_formula.rb +63 -63
  103. data/test/tc_ole.rb +110 -110
  104. data/test/tc_storage_lite.rb +149 -0
  105. data/test/tc_workbook.rb +140 -115
  106. data/test/tc_worksheet.rb +115 -115
  107. data/test/test_00_IEEE_double.rb +14 -14
  108. data/test/test_01_add_worksheet.rb +12 -12
  109. data/test/test_02_merge_formats.rb +58 -58
  110. data/test/test_04_dimensions.rb +397 -397
  111. data/test/test_05_rows.rb +182 -182
  112. data/test/test_06_extsst.rb +80 -80
  113. data/test/test_11_date_time.rb +484 -484
  114. data/test/test_12_date_only.rb +506 -506
  115. data/test/test_13_date_seconds.rb +486 -486
  116. data/test/test_21_escher.rb +642 -629
  117. data/test/test_22_mso_drawing_group.rb +750 -739
  118. data/test/test_23_note.rb +78 -78
  119. data/test/test_24_txo.rb +80 -80
  120. data/test/test_25_position_object.rb +82 -0
  121. data/test/test_26_autofilter.rb +327 -327
  122. data/test/test_27_autofilter.rb +144 -144
  123. data/test/test_28_autofilter.rb +174 -174
  124. data/test/test_29_process_jpg.rb +681 -131
  125. data/test/test_30_validation_dval.rb +82 -82
  126. data/test/test_31_validation_dv_strings.rb +131 -131
  127. data/test/test_32_validation_dv_formula.rb +211 -211
  128. data/test/test_40_property_types.rb +191 -191
  129. data/test/test_41_properties.rb +238 -238
  130. data/test/test_42_set_properties.rb +442 -419
  131. data/test/test_50_name_stored.rb +305 -0
  132. data/test/test_51_name_print_area.rb +363 -0
  133. data/test/test_52_name_print_titles.rb +460 -0
  134. data/test/test_53_autofilter.rb +209 -0
  135. data/test/test_60_chart_generic.rb +576 -0
  136. data/test/test_61_chart_subclasses.rb +97 -0
  137. data/test/test_62_chart_formats.rb +270 -0
  138. data/test/test_63_chart_area_formats.rb +647 -0
  139. data/test/test_chartex.rb +35 -0
  140. data/test/ts_all.rb +46 -34
  141. data/writeexcel.gemspec +18 -0
  142. data/writeexcel.rdoc +583 -0
  143. metadata +162 -108
@@ -1,144 +1,144 @@
1
- ##########################################################################
2
- # test_27_autofilter.rb
3
- #
4
- # Tests for the token extraction method used to parse autofilter expressions.
5
- #
6
- # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
- #
8
- # original written in Perl by John McNamara
9
- # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
- #
11
- #########################################################################
12
- $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
-
14
- require "test/unit"
15
- require 'writeexcel'
16
-
17
- class TC_27_autofilter < Test::Unit::TestCase
18
-
19
- def test_27_autofilter
20
- @tests.each do |test|
21
- expression = test[0]
22
- expected = test[1]
23
- result = @worksheet.extract_filter_tokens(expression)
24
-
25
- testname = expression || 'none'
26
-
27
- assert_equal(expected, result, testname)
28
- end
29
- end
30
-
31
- ###############################################################################
32
- #
33
- # Unpack the binary data into a format suitable for printing in tests.
34
- #
35
- def unpack_record(data)
36
- data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
37
- end
38
-
39
- def setup
40
- t = Time.now.strftime("%Y%m%d")
41
- path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
42
- @test_file = File.join(Dir.tmpdir, path)
43
- @workbook = Spreadsheet::WriteExcel.new(@test_file)
44
- @worksheet = @workbook.add_worksheet
45
- @tests = [
46
- [
47
- nil,
48
- [],
49
- ],
50
-
51
- [
52
- '',
53
- [],
54
- ],
55
-
56
- [
57
- '0 < 2000',
58
- [0, '<', 2000],
59
- ],
60
-
61
- [
62
- 'x < 2000',
63
- ['x', '<', 2000],
64
- ],
65
-
66
- [
67
- 'x > 2000',
68
- ['x', '>', 2000],
69
- ],
70
-
71
- [
72
- 'x == 2000',
73
- ['x', '==', 2000],
74
- ],
75
-
76
- [
77
- 'x > 2000 and x < 5000',
78
- ['x', '>', 2000, 'and', 'x', '<', 5000],
79
- ],
80
-
81
- [
82
- 'x = "foo"',
83
- ['x', '=', 'foo'],
84
- ],
85
-
86
- [
87
- 'x = foo',
88
- ['x', '=', 'foo'],
89
- ],
90
-
91
- [
92
- 'x = "foo bar"',
93
- ['x', '=', 'foo bar'],
94
- ],
95
-
96
- [
97
- 'x = "foo "" bar"',
98
- ['x', '=', 'foo " bar'],
99
- ],
100
-
101
- [
102
- 'x = "foo bar" or x = "bar foo"',
103
- ['x', '=', 'foo bar', 'or', 'x', '=', 'bar foo'],
104
- ],
105
-
106
- [
107
- 'x = "foo "" bar" or x = "bar "" foo"',
108
- ['x', '=', 'foo " bar', 'or', 'x', '=', 'bar " foo'],
109
- ],
110
-
111
- [
112
- 'x = """"""""',
113
- ['x', '=', '"""'],
114
- ],
115
-
116
- [
117
- 'x = Blanks',
118
- ['x', '=', 'Blanks'],
119
- ],
120
-
121
- [
122
- 'x = NonBlanks',
123
- ['x', '=', 'NonBlanks'],
124
- ],
125
-
126
- [
127
- 'top 10 %',
128
- ['top', 10, '%'],
129
- ],
130
-
131
- [
132
- 'top 10 items',
133
- ['top', 10, 'items'],
134
- ],
135
-
136
- ]
137
- end
138
-
139
- def teardown
140
- @workbook.close
141
- File.unlink(@test_file) if FileTest.exist?(@test_file)
142
- end
143
-
144
- end
1
+ ##########################################################################
2
+ # test_27_autofilter.rb
3
+ #
4
+ # Tests for the token extraction method used to parse autofilter expressions.
5
+ #
6
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
+ #
8
+ # original written in Perl by John McNamara
9
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
+ #
11
+ #########################################################################
12
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
+
14
+ require "test/unit"
15
+ require 'writeexcel'
16
+
17
+ class TC_27_autofilter < Test::Unit::TestCase
18
+
19
+ def test_27_autofilter
20
+ @tests.each do |test|
21
+ expression = test[0]
22
+ expected = test[1]
23
+ result = @worksheet.extract_filter_tokens(expression)
24
+
25
+ testname = expression || 'none'
26
+
27
+ assert_equal(expected, result, testname)
28
+ end
29
+ end
30
+
31
+ ###############################################################################
32
+ #
33
+ # Unpack the binary data into a format suitable for printing in tests.
34
+ #
35
+ def unpack_record(data)
36
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
37
+ end
38
+
39
+ def setup
40
+ t = Time.now.strftime("%Y%m%d")
41
+ path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
42
+ @test_file = File.join(Dir.tmpdir, path)
43
+ @workbook = WriteExcel.new(@test_file)
44
+ @worksheet = @workbook.add_worksheet
45
+ @tests = [
46
+ [
47
+ nil,
48
+ [],
49
+ ],
50
+
51
+ [
52
+ '',
53
+ [],
54
+ ],
55
+
56
+ [
57
+ '0 < 2000',
58
+ [0, '<', 2000],
59
+ ],
60
+
61
+ [
62
+ 'x < 2000',
63
+ ['x', '<', 2000],
64
+ ],
65
+
66
+ [
67
+ 'x > 2000',
68
+ ['x', '>', 2000],
69
+ ],
70
+
71
+ [
72
+ 'x == 2000',
73
+ ['x', '==', 2000],
74
+ ],
75
+
76
+ [
77
+ 'x > 2000 and x < 5000',
78
+ ['x', '>', 2000, 'and', 'x', '<', 5000],
79
+ ],
80
+
81
+ [
82
+ 'x = "foo"',
83
+ ['x', '=', 'foo'],
84
+ ],
85
+
86
+ [
87
+ 'x = foo',
88
+ ['x', '=', 'foo'],
89
+ ],
90
+
91
+ [
92
+ 'x = "foo bar"',
93
+ ['x', '=', 'foo bar'],
94
+ ],
95
+
96
+ [
97
+ 'x = "foo "" bar"',
98
+ ['x', '=', 'foo " bar'],
99
+ ],
100
+
101
+ [
102
+ 'x = "foo bar" or x = "bar foo"',
103
+ ['x', '=', 'foo bar', 'or', 'x', '=', 'bar foo'],
104
+ ],
105
+
106
+ [
107
+ 'x = "foo "" bar" or x = "bar "" foo"',
108
+ ['x', '=', 'foo " bar', 'or', 'x', '=', 'bar " foo'],
109
+ ],
110
+
111
+ [
112
+ 'x = """"""""',
113
+ ['x', '=', '"""'],
114
+ ],
115
+
116
+ [
117
+ 'x = Blanks',
118
+ ['x', '=', 'Blanks'],
119
+ ],
120
+
121
+ [
122
+ 'x = NonBlanks',
123
+ ['x', '=', 'NonBlanks'],
124
+ ],
125
+
126
+ [
127
+ 'top 10 %',
128
+ ['top', 10, '%'],
129
+ ],
130
+
131
+ [
132
+ 'top 10 items',
133
+ ['top', 10, 'items'],
134
+ ],
135
+
136
+ ]
137
+ end
138
+
139
+ def teardown
140
+ @workbook.close
141
+ File.unlink(@test_file) if FileTest.exist?(@test_file)
142
+ end
143
+
144
+ end
@@ -1,174 +1,174 @@
1
- ##########################################################################
2
- # test_28_autofilter.rb
3
- #
4
- # Tests for the token parsing methods used to parse autofilter expressions.
5
- #
6
- # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
- #
8
- # original written in Perl by John McNamara
9
- # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
- #
11
- #########################################################################
12
- $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
-
14
- require "test/unit"
15
- require 'writeexcel'
16
-
17
- class TC_28_autofilter < Test::Unit::TestCase
18
-
19
- def test_28_autofilter
20
- @tests.each do |test|
21
- expression = test[0]
22
- expected = test[1]
23
- tokens = @worksheet.extract_filter_tokens(expression)
24
- result = @worksheet.parse_filter_expression(expression, tokens)
25
-
26
- testname = expression || 'none'
27
-
28
- assert_equal(expected, result, testname)
29
- end
30
- end
31
-
32
- ###############################################################################
33
- #
34
- # Unpack the binary data into a format suitable for printing in tests.
35
- #
36
- def unpack_record(data)
37
- data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
38
- end
39
-
40
- def setup
41
- t = Time.now.strftime("%Y%m%d")
42
- path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
43
- @test_file = File.join(Dir.tmpdir, path)
44
- @workbook = Spreadsheet::WriteExcel.new(@test_file)
45
- @worksheet = @workbook.add_worksheet
46
- @tests = [
47
- [
48
- 'x = 2000',
49
- [2, 2000],
50
- ],
51
-
52
- [
53
- 'x == 2000',
54
- [2, 2000],
55
- ],
56
-
57
- [
58
- 'x =~ 2000',
59
- [2, 2000],
60
- ],
61
-
62
- [
63
- 'x eq 2000',
64
- [2, 2000],
65
- ],
66
-
67
- [
68
- 'x <> 2000',
69
- [5, 2000],
70
- ],
71
-
72
- [
73
- 'x != 2000',
74
- [5, 2000],
75
- ],
76
-
77
- [
78
- 'x ne 2000',
79
- [5, 2000],
80
- ],
81
-
82
- [
83
- 'x !~ 2000',
84
- [5, 2000],
85
- ],
86
-
87
- [
88
- 'x > 2000',
89
- [4, 2000],
90
- ],
91
-
92
- [
93
- 'x < 2000',
94
- [1, 2000],
95
- ],
96
-
97
- [
98
- 'x >= 2000',
99
- [6, 2000],
100
- ],
101
-
102
- [
103
- 'x <= 2000',
104
- [3, 2000],
105
- ],
106
-
107
- [
108
- 'x > 2000 and x < 5000',
109
- [4, 2000, 0, 1, 5000],
110
- ],
111
-
112
- [
113
- 'x > 2000 && x < 5000',
114
- [4, 2000, 0, 1, 5000],
115
- ],
116
-
117
- [
118
- 'x > 2000 or x < 5000',
119
- [4, 2000, 1, 1, 5000],
120
- ],
121
-
122
- [
123
- 'x > 2000 || x < 5000',
124
- [4, 2000, 1, 1, 5000],
125
- ],
126
-
127
- [
128
- 'x = Blanks',
129
- [2, 'blanks'],
130
- ],
131
-
132
- [
133
- 'x = NonBlanks',
134
- [2, 'nonblanks'],
135
- ],
136
-
137
- [
138
- 'x <> Blanks',
139
- [2, 'nonblanks'],
140
- ],
141
-
142
- [
143
- 'x <> NonBlanks',
144
- [2, 'blanks'],
145
- ],
146
-
147
- [
148
- 'Top 10 Items',
149
- [30, 10],
150
- ],
151
-
152
- [
153
- 'Top 20 %',
154
- [31, 20],
155
- ],
156
-
157
- [
158
- 'Bottom 5 Items',
159
- [32, 5],
160
- ],
161
-
162
- [
163
- 'Bottom 101 %',
164
- [33, 101],
165
- ],
166
- ]
167
- end
168
-
169
- def teardown
170
- @workbook.close
171
- File.unlink(@test_file) if FileTest.exist?(@test_file)
172
- end
173
-
174
- end
1
+ ##########################################################################
2
+ # test_28_autofilter.rb
3
+ #
4
+ # Tests for the token parsing methods used to parse autofilter expressions.
5
+ #
6
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
+ #
8
+ # original written in Perl by John McNamara
9
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
+ #
11
+ #########################################################################
12
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
+
14
+ require "test/unit"
15
+ require 'writeexcel'
16
+
17
+ class TC_28_autofilter < Test::Unit::TestCase
18
+
19
+ def test_28_autofilter
20
+ @tests.each do |test|
21
+ expression = test[0]
22
+ expected = test[1]
23
+ tokens = @worksheet.extract_filter_tokens(expression)
24
+ result = @worksheet.parse_filter_expression(expression, tokens)
25
+
26
+ testname = expression || 'none'
27
+
28
+ assert_equal(expected, result, testname)
29
+ end
30
+ end
31
+
32
+ ###############################################################################
33
+ #
34
+ # Unpack the binary data into a format suitable for printing in tests.
35
+ #
36
+ def unpack_record(data)
37
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
38
+ end
39
+
40
+ def setup
41
+ t = Time.now.strftime("%Y%m%d")
42
+ path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
43
+ @test_file = File.join(Dir.tmpdir, path)
44
+ @workbook = WriteExcel.new(@test_file)
45
+ @worksheet = @workbook.add_worksheet
46
+ @tests = [
47
+ [
48
+ 'x = 2000',
49
+ [2, 2000],
50
+ ],
51
+
52
+ [
53
+ 'x == 2000',
54
+ [2, 2000],
55
+ ],
56
+
57
+ [
58
+ 'x =~ 2000',
59
+ [2, 2000],
60
+ ],
61
+
62
+ [
63
+ 'x eq 2000',
64
+ [2, 2000],
65
+ ],
66
+
67
+ [
68
+ 'x <> 2000',
69
+ [5, 2000],
70
+ ],
71
+
72
+ [
73
+ 'x != 2000',
74
+ [5, 2000],
75
+ ],
76
+
77
+ [
78
+ 'x ne 2000',
79
+ [5, 2000],
80
+ ],
81
+
82
+ [
83
+ 'x !~ 2000',
84
+ [5, 2000],
85
+ ],
86
+
87
+ [
88
+ 'x > 2000',
89
+ [4, 2000],
90
+ ],
91
+
92
+ [
93
+ 'x < 2000',
94
+ [1, 2000],
95
+ ],
96
+
97
+ [
98
+ 'x >= 2000',
99
+ [6, 2000],
100
+ ],
101
+
102
+ [
103
+ 'x <= 2000',
104
+ [3, 2000],
105
+ ],
106
+
107
+ [
108
+ 'x > 2000 and x < 5000',
109
+ [4, 2000, 0, 1, 5000],
110
+ ],
111
+
112
+ [
113
+ 'x > 2000 && x < 5000',
114
+ [4, 2000, 0, 1, 5000],
115
+ ],
116
+
117
+ [
118
+ 'x > 2000 or x < 5000',
119
+ [4, 2000, 1, 1, 5000],
120
+ ],
121
+
122
+ [
123
+ 'x > 2000 || x < 5000',
124
+ [4, 2000, 1, 1, 5000],
125
+ ],
126
+
127
+ [
128
+ 'x = Blanks',
129
+ [2, 'blanks'],
130
+ ],
131
+
132
+ [
133
+ 'x = NonBlanks',
134
+ [2, 'nonblanks'],
135
+ ],
136
+
137
+ [
138
+ 'x <> Blanks',
139
+ [2, 'nonblanks'],
140
+ ],
141
+
142
+ [
143
+ 'x <> NonBlanks',
144
+ [2, 'blanks'],
145
+ ],
146
+
147
+ [
148
+ 'Top 10 Items',
149
+ [30, 10],
150
+ ],
151
+
152
+ [
153
+ 'Top 20 %',
154
+ [31, 20],
155
+ ],
156
+
157
+ [
158
+ 'Bottom 5 Items',
159
+ [32, 5],
160
+ ],
161
+
162
+ [
163
+ 'Bottom 101 %',
164
+ [33, 101],
165
+ ],
166
+ ]
167
+ end
168
+
169
+ def teardown
170
+ @workbook.close
171
+ File.unlink(@test_file) if FileTest.exist?(@test_file)
172
+ end
173
+
174
+ end