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,357 +1,357 @@
1
- # -*- coding: utf-8 -*-
2
- ##########################################################################
3
- # test_51_name_print_area.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_Name_Print_Area < 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_print_area_name_for_a_simple_range
28
- worksheet1 = @workbook.add_worksheet
29
- area = 'A1:B12'
30
-
31
- worksheet1.print_area(area)
32
-
33
- # Test the EXTERNSHEET record.
34
- @workbook.calculate_extern_sizes
35
- @workbook.store_externsheet
36
-
37
- target = [%w(
38
- 17 00 08 00 01 00 00 00 00 00 00 00
39
- ).join('')].pack('H*')
40
-
41
- caption = " \tExternsheet"
42
- result = _unpack_externsheet(@workbook.data)
43
- target = _unpack_externsheet(target)
44
- assert_equal(target, result)
45
-
46
- # Test the NAME record.
47
- @workbook.clear_data_for_test
48
- @workbook.store_names
49
-
50
- target = [%w(
51
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
52
- 00 00 00 06 3B 00 00 00 00 0B 00 00 00 01 00
53
- ).join('')].pack('H*')
54
-
55
- caption = " \t+ Name ( Sheet1!#{area} )";
56
- result = _unpack_name(@workbook.data)
57
- target = _unpack_name(target)
58
- assert_equal(target, result)
59
- end
60
-
61
- def test_print_area_name_for_a_simple_row
62
- worksheet1 = @workbook.add_worksheet
63
- area = 'A1:IV1'
64
-
65
- worksheet1.print_area(area)
66
-
67
- # Test the EXTERNSHEET record.
68
- @workbook.calculate_extern_sizes
69
- @workbook.store_externsheet
70
-
71
- target = [%w(
72
- 17 00 08 00 01 00 00 00 00 00 00 00
73
- ).join('')].pack('H*')
74
-
75
- caption = " \tExternsheet"
76
- result = _unpack_externsheet(@workbook.data)
77
- target = _unpack_externsheet(target)
78
- assert_equal(target, result, caption)
79
-
80
- # Test the NAME record.
81
- @workbook.clear_data_for_test
82
- @workbook.store_names
83
-
84
- target = [%w(
85
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
86
- 00 00 00 06 3B 00 00 00 00 00 00 00 00 FF 00
87
- ).join('')].pack('H*')
88
-
89
- caption = " \t+ Name ( Sheet1!#{area} )";
90
- result = _unpack_name(@workbook.data)
91
- target = _unpack_name(target)
92
- assert_equal(target, result, caption)
93
- end
94
-
95
- def test_print_area_name_for_a_simple_column
96
- worksheet1 = @workbook.add_worksheet
97
- area = 'A1:A65536'
98
-
99
- worksheet1.print_area(area)
100
-
101
- # Test the EXTERNSHEET record.
102
- @workbook.calculate_extern_sizes
103
- @workbook.store_externsheet
104
-
105
- target = [%w(
106
- 17 00 08 00 01 00 00 00 00 00 00 00
107
- ).join('')].pack('H*')
108
-
109
- caption = " \tExternsheet"
110
- result = _unpack_externsheet(@workbook.data)
111
- target = _unpack_externsheet(target)
112
- assert_equal(target, result)
113
-
114
- # Test the NAME record.
115
- @workbook.clear_data_for_test
116
- @workbook.store_names
117
-
118
- target = [%w(
119
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
120
- 00 00 00 06 3B 00 00 00 00 FF FF 00 00 00 00
121
- ).join('')].pack('H*')
122
-
123
- caption = " \t+ Name ( Sheet1!#{area} )";
124
- result = _unpack_name(@workbook.data)
125
- target = _unpack_name(target)
126
- assert_equal(target, result)
127
- end
128
-
129
- def test_print_area_name_for_a_multiple_column
130
- worksheet1 = @workbook.add_worksheet
131
- area = 'A:H'
132
-
133
- worksheet1.print_area(area)
134
-
135
- # Test the EXTERNSHEET record.
136
- @workbook.calculate_extern_sizes
137
- @workbook.store_externsheet
138
-
139
- target = [%w(
140
- 17 00 08 00 01 00 00 00 00 00 00 00
141
- ).join('')].pack('H*')
142
-
143
- caption = " \tExternsheet"
144
- result = _unpack_externsheet(@workbook.data)
145
- target = _unpack_externsheet(target)
146
- assert_equal(target, result)
147
-
148
- # Test the NAME record.
149
- @workbook.clear_data_for_test
150
- @workbook.store_names
151
-
152
- target = [%w(
153
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
154
- 00 00 00 06 3B 00 00 00 00 FF FF 00 00 07 00
155
- ).join('')].pack('H*')
156
-
157
- caption = " \t+ Name ( Sheet1!#{area} )";
158
- result = _unpack_name(@workbook.data)
159
- target = _unpack_name(target)
160
- assert_equal(target, result)
161
- end
162
-
163
- def test_ranges_on_multiple_sheets
164
- worksheet1 = @workbook.add_worksheet
165
- worksheet2 = @workbook.add_worksheet
166
- worksheet3 = @workbook.add_worksheet
167
-
168
- worksheet1.print_area('A1:B2')
169
- worksheet2.print_area('D4:E5')
170
- worksheet3.print_area('G7:H8')
171
-
172
- # Test the EXTERNSHEET record.
173
- @workbook.calculate_extern_sizes
174
- @workbook.store_externsheet
175
-
176
- target = [%w(
177
- 17 00 14 00 03 00 00 00 00 00 00 00 00 00 01 00
178
- 01 00 00 00 02 00 02 00
179
- ).join('')].pack('H*')
180
-
181
- caption = " \tExternsheet"
182
- result = _unpack_externsheet(@workbook.data)
183
- target = _unpack_externsheet(target)
184
- assert_equal(target, result)
185
-
186
- # Test the NAME record.
187
- @workbook.clear_data_for_test
188
- @workbook.store_names
189
-
190
- target = [%w(
191
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
192
- 00 00 00 06 3B 00 00 00 00 01 00 00 00 01 00
193
-
194
- 18 00 1B 00 20 00 00 01 0B 00 00 00 02 00 00 00
195
- 00 00 00 06 3B 01 00 03 00 04 00 03 00 04 00
196
-
197
- 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
198
- 00 00 00 06 3B 02 00 06 00 07 00 06 00 07 00
199
- ).join('')].pack('H*')
200
-
201
- caption = " \t+ Name ( Sheet1!A1:B2, Sheet2!D4:E5, Sheet3!G7:H8 )";
202
- result = _unpack_name(@workbook.data)
203
- target = _unpack_name(target)
204
- assert_equal(target, result)
205
- end
206
-
207
- def test_ranges_on_multiple_sheets_with_sheets_spaced_out
208
- worksheet1 = @workbook.add_worksheet
209
- worksheet2 = @workbook.add_worksheet
210
- worksheet3 = @workbook.add_worksheet
211
- worksheet4 = @workbook.add_worksheet
212
- worksheet5 = @workbook.add_worksheet
213
-
214
- worksheet1.print_area('A1:B2')
215
- worksheet3.print_area('D4:E5')
216
- worksheet5.print_area('G7:H8')
217
-
218
- # Test the EXTERNSHEET record.
219
- @workbook.calculate_extern_sizes
220
- @workbook.store_externsheet
221
-
222
- target = [%w(
223
- 17 00 14 00 03 00 00 00 00 00 00 00 00 00 02 00
224
- 02 00 00 00 04 00 04 00
225
- ).join('')].pack('H*')
226
-
227
- caption = " \tExternsheet"
228
- result = _unpack_externsheet(@workbook.data)
229
- target = _unpack_externsheet(target)
230
- assert_equal(target, result)
231
-
232
- # Test the NAME record.
233
- @workbook.clear_data_for_test
234
- @workbook.store_names
235
-
236
- target = [%w(
237
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
238
- 00 00 00 06 3B 00 00 00 00 01 00 00 00 01 00
239
-
240
- 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
241
- 00 00 00 06 3B 01 00 03 00 04 00 03 00 04 00
242
-
243
- 18 00 1B 00 20 00 00 01 0B 00 00 00 05 00 00 00
244
- 00 00 00 06 3B 02 00 06 00 07 00 06 00 07 00
245
- ).join('')].pack('H*')
246
-
247
- caption = " \t+ Name ( Sheet1!A1:B2, Sheet3!D4:E5, Sheet5!G7:H8 )";
248
- result = _unpack_name(@workbook.data)
249
- target = _unpack_name(target)
250
- assert_equal(target, result)
251
- end
252
-
253
- ###############################################################################
254
- #
255
- # _unpack_externsheet()
256
- #
257
- # Unpack the EXTERNSHEET recordfor easier comparison.
258
- #
259
- def _unpack_externsheet(data)
260
- externsheet = Hash.new
261
-
262
- externsheet['record'] = data[0, 2].unpack('v')[0]
263
- data[0, 2] = ''
264
- externsheet['length'] = data[0, 2].unpack('v')[0]
265
- data[0, 2] = ''
266
- externsheet['count'] = data[0, 2].unpack('v')[0]
267
- data[0, 2] = ''
268
- externsheet['array'] = [];
269
-
270
- externsheet['count'].times do
271
- externsheet['array'] << data[0, 6].unpack('vvv')
272
- data[0, 6] = ''
273
- end
274
- externsheet
275
- end
276
-
277
- ###############################################################################
278
- #
279
- # _unpack_name()
280
- #
281
- # Unpack 1 or more NAME structures into a AoH for easier comparison.
282
- #
283
- def _unpack_name(data)
284
- names = Array.new
285
- while data.length > 0
286
- name = Hash.new
287
-
288
- name['record'] = data[0, 2].unpack('v')[0]
289
- data[0, 2] = ''
290
- name['length'] = data[0, 2].unpack('v')[0]
291
- data[0, 2] = ''
292
- name['flags'] = data[0, 2].unpack('v')[0]
293
- data[0, 2] = ''
294
- name['shortcut'] = data[0, 1].unpack('C')[0]
295
- data[0, 1] = ''
296
- name['str_len'] = data[0, 1].unpack('C')[0]
297
- data[0, 1] = ''
298
- name['formula_len'] = data[0, 2].unpack('v')[0]
299
- data[0, 2] = ''
300
- name['itals'] = data[0, 2].unpack('v')[0]
301
- data[0, 2] = ''
302
- name['sheet_index'] = data[0, 2].unpack('v')[0]
303
- data[0, 2] = ''
304
- name['menu_len'] = data[0, 1].unpack('C')[0]
305
- data[0, 1] = ''
306
- name['desc_len'] = data[0, 1].unpack('C')[0]
307
- data[0, 1] = ''
308
- name['help_len'] = data[0, 1].unpack('C')[0]
309
- data[0, 1] = ''
310
- name['status_len'] = data[0, 1].unpack('C')[0]
311
- data[0, 1] = ''
312
- name['encoding'] = data[0, 1].unpack('C')[0]
313
- data[0, 1] = ''
314
-
315
- # Decode the individual flag fields.
316
- flag = Hash.new
317
- flag['hidden'] = name['flags'] & 0x0001
318
- flag['function'] = name['flags'] & 0x0002
319
- flag['vb'] = name['flags'] & 0x0004
320
- flag['macro'] = name['flags'] & 0x0008
321
- flag['complex'] = name['flags'] & 0x0010
322
- flag['builtin'] = name['flags'] & 0x0020
323
- flag['group'] = name['flags'] & 0x0FC0
324
- flag['binary'] = name['flags'] & 0x1000
325
- name['flags'] = flag
326
-
327
- # Decode the string part of the NAME structure.
328
- if name['encoding'] == 1
329
- # UTF-16 name. Leave in hex.
330
- name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
331
- data[0, 2 * name['str_len']] = ''
332
- elsif flag['builtin'] != 0
333
- # 1 digit builtin name. Leave in hex.
334
- name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
335
- data[0, name['str_len']] = ''
336
- else
337
- # ASCII name.
338
- name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
339
- data[0, name['str_len']] = ''
340
- end
341
-
342
- # Keep the formula as a hex string.
343
- name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
344
- data[0, name['formula_len']] = ''
345
-
346
- names << name
347
- end
348
- names
349
- end
350
-
351
- def assert_hash_equal?(result, target)
352
- assert_equal(result.keys.sort, target.keys.sort)
353
- result.each_key do |key|
354
- assert_equal(result[key], target[key])
355
- end
356
- end
357
- end
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_51_name_print_area.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_Name_Print_Area < 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_print_area_name_for_a_simple_range
28
+ worksheet1 = @workbook.add_worksheet
29
+ area = 'A1:B12'
30
+
31
+ worksheet1.print_area(area)
32
+
33
+ # Test the EXTERNSHEET record.
34
+ @workbook.calculate_extern_sizes
35
+ @workbook.store_externsheet
36
+
37
+ target = [%w(
38
+ 17 00 08 00 01 00 00 00 00 00 00 00
39
+ ).join('')].pack('H*')
40
+
41
+ caption = " \tExternsheet"
42
+ result = _unpack_externsheet(@workbook.data)
43
+ target = _unpack_externsheet(target)
44
+ assert_equal(target, result)
45
+
46
+ # Test the NAME record.
47
+ @workbook.clear_data_for_test
48
+ @workbook.store_names
49
+
50
+ target = [%w(
51
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
52
+ 00 00 00 06 3B 00 00 00 00 0B 00 00 00 01 00
53
+ ).join('')].pack('H*')
54
+
55
+ caption = " \t+ Name ( Sheet1!#{area} )";
56
+ result = _unpack_name(@workbook.data)
57
+ target = _unpack_name(target)
58
+ assert_equal(target, result)
59
+ end
60
+
61
+ def test_print_area_name_for_a_simple_row
62
+ worksheet1 = @workbook.add_worksheet
63
+ area = 'A1:IV1'
64
+
65
+ worksheet1.print_area(area)
66
+
67
+ # Test the EXTERNSHEET record.
68
+ @workbook.calculate_extern_sizes
69
+ @workbook.store_externsheet
70
+
71
+ target = [%w(
72
+ 17 00 08 00 01 00 00 00 00 00 00 00
73
+ ).join('')].pack('H*')
74
+
75
+ caption = " \tExternsheet"
76
+ result = _unpack_externsheet(@workbook.data)
77
+ target = _unpack_externsheet(target)
78
+ assert_equal(target, result, caption)
79
+
80
+ # Test the NAME record.
81
+ @workbook.clear_data_for_test
82
+ @workbook.store_names
83
+
84
+ target = [%w(
85
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
86
+ 00 00 00 06 3B 00 00 00 00 00 00 00 00 FF 00
87
+ ).join('')].pack('H*')
88
+
89
+ caption = " \t+ Name ( Sheet1!#{area} )";
90
+ result = _unpack_name(@workbook.data)
91
+ target = _unpack_name(target)
92
+ assert_equal(target, result, caption)
93
+ end
94
+
95
+ def test_print_area_name_for_a_simple_column
96
+ worksheet1 = @workbook.add_worksheet
97
+ area = 'A1:A65536'
98
+
99
+ worksheet1.print_area(area)
100
+
101
+ # Test the EXTERNSHEET record.
102
+ @workbook.calculate_extern_sizes
103
+ @workbook.store_externsheet
104
+
105
+ target = [%w(
106
+ 17 00 08 00 01 00 00 00 00 00 00 00
107
+ ).join('')].pack('H*')
108
+
109
+ caption = " \tExternsheet"
110
+ result = _unpack_externsheet(@workbook.data)
111
+ target = _unpack_externsheet(target)
112
+ assert_equal(target, result)
113
+
114
+ # Test the NAME record.
115
+ @workbook.clear_data_for_test
116
+ @workbook.store_names
117
+
118
+ target = [%w(
119
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
120
+ 00 00 00 06 3B 00 00 00 00 FF FF 00 00 00 00
121
+ ).join('')].pack('H*')
122
+
123
+ caption = " \t+ Name ( Sheet1!#{area} )";
124
+ result = _unpack_name(@workbook.data)
125
+ target = _unpack_name(target)
126
+ assert_equal(target, result)
127
+ end
128
+
129
+ def test_print_area_name_for_a_multiple_column
130
+ worksheet1 = @workbook.add_worksheet
131
+ area = 'A:H'
132
+
133
+ worksheet1.print_area(area)
134
+
135
+ # Test the EXTERNSHEET record.
136
+ @workbook.calculate_extern_sizes
137
+ @workbook.store_externsheet
138
+
139
+ target = [%w(
140
+ 17 00 08 00 01 00 00 00 00 00 00 00
141
+ ).join('')].pack('H*')
142
+
143
+ caption = " \tExternsheet"
144
+ result = _unpack_externsheet(@workbook.data)
145
+ target = _unpack_externsheet(target)
146
+ assert_equal(target, result)
147
+
148
+ # Test the NAME record.
149
+ @workbook.clear_data_for_test
150
+ @workbook.store_names
151
+
152
+ target = [%w(
153
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
154
+ 00 00 00 06 3B 00 00 00 00 FF FF 00 00 07 00
155
+ ).join('')].pack('H*')
156
+
157
+ caption = " \t+ Name ( Sheet1!#{area} )";
158
+ result = _unpack_name(@workbook.data)
159
+ target = _unpack_name(target)
160
+ assert_equal(target, result)
161
+ end
162
+
163
+ def test_ranges_on_multiple_sheets
164
+ worksheet1 = @workbook.add_worksheet
165
+ worksheet2 = @workbook.add_worksheet
166
+ worksheet3 = @workbook.add_worksheet
167
+
168
+ worksheet1.print_area('A1:B2')
169
+ worksheet2.print_area('D4:E5')
170
+ worksheet3.print_area('G7:H8')
171
+
172
+ # Test the EXTERNSHEET record.
173
+ @workbook.calculate_extern_sizes
174
+ @workbook.store_externsheet
175
+
176
+ target = [%w(
177
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 01 00
178
+ 01 00 00 00 02 00 02 00
179
+ ).join('')].pack('H*')
180
+
181
+ caption = " \tExternsheet"
182
+ result = _unpack_externsheet(@workbook.data)
183
+ target = _unpack_externsheet(target)
184
+ assert_equal(target, result)
185
+
186
+ # Test the NAME record.
187
+ @workbook.clear_data_for_test
188
+ @workbook.store_names
189
+
190
+ target = [%w(
191
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
192
+ 00 00 00 06 3B 00 00 00 00 01 00 00 00 01 00
193
+
194
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 02 00 00 00
195
+ 00 00 00 06 3B 01 00 03 00 04 00 03 00 04 00
196
+
197
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
198
+ 00 00 00 06 3B 02 00 06 00 07 00 06 00 07 00
199
+ ).join('')].pack('H*')
200
+
201
+ caption = " \t+ Name ( Sheet1!A1:B2, Sheet2!D4:E5, Sheet3!G7:H8 )";
202
+ result = _unpack_name(@workbook.data)
203
+ target = _unpack_name(target)
204
+ assert_equal(target, result)
205
+ end
206
+
207
+ def test_ranges_on_multiple_sheets_with_sheets_spaced_out
208
+ worksheet1 = @workbook.add_worksheet
209
+ worksheet2 = @workbook.add_worksheet
210
+ worksheet3 = @workbook.add_worksheet
211
+ worksheet4 = @workbook.add_worksheet
212
+ worksheet5 = @workbook.add_worksheet
213
+
214
+ worksheet1.print_area('A1:B2')
215
+ worksheet3.print_area('D4:E5')
216
+ worksheet5.print_area('G7:H8')
217
+
218
+ # Test the EXTERNSHEET record.
219
+ @workbook.calculate_extern_sizes
220
+ @workbook.store_externsheet
221
+
222
+ target = [%w(
223
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 02 00
224
+ 02 00 00 00 04 00 04 00
225
+ ).join('')].pack('H*')
226
+
227
+ caption = " \tExternsheet"
228
+ result = _unpack_externsheet(@workbook.data)
229
+ target = _unpack_externsheet(target)
230
+ assert_equal(target, result)
231
+
232
+ # Test the NAME record.
233
+ @workbook.clear_data_for_test
234
+ @workbook.store_names
235
+
236
+ target = [%w(
237
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
238
+ 00 00 00 06 3B 00 00 00 00 01 00 00 00 01 00
239
+
240
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
241
+ 00 00 00 06 3B 01 00 03 00 04 00 03 00 04 00
242
+
243
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 05 00 00 00
244
+ 00 00 00 06 3B 02 00 06 00 07 00 06 00 07 00
245
+ ).join('')].pack('H*')
246
+
247
+ caption = " \t+ Name ( Sheet1!A1:B2, Sheet3!D4:E5, Sheet5!G7:H8 )";
248
+ result = _unpack_name(@workbook.data)
249
+ target = _unpack_name(target)
250
+ assert_equal(target, result)
251
+ end
252
+
253
+ ###############################################################################
254
+ #
255
+ # _unpack_externsheet()
256
+ #
257
+ # Unpack the EXTERNSHEET recordfor easier comparison.
258
+ #
259
+ def _unpack_externsheet(data)
260
+ externsheet = Hash.new
261
+
262
+ externsheet['record'] = data[0, 2].unpack('v')[0]
263
+ data[0, 2] = ''
264
+ externsheet['length'] = data[0, 2].unpack('v')[0]
265
+ data[0, 2] = ''
266
+ externsheet['count'] = data[0, 2].unpack('v')[0]
267
+ data[0, 2] = ''
268
+ externsheet['array'] = [];
269
+
270
+ externsheet['count'].times do
271
+ externsheet['array'] << data[0, 6].unpack('vvv')
272
+ data[0, 6] = ''
273
+ end
274
+ externsheet
275
+ end
276
+
277
+ ###############################################################################
278
+ #
279
+ # _unpack_name()
280
+ #
281
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
282
+ #
283
+ def _unpack_name(data)
284
+ names = Array.new
285
+ while data.length > 0
286
+ name = Hash.new
287
+
288
+ name['record'] = data[0, 2].unpack('v')[0]
289
+ data[0, 2] = ''
290
+ name['length'] = data[0, 2].unpack('v')[0]
291
+ data[0, 2] = ''
292
+ name['flags'] = data[0, 2].unpack('v')[0]
293
+ data[0, 2] = ''
294
+ name['shortcut'] = data[0, 1].unpack('C')[0]
295
+ data[0, 1] = ''
296
+ name['str_len'] = data[0, 1].unpack('C')[0]
297
+ data[0, 1] = ''
298
+ name['formula_len'] = data[0, 2].unpack('v')[0]
299
+ data[0, 2] = ''
300
+ name['itals'] = data[0, 2].unpack('v')[0]
301
+ data[0, 2] = ''
302
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
303
+ data[0, 2] = ''
304
+ name['menu_len'] = data[0, 1].unpack('C')[0]
305
+ data[0, 1] = ''
306
+ name['desc_len'] = data[0, 1].unpack('C')[0]
307
+ data[0, 1] = ''
308
+ name['help_len'] = data[0, 1].unpack('C')[0]
309
+ data[0, 1] = ''
310
+ name['status_len'] = data[0, 1].unpack('C')[0]
311
+ data[0, 1] = ''
312
+ name['encoding'] = data[0, 1].unpack('C')[0]
313
+ data[0, 1] = ''
314
+
315
+ # Decode the individual flag fields.
316
+ flag = Hash.new
317
+ flag['hidden'] = name['flags'] & 0x0001
318
+ flag['function'] = name['flags'] & 0x0002
319
+ flag['vb'] = name['flags'] & 0x0004
320
+ flag['macro'] = name['flags'] & 0x0008
321
+ flag['complex'] = name['flags'] & 0x0010
322
+ flag['builtin'] = name['flags'] & 0x0020
323
+ flag['group'] = name['flags'] & 0x0FC0
324
+ flag['binary'] = name['flags'] & 0x1000
325
+ name['flags'] = flag
326
+
327
+ # Decode the string part of the NAME structure.
328
+ if name['encoding'] == 1
329
+ # UTF-16 name. Leave in hex.
330
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
331
+ data[0, 2 * name['str_len']] = ''
332
+ elsif flag['builtin'] != 0
333
+ # 1 digit builtin name. Leave in hex.
334
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
335
+ data[0, name['str_len']] = ''
336
+ else
337
+ # ASCII name.
338
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
339
+ data[0, name['str_len']] = ''
340
+ end
341
+
342
+ # Keep the formula as a hex string.
343
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
344
+ data[0, name['formula_len']] = ''
345
+
346
+ names << name
347
+ end
348
+ names
349
+ end
350
+
351
+ def assert_hash_equal?(result, target)
352
+ assert_equal(result.keys.sort, target.keys.sort)
353
+ result.each_key do |key|
354
+ assert_equal(result[key], target[key])
355
+ end
356
+ end
357
+ end