writeexcel 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/.gitattributes +1 -1
  2. data/.gitignore +24 -24
  3. data/README.rdoc +34 -55
  4. data/VERSION +1 -1
  5. data/charts/chartex.rb +316 -316
  6. data/charts/demo1.rb +46 -46
  7. data/charts/demo2.rb +65 -65
  8. data/charts/demo3.rb +117 -117
  9. data/charts/demo4.rb +119 -119
  10. data/charts/demo5.rb +48 -48
  11. data/examples/a_simple.rb +43 -43
  12. data/examples/autofilter.rb +265 -265
  13. data/examples/bigfile.rb +30 -30
  14. data/examples/chart_area.rb +121 -121
  15. data/examples/chart_bar.rb +120 -120
  16. data/examples/chart_column.rb +120 -120
  17. data/examples/chart_line.rb +120 -120
  18. data/examples/chart_pie.rb +108 -108
  19. data/examples/chart_scatter.rb +121 -121
  20. data/examples/chart_stock.rb +148 -148
  21. data/examples/chess.rb +142 -142
  22. data/examples/colors.rb +129 -129
  23. data/examples/comments1.rb +27 -27
  24. data/examples/comments2.rb +352 -352
  25. data/examples/copyformat.rb +52 -52
  26. data/examples/data_validate.rb +279 -279
  27. data/examples/date_time.rb +87 -87
  28. data/examples/defined_name.rb +32 -32
  29. data/examples/demo.rb +124 -124
  30. data/examples/diag_border.rb +36 -36
  31. data/examples/formats.rb +490 -490
  32. data/examples/formula_result.rb +30 -30
  33. data/examples/header.rb +137 -137
  34. data/examples/hide_sheet.rb +29 -29
  35. data/examples/hyperlink.rb +43 -43
  36. data/examples/images.rb +63 -63
  37. data/examples/indent.rb +31 -31
  38. data/examples/merge1.rb +40 -40
  39. data/examples/merge2.rb +45 -45
  40. data/examples/merge3.rb +66 -66
  41. data/examples/merge4.rb +83 -83
  42. data/examples/merge5.rb +80 -80
  43. data/examples/merge6.rb +67 -67
  44. data/examples/outline.rb +255 -255
  45. data/examples/outline_collapsed.rb +209 -209
  46. data/examples/panes.rb +113 -113
  47. data/examples/properties.rb +34 -34
  48. data/examples/properties_jp.rb +33 -33
  49. data/examples/protection.rb +47 -47
  50. data/examples/regions.rb +53 -53
  51. data/examples/repeat.rb +43 -43
  52. data/examples/right_to_left.rb +27 -27
  53. data/examples/row_wrap.rb +53 -53
  54. data/examples/stats.rb +74 -74
  55. data/examples/stocks.rb +81 -81
  56. data/examples/tab_colors.rb +31 -31
  57. data/examples/utf8.rb +15 -15
  58. data/examples/write_arrays.rb +83 -83
  59. data/lib/writeexcel/biffwriter.rb +232 -232
  60. data/lib/writeexcel/caller_info.rb +12 -12
  61. data/lib/writeexcel/chart.rb +2190 -2177
  62. data/lib/writeexcel/charts/area.rb +154 -154
  63. data/lib/writeexcel/charts/bar.rb +177 -177
  64. data/lib/writeexcel/charts/column.rb +156 -156
  65. data/lib/writeexcel/charts/external.rb +66 -66
  66. data/lib/writeexcel/charts/line.rb +154 -154
  67. data/lib/writeexcel/charts/pie.rb +169 -169
  68. data/lib/writeexcel/charts/scatter.rb +192 -192
  69. data/lib/writeexcel/charts/stock.rb +213 -213
  70. data/lib/writeexcel/colors.rb +64 -64
  71. data/lib/writeexcel/compatibility.rb +0 -255
  72. data/lib/writeexcel/debug_info.rb +37 -33
  73. data/lib/writeexcel/excelformulaparser.rb +587 -587
  74. data/lib/writeexcel/format.rb +13 -4
  75. data/lib/writeexcel/formula.rb +26 -9
  76. data/lib/writeexcel/helper.rb +68 -64
  77. data/lib/writeexcel/olewriter.rb +311 -311
  78. data/lib/writeexcel/properties.rb +242 -240
  79. data/lib/writeexcel/storage_lite.rb +984 -978
  80. data/lib/writeexcel/workbook.rb +3210 -3192
  81. data/lib/writeexcel/worksheet.rb +143 -51
  82. data/lib/writeexcel/write_file.rb +44 -40
  83. data/lib/writeexcel.rb +1159 -1159
  84. data/test/helper.rb +31 -28
  85. data/test/perl_output/README +31 -31
  86. data/test/test_00_IEEE_double.rb +13 -13
  87. data/test/test_01_add_worksheet.rb +10 -10
  88. data/test/test_02_merge_formats.rb +53 -53
  89. data/test/test_04_dimensions.rb +392 -392
  90. data/test/test_05_rows.rb +179 -179
  91. data/test/test_06_extsst.rb +77 -77
  92. data/test/test_11_date_time.rb +479 -479
  93. data/test/test_12_date_only.rb +501 -501
  94. data/test/test_13_date_seconds.rb +481 -481
  95. data/test/test_21_escher.rb +637 -637
  96. data/test/test_22_mso_drawing_group.rb +745 -745
  97. data/test/test_23_note.rb +73 -73
  98. data/test/test_24_txo.rb +75 -75
  99. data/test/test_25_position_object.rb +84 -84
  100. data/test/test_26_autofilter.rb +314 -314
  101. data/test/test_27_autofilter.rb +131 -131
  102. data/test/test_28_autofilter.rb +161 -161
  103. data/test/test_29_process_jpg.rb +683 -683
  104. data/test/test_30_validation_dval.rb +77 -77
  105. data/test/test_31_validation_dv_strings.rb +126 -126
  106. data/test/test_32_validation_dv_formula.rb +206 -206
  107. data/test/test_40_property_types.rb +188 -188
  108. data/test/test_41_properties.rb +235 -235
  109. data/test/test_42_set_properties.rb +437 -437
  110. data/test/test_50_name_stored.rb +299 -299
  111. data/test/test_51_name_print_area.rb +357 -357
  112. data/test/test_52_name_print_titles.rb +454 -454
  113. data/test/test_53_autofilter.rb +203 -203
  114. data/test/test_60_chart_generic.rb +578 -578
  115. data/test/test_61_chart_subclasses.rb +95 -95
  116. data/test/test_62_chart_formats.rb +272 -272
  117. data/test/test_63_chart_area_formats.rb +649 -649
  118. data/test/test_biff.rb +75 -75
  119. data/test/test_compatibility.rb +12 -627
  120. data/test/test_example_match.rb +3144 -3144
  121. data/test/test_formula.rb +61 -61
  122. data/test/test_ole.rb +106 -106
  123. data/test/test_storage_lite.rb +125 -125
  124. data/test/test_workbook.rb +139 -139
  125. data/test/test_worksheet.rb +110 -110
  126. data/utils/add_magic_comment.rb +80 -80
  127. data/writeexcel.gemspec +4 -6
  128. data/writeexcel.rdoc +58 -15
  129. metadata +9 -6
  130. data/test/test_new_encoding.rb +0 -205
@@ -1,203 +1,203 @@
1
- # -*- coding: utf-8 -*-
2
- ##########################################################################
3
- # test_53_autofilter.rb
4
- #
5
- # Tests for the Excel EXTERNSHEET and NAME records created by print_are()..
6
- #
7
- # reverse('ゥ'), September 2008, John McNamara, jmcnamara@cpan.org
8
- #
9
- # original written in Perl by John McNamara
10
- # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
- #
12
- #########################################################################
13
- require 'helper'
14
- require 'stringio'
15
-
16
- class TC_autofilter < Test::Unit::TestCase
17
- def setup
18
- @test_file = StringIO.new
19
- @workbook = WriteExcel.new(@test_file)
20
- @workbook.not_using_tmpfile
21
- end
22
-
23
- def teardown
24
- @workbook.close
25
- end
26
-
27
- def test_autofilter_on_one_sheet
28
- worksheet1 = @workbook.add_worksheet
29
-
30
- worksheet1.autofilter('A1:C5')
31
-
32
- # Test the EXTERNSHEET record.
33
- @workbook.calculate_extern_sizes
34
- @workbook.store_externsheet
35
-
36
- target = [%w(
37
- 17 00 08 00 01 00 00 00 00 00 00 00
38
- ).join('')].pack('H*')
39
-
40
- caption = " \tExternsheet"
41
- result = _unpack_externsheet(@workbook.data)
42
- target = _unpack_externsheet(target)
43
- assert_equal(target, result)
44
-
45
- # Test the NAME record.
46
- @workbook.clear_data_for_test
47
- @workbook.store_names
48
-
49
- target = [%w(
50
- 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
51
- 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
52
- ).join('')].pack('H*')
53
-
54
- caption = " \t+ Name = autofilter ( Sheet1!A1:C5 )";
55
- result = _unpack_name(@workbook.data)
56
- target = _unpack_name(target)
57
- assert_equal(target, result)
58
- end
59
-
60
- def test_autofilter_on_two_sheets
61
- worksheet1 = @workbook.add_worksheet
62
- worksheet2 = @workbook.add_worksheet
63
-
64
- worksheet1.autofilter('A1:C5')
65
- worksheet2.autofilter('A1:C5')
66
-
67
- # Test the EXTERNSHEET record.
68
- @workbook.calculate_extern_sizes
69
- @workbook.store_externsheet
70
-
71
- target = [%w(
72
- 17 00 0E 00 02 00 00 00 00 00 00 00 00 00 01 00
73
- 01 00
74
- ).join('')].pack('H*')
75
-
76
- caption = " \tExternsheet"
77
- result = _unpack_externsheet(@workbook.data)
78
- target = _unpack_externsheet(target)
79
- assert_equal(target, result)
80
-
81
- # Test the NAME record.
82
- @workbook.clear_data_for_test
83
- @workbook.store_names
84
-
85
- target = [%w(
86
- 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
87
- 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
88
-
89
- 18 00 1B 00 21 00 00 01 0B 00 00 00 02 00 00 00
90
- 00 00 00 0D 3B 01 00 00 00 04 00 00 00 02 00
91
- ).join('')].pack('H*')
92
-
93
- caption = " \t+ Name = autofilter ( Sheet1!A1:C5, Sheet2!A1:C5 )";
94
- result = _unpack_name(@workbook.data)
95
- target = _unpack_name(target)
96
- assert_equal(target, result)
97
- end
98
-
99
- ###############################################################################
100
- #
101
- # _unpack_externsheet()
102
- #
103
- # Unpack the EXTERNSHEET recordfor easier comparison.
104
- #
105
- def _unpack_externsheet(data)
106
- externsheet = Hash.new
107
-
108
- externsheet['record'] = data[0, 2].unpack('v')[0]
109
- data[0, 2] = ''
110
- externsheet['length'] = data[0, 2].unpack('v')[0]
111
- data[0, 2] = ''
112
- externsheet['count'] = data[0, 2].unpack('v')[0]
113
- data[0, 2] = ''
114
- externsheet['array'] = [];
115
-
116
- externsheet['count'].times do
117
- externsheet['array'] << data[0, 6].unpack('vvv')
118
- data[0, 6] = ''
119
- end
120
- externsheet
121
- end
122
-
123
- ###############################################################################
124
- #
125
- # _unpack_name()
126
- #
127
- # Unpack 1 or more NAME structures into a AoH for easier comparison.
128
- #
129
- def _unpack_name(data)
130
- names = Array.new
131
- while data.length > 0
132
- name = Hash.new
133
-
134
- name['record'] = data[0, 2].unpack('v')[0]
135
- data[0, 2] = ''
136
- name['length'] = data[0, 2].unpack('v')[0]
137
- data[0, 2] = ''
138
- name['flags'] = data[0, 2].unpack('v')[0]
139
- data[0, 2] = ''
140
- name['shortcut'] = data[0, 1].unpack('C')[0]
141
- data[0, 1] = ''
142
- name['str_len'] = data[0, 1].unpack('C')[0]
143
- data[0, 1] = ''
144
- name['formula_len'] = data[0, 2].unpack('v')[0]
145
- data[0, 2] = ''
146
- name['itals'] = data[0, 2].unpack('v')[0]
147
- data[0, 2] = ''
148
- name['sheet_index'] = data[0, 2].unpack('v')[0]
149
- data[0, 2] = ''
150
- name['menu_len'] = data[0, 1].unpack('C')[0]
151
- data[0, 1] = ''
152
- name['desc_len'] = data[0, 1].unpack('C')[0]
153
- data[0, 1] = ''
154
- name['help_len'] = data[0, 1].unpack('C')[0]
155
- data[0, 1] = ''
156
- name['status_len'] = data[0, 1].unpack('C')[0]
157
- data[0, 1] = ''
158
- name['encoding'] = data[0, 1].unpack('C')[0]
159
- data[0, 1] = ''
160
-
161
- # Decode the individual flag fields.
162
- flag = Hash.new
163
- flag['hidden'] = name['flags'] & 0x0001
164
- flag['function'] = name['flags'] & 0x0002
165
- flag['vb'] = name['flags'] & 0x0004
166
- flag['macro'] = name['flags'] & 0x0008
167
- flag['complex'] = name['flags'] & 0x0010
168
- flag['builtin'] = name['flags'] & 0x0020
169
- flag['group'] = name['flags'] & 0x0FC0
170
- flag['binary'] = name['flags'] & 0x1000
171
- name['flags'] = flag
172
-
173
- # Decode the string part of the NAME structure.
174
- if name['encoding'] == 1
175
- # UTF-16 name. Leave in hex.
176
- name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
177
- data[0, 2 * name['str_len']] = ''
178
- elsif flag['builtin'] != 0
179
- # 1 digit builtin name. Leave in hex.
180
- name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
181
- data[0, name['str_len']] = ''
182
- else
183
- # ASCII name.
184
- name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
185
- data[0, name['str_len']] = ''
186
- end
187
-
188
- # Keep the formula as a hex string.
189
- name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
190
- data[0, name['formula_len']] = ''
191
-
192
- names << name
193
- end
194
- names
195
- end
196
-
197
- def assert_hash_equal?(result, target)
198
- assert_equal(result.keys.sort, target.keys.sort)
199
- result.each_key do |key|
200
- assert_equal(result[key], target[key])
201
- end
202
- end
203
- end
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_53_autofilter.rb
4
+ #
5
+ # Tests for the Excel EXTERNSHEET and NAME records created by print_are()..
6
+ #
7
+ # reverse('ゥ'), September 2008, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_autofilter < Test::Unit::TestCase
17
+ def setup
18
+ @test_file = StringIO.new
19
+ @workbook = WriteExcel.new(@test_file)
20
+ @workbook.not_using_tmpfile
21
+ end
22
+
23
+ def teardown
24
+ @workbook.close
25
+ end
26
+
27
+ def test_autofilter_on_one_sheet
28
+ worksheet1 = @workbook.add_worksheet
29
+
30
+ worksheet1.autofilter('A1:C5')
31
+
32
+ # Test the EXTERNSHEET record.
33
+ @workbook.calculate_extern_sizes
34
+ @workbook.store_externsheet
35
+
36
+ target = [%w(
37
+ 17 00 08 00 01 00 00 00 00 00 00 00
38
+ ).join('')].pack('H*')
39
+
40
+ caption = " \tExternsheet"
41
+ result = _unpack_externsheet(@workbook.data)
42
+ target = _unpack_externsheet(target)
43
+ assert_equal(target, result)
44
+
45
+ # Test the NAME record.
46
+ @workbook.clear_data_for_test
47
+ @workbook.store_names
48
+
49
+ target = [%w(
50
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
51
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
52
+ ).join('')].pack('H*')
53
+
54
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5 )";
55
+ result = _unpack_name(@workbook.data)
56
+ target = _unpack_name(target)
57
+ assert_equal(target, result)
58
+ end
59
+
60
+ def test_autofilter_on_two_sheets
61
+ worksheet1 = @workbook.add_worksheet
62
+ worksheet2 = @workbook.add_worksheet
63
+
64
+ worksheet1.autofilter('A1:C5')
65
+ worksheet2.autofilter('A1:C5')
66
+
67
+ # Test the EXTERNSHEET record.
68
+ @workbook.calculate_extern_sizes
69
+ @workbook.store_externsheet
70
+
71
+ target = [%w(
72
+ 17 00 0E 00 02 00 00 00 00 00 00 00 00 00 01 00
73
+ 01 00
74
+ ).join('')].pack('H*')
75
+
76
+ caption = " \tExternsheet"
77
+ result = _unpack_externsheet(@workbook.data)
78
+ target = _unpack_externsheet(target)
79
+ assert_equal(target, result)
80
+
81
+ # Test the NAME record.
82
+ @workbook.clear_data_for_test
83
+ @workbook.store_names
84
+
85
+ target = [%w(
86
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
87
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
88
+
89
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 02 00 00 00
90
+ 00 00 00 0D 3B 01 00 00 00 04 00 00 00 02 00
91
+ ).join('')].pack('H*')
92
+
93
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5, Sheet2!A1:C5 )";
94
+ result = _unpack_name(@workbook.data)
95
+ target = _unpack_name(target)
96
+ assert_equal(target, result)
97
+ end
98
+
99
+ ###############################################################################
100
+ #
101
+ # _unpack_externsheet()
102
+ #
103
+ # Unpack the EXTERNSHEET recordfor easier comparison.
104
+ #
105
+ def _unpack_externsheet(data)
106
+ externsheet = Hash.new
107
+
108
+ externsheet['record'] = data[0, 2].unpack('v')[0]
109
+ data[0, 2] = ''
110
+ externsheet['length'] = data[0, 2].unpack('v')[0]
111
+ data[0, 2] = ''
112
+ externsheet['count'] = data[0, 2].unpack('v')[0]
113
+ data[0, 2] = ''
114
+ externsheet['array'] = [];
115
+
116
+ externsheet['count'].times do
117
+ externsheet['array'] << data[0, 6].unpack('vvv')
118
+ data[0, 6] = ''
119
+ end
120
+ externsheet
121
+ end
122
+
123
+ ###############################################################################
124
+ #
125
+ # _unpack_name()
126
+ #
127
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
128
+ #
129
+ def _unpack_name(data)
130
+ names = Array.new
131
+ while data.length > 0
132
+ name = Hash.new
133
+
134
+ name['record'] = data[0, 2].unpack('v')[0]
135
+ data[0, 2] = ''
136
+ name['length'] = data[0, 2].unpack('v')[0]
137
+ data[0, 2] = ''
138
+ name['flags'] = data[0, 2].unpack('v')[0]
139
+ data[0, 2] = ''
140
+ name['shortcut'] = data[0, 1].unpack('C')[0]
141
+ data[0, 1] = ''
142
+ name['str_len'] = data[0, 1].unpack('C')[0]
143
+ data[0, 1] = ''
144
+ name['formula_len'] = data[0, 2].unpack('v')[0]
145
+ data[0, 2] = ''
146
+ name['itals'] = data[0, 2].unpack('v')[0]
147
+ data[0, 2] = ''
148
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
149
+ data[0, 2] = ''
150
+ name['menu_len'] = data[0, 1].unpack('C')[0]
151
+ data[0, 1] = ''
152
+ name['desc_len'] = data[0, 1].unpack('C')[0]
153
+ data[0, 1] = ''
154
+ name['help_len'] = data[0, 1].unpack('C')[0]
155
+ data[0, 1] = ''
156
+ name['status_len'] = data[0, 1].unpack('C')[0]
157
+ data[0, 1] = ''
158
+ name['encoding'] = data[0, 1].unpack('C')[0]
159
+ data[0, 1] = ''
160
+
161
+ # Decode the individual flag fields.
162
+ flag = Hash.new
163
+ flag['hidden'] = name['flags'] & 0x0001
164
+ flag['function'] = name['flags'] & 0x0002
165
+ flag['vb'] = name['flags'] & 0x0004
166
+ flag['macro'] = name['flags'] & 0x0008
167
+ flag['complex'] = name['flags'] & 0x0010
168
+ flag['builtin'] = name['flags'] & 0x0020
169
+ flag['group'] = name['flags'] & 0x0FC0
170
+ flag['binary'] = name['flags'] & 0x1000
171
+ name['flags'] = flag
172
+
173
+ # Decode the string part of the NAME structure.
174
+ if name['encoding'] == 1
175
+ # UTF-16 name. Leave in hex.
176
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
177
+ data[0, 2 * name['str_len']] = ''
178
+ elsif flag['builtin'] != 0
179
+ # 1 digit builtin name. Leave in hex.
180
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
181
+ data[0, name['str_len']] = ''
182
+ else
183
+ # ASCII name.
184
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
185
+ data[0, name['str_len']] = ''
186
+ end
187
+
188
+ # Keep the formula as a hex string.
189
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
190
+ data[0, name['formula_len']] = ''
191
+
192
+ names << name
193
+ end
194
+ names
195
+ end
196
+
197
+ def assert_hash_equal?(result, target)
198
+ assert_equal(result.keys.sort, target.keys.sort)
199
+ result.each_key do |key|
200
+ assert_equal(result[key], target[key])
201
+ end
202
+ end
203
+ end