writeexcel 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,454 +1,454 @@
1
- # -*- coding: utf-8 -*-
2
- ##########################################################################
3
- # test_52_name_print_titles.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_Titles < 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_repeat_rows_for_top_row_only
28
- worksheet1 = @workbook.add_worksheet
29
-
30
- worksheet1.repeat_rows(0)
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 20 00 00 01 0B 00 00 00 01 00 00 00
51
- 00 00 00 07 3B 00 00 00 00 00 00 00 00 FF 00
52
- ).join('')].pack('H*')
53
-
54
- caption = " \t+ Name repeats ( Sheet1!1:1 )";
55
- result = _unpack_name(@workbook.data)
56
- target = _unpack_name(target)
57
- assert_equal(target, result)
58
- end
59
-
60
- def test_repeat_rows_for_top_10_rows
61
- worksheet1 = @workbook.add_worksheet
62
-
63
- worksheet1.repeat_rows(0, 9)
64
-
65
- # Test the EXTERNSHEET record.
66
- @workbook.calculate_extern_sizes
67
- @workbook.store_externsheet
68
-
69
- target = [%w(
70
- 17 00 08 00 01 00 00 00 00 00 00 00
71
- ).join('')].pack('H*')
72
-
73
- caption = " \tExternsheet"
74
- result = _unpack_externsheet(@workbook.data)
75
- target = _unpack_externsheet(target)
76
- assert_equal(target, result)
77
-
78
- # Test the NAME record.
79
- @workbook.clear_data_for_test
80
- @workbook.store_names
81
-
82
- target = [%w(
83
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
84
- 00 00 00 07 3B 00 00 00 00 09 00 00 00 FF 00
85
- ).join('')].pack('H*')
86
-
87
- caption = " \t+ Name repeats ( Sheet1!1:10 )";
88
- result = _unpack_name(@workbook.data)
89
- target = _unpack_name(target)
90
- assert_equal(target, result)
91
- end
92
-
93
- def test_repeat_columns_for_a_single_column
94
- worksheet1 = @workbook.add_worksheet
95
-
96
- worksheet1.repeat_columns(0)
97
-
98
- # Test the EXTERNSHEET record.
99
- @workbook.calculate_extern_sizes
100
- @workbook.store_externsheet
101
-
102
- target = [%w(
103
- 17 00 08 00 01 00 00 00 00 00 00 00
104
- ).join('')].pack('H*')
105
-
106
- caption = " \tExternsheet"
107
- result = _unpack_externsheet(@workbook.data)
108
- target = _unpack_externsheet(target)
109
- assert_equal(target, result)
110
-
111
- # Test the NAME record.
112
- @workbook.clear_data_for_test
113
- @workbook.store_names
114
-
115
- target = [%w(
116
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
117
- 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
118
- ).join('')].pack('H*')
119
-
120
- caption = " \t+ Name repeats ( Sheet1!A:A )";
121
- result = _unpack_name(@workbook.data)
122
- target = _unpack_name(target)
123
- assert_equal(target, result)
124
- end
125
-
126
- def test_repeat_columns_for_a_single_column_A1_notation
127
- worksheet1 = @workbook.add_worksheet
128
-
129
- worksheet1.repeat_columns('A:A')
130
-
131
- # Test the EXTERNSHEET record.
132
- @workbook.calculate_extern_sizes
133
- @workbook.store_externsheet
134
-
135
- target = [%w(
136
- 17 00 08 00 01 00 00 00 00 00 00 00
137
- ).join('')].pack('H*')
138
-
139
- caption = " \tExternsheet"
140
- result = _unpack_externsheet(@workbook.data)
141
- target = _unpack_externsheet(target)
142
- assert_equal(target, result)
143
-
144
- # Test the NAME record.
145
- @workbook.clear_data_for_test
146
- @workbook.store_names
147
-
148
- target = [%w(
149
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
150
- 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
151
- ).join('')].pack('H*')
152
-
153
- caption = " \t+ Name repeats ( Sheet1!A:A )";
154
- result = _unpack_name(@workbook.data)
155
- target = _unpack_name(target)
156
- assert_equal(target, result)
157
- end
158
-
159
- def test_repeat_columns_for_a_10_columns
160
- worksheet1 = @workbook.add_worksheet
161
-
162
- worksheet1.repeat_columns(0, 9)
163
-
164
- # Test the EXTERNSHEET record.
165
- @workbook.calculate_extern_sizes
166
- @workbook.store_externsheet
167
-
168
- target = [%w(
169
- 17 00 08 00 01 00 00 00 00 00 00 00
170
- ).join('')].pack('H*')
171
-
172
- caption = " \tExternsheet"
173
- result = _unpack_externsheet(@workbook.data)
174
- target = _unpack_externsheet(target)
175
- assert_equal(target, result)
176
-
177
- # Test the NAME record.
178
- @workbook.clear_data_for_test
179
- @workbook.store_names
180
-
181
- target = [%w(
182
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
183
- 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
184
- ).join('')].pack('H*')
185
-
186
- caption = " \t+ Name repeats ( Sheet1!A:J )";
187
- result = _unpack_name(@workbook.data)
188
- target = _unpack_name(target)
189
- assert_equal(target, result)
190
- end
191
-
192
- def test_repeat_columns_for_a_10_columns_A1_notation
193
- worksheet1 = @workbook.add_worksheet
194
-
195
- worksheet1.repeat_columns('A:J')
196
-
197
- # Test the EXTERNSHEET record.
198
- @workbook.calculate_extern_sizes
199
- @workbook.store_externsheet
200
-
201
- target = [%w(
202
- 17 00 08 00 01 00 00 00 00 00 00 00
203
- ).join('')].pack('H*')
204
-
205
- caption = " \tExternsheet"
206
- result = _unpack_externsheet(@workbook.data)
207
- target = _unpack_externsheet(target)
208
- assert_equal(target, result)
209
-
210
- # Test the NAME record.
211
- @workbook.clear_data_for_test
212
- @workbook.store_names
213
-
214
- target = [%w(
215
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
216
- 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
217
- ).join('')].pack('H*')
218
-
219
- caption = " \t+ Name repeats ( Sheet1!A:J )";
220
- result = _unpack_name(@workbook.data)
221
- target = _unpack_name(target)
222
- assert_equal(target, result)
223
- end
224
-
225
- def test_repeat_rows_on_multiple_sheets
226
- worksheet1 = @workbook.add_worksheet
227
- worksheet2 = @workbook.add_worksheet
228
- worksheet3 = @workbook.add_worksheet
229
-
230
- worksheet1.repeat_rows(0, 1)
231
- worksheet2.repeat_rows(3, 4)
232
- worksheet3.repeat_rows(6, 7)
233
-
234
- # Test the EXTERNSHEET record.
235
- @workbook.calculate_extern_sizes
236
- @workbook.store_externsheet
237
-
238
- target = [%w(
239
- 17 00 14 00 03 00 00 00 00 00 00 00 00 00 01 00
240
- 01 00 00 00 02 00 02 00
241
- ).join('')].pack('H*')
242
-
243
- caption = " \tExternsheet"
244
- result = _unpack_externsheet(@workbook.data)
245
- target = _unpack_externsheet(target)
246
- assert_equal(target, result)
247
-
248
- # Test the NAME record.
249
- @workbook.clear_data_for_test
250
- @workbook.store_names
251
-
252
- target = [%w(
253
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
254
- 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
255
-
256
- 18 00 1B 00 20 00 00 01 0B 00 00 00 02 00 00 00
257
- 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
258
-
259
- 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
260
- 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
261
- ).join('')].pack('H*')
262
-
263
- caption = " \t+ Name repeats ( Sheet1!1:2, Sheet2!4:5, Sheet3!7:8 )";
264
- result = _unpack_name(@workbook.data)
265
- target = _unpack_name(target)
266
- assert_equal(target, result)
267
- end
268
-
269
- def test_repeat_rows_on_multiple_sheets_with_sheets_spaced_out
270
- worksheet1 = @workbook.add_worksheet
271
- worksheet2 = @workbook.add_worksheet
272
- worksheet3 = @workbook.add_worksheet
273
- worksheet4 = @workbook.add_worksheet
274
- worksheet5 = @workbook.add_worksheet
275
-
276
- worksheet1.repeat_rows(0, 1)
277
- worksheet3.repeat_rows(3, 4)
278
- worksheet5.repeat_rows(6, 7)
279
-
280
- # Test the EXTERNSHEET record.
281
- @workbook.calculate_extern_sizes
282
- @workbook.store_externsheet
283
-
284
- target = [%w(
285
- 17 00 14 00 03 00 00 00 00 00 00 00 00 00 02 00
286
- 02 00 00 00 04 00 04 00
287
- ).join('')].pack('H*')
288
-
289
- caption = " \tExternsheet"
290
- result = _unpack_externsheet(@workbook.data)
291
- target = _unpack_externsheet(target)
292
- assert_equal(target, result)
293
-
294
- # Test the NAME record.
295
- @workbook.clear_data_for_test
296
- @workbook.store_names
297
-
298
- target = [%w(
299
- 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
300
- 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
301
-
302
- 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
303
- 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
304
-
305
- 18 00 1B 00 20 00 00 01 0B 00 00 00 05 00 00 00
306
- 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
307
- ).join('')].pack('H*')
308
-
309
- caption = " \t+ Name repeats ( Sheet1!1:2, Sheet3!4:5, Sheet5!7:8 )";
310
- result = _unpack_name(@workbook.data)
311
- target = _unpack_name(target)
312
- assert_equal(target, result)
313
- end
314
-
315
- def test_repeat_rows_and_repeat_columns_together
316
- worksheet1 = @workbook.add_worksheet
317
-
318
- worksheet1.repeat_rows(1, 2)
319
- worksheet1.repeat_columns(3, 4)
320
-
321
- # Test the EXTERNSHEET record.
322
- @workbook.calculate_extern_sizes
323
- @workbook.store_externsheet
324
-
325
- target = [%w(
326
- 17 00 08 00 01 00 00 00 00 00 00 00
327
- ).join('')].pack('H*')
328
-
329
- caption = " \tExternsheet"
330
- result = _unpack_externsheet(@workbook.data)
331
- target = _unpack_externsheet(target)
332
- assert_equal(target, result)
333
-
334
- # Test the NAME record.
335
- @workbook.clear_data_for_test
336
- @workbook.store_names
337
-
338
- target = [%w(
339
- 18 00 2A 00 20 00 00 01 1A 00 00 00 01 00 00 00
340
- 00 00 00 07 29 17 00 3B 00 00 00 00 FF FF 03 00
341
- 04 00 3B 00 00 01 00 02 00 00 00 FF 00 10
342
- ).join('')].pack('H*')
343
-
344
- caption = " \t+ Name repeats ( Sheet1!2:3, Sheet1!D:E )";
345
- result = _unpack_name(@workbook.data)
346
- target = _unpack_name(target)
347
- assert_equal(target, result)
348
- end
349
-
350
- ###############################################################################
351
- #
352
- # _unpack_externsheet()
353
- #
354
- # Unpack the EXTERNSHEET recordfor easier comparison.
355
- #
356
- def _unpack_externsheet(data)
357
- externsheet = Hash.new
358
-
359
- externsheet['record'] = data[0, 2].unpack('v')[0]
360
- data[0, 2] = ''
361
- externsheet['length'] = data[0, 2].unpack('v')[0]
362
- data[0, 2] = ''
363
- externsheet['count'] = data[0, 2].unpack('v')[0]
364
- data[0, 2] = ''
365
- externsheet['array'] = [];
366
-
367
- externsheet['count'].times do
368
- externsheet['array'] << data[0, 6].unpack('vvv')
369
- data[0, 6] = ''
370
- end
371
- externsheet
372
- end
373
-
374
- ###############################################################################
375
- #
376
- # _unpack_name()
377
- #
378
- # Unpack 1 or more NAME structures into a AoH for easier comparison.
379
- #
380
- def _unpack_name(data)
381
- names = Array.new
382
- while data.length > 0
383
- name = Hash.new
384
-
385
- name['record'] = data[0, 2].unpack('v')[0]
386
- data[0, 2] = ''
387
- name['length'] = data[0, 2].unpack('v')[0]
388
- data[0, 2] = ''
389
- name['flags'] = data[0, 2].unpack('v')[0]
390
- data[0, 2] = ''
391
- name['shortcut'] = data[0, 1].unpack('C')[0]
392
- data[0, 1] = ''
393
- name['str_len'] = data[0, 1].unpack('C')[0]
394
- data[0, 1] = ''
395
- name['formula_len'] = data[0, 2].unpack('v')[0]
396
- data[0, 2] = ''
397
- name['itals'] = data[0, 2].unpack('v')[0]
398
- data[0, 2] = ''
399
- name['sheet_index'] = data[0, 2].unpack('v')[0]
400
- data[0, 2] = ''
401
- name['menu_len'] = data[0, 1].unpack('C')[0]
402
- data[0, 1] = ''
403
- name['desc_len'] = data[0, 1].unpack('C')[0]
404
- data[0, 1] = ''
405
- name['help_len'] = data[0, 1].unpack('C')[0]
406
- data[0, 1] = ''
407
- name['status_len'] = data[0, 1].unpack('C')[0]
408
- data[0, 1] = ''
409
- name['encoding'] = data[0, 1].unpack('C')[0]
410
- data[0, 1] = ''
411
-
412
- # Decode the individual flag fields.
413
- flag = Hash.new
414
- flag['hidden'] = name['flags'] & 0x0001
415
- flag['function'] = name['flags'] & 0x0002
416
- flag['vb'] = name['flags'] & 0x0004
417
- flag['macro'] = name['flags'] & 0x0008
418
- flag['complex'] = name['flags'] & 0x0010
419
- flag['builtin'] = name['flags'] & 0x0020
420
- flag['group'] = name['flags'] & 0x0FC0
421
- flag['binary'] = name['flags'] & 0x1000
422
- name['flags'] = flag
423
-
424
- # Decode the string part of the NAME structure.
425
- if name['encoding'] == 1
426
- # UTF-16 name. Leave in hex.
427
- name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
428
- data[0, 2 * name['str_len']] = ''
429
- elsif flag['builtin'] != 0
430
- # 1 digit builtin name. Leave in hex.
431
- name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
432
- data[0, name['str_len']] = ''
433
- else
434
- # ASCII name.
435
- name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
436
- data[0, name['str_len']] = ''
437
- end
438
-
439
- # Keep the formula as a hex string.
440
- name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
441
- data[0, name['formula_len']] = ''
442
-
443
- names << name
444
- end
445
- names
446
- end
447
-
448
- def assert_hash_equal?(result, target)
449
- assert_equal(result.keys.sort, target.keys.sort)
450
- result.each_key do |key|
451
- assert_equal(result[key], target[key])
452
- end
453
- end
454
- end
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_52_name_print_titles.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_Titles < 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_repeat_rows_for_top_row_only
28
+ worksheet1 = @workbook.add_worksheet
29
+
30
+ worksheet1.repeat_rows(0)
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 20 00 00 01 0B 00 00 00 01 00 00 00
51
+ 00 00 00 07 3B 00 00 00 00 00 00 00 00 FF 00
52
+ ).join('')].pack('H*')
53
+
54
+ caption = " \t+ Name repeats ( Sheet1!1:1 )";
55
+ result = _unpack_name(@workbook.data)
56
+ target = _unpack_name(target)
57
+ assert_equal(target, result)
58
+ end
59
+
60
+ def test_repeat_rows_for_top_10_rows
61
+ worksheet1 = @workbook.add_worksheet
62
+
63
+ worksheet1.repeat_rows(0, 9)
64
+
65
+ # Test the EXTERNSHEET record.
66
+ @workbook.calculate_extern_sizes
67
+ @workbook.store_externsheet
68
+
69
+ target = [%w(
70
+ 17 00 08 00 01 00 00 00 00 00 00 00
71
+ ).join('')].pack('H*')
72
+
73
+ caption = " \tExternsheet"
74
+ result = _unpack_externsheet(@workbook.data)
75
+ target = _unpack_externsheet(target)
76
+ assert_equal(target, result)
77
+
78
+ # Test the NAME record.
79
+ @workbook.clear_data_for_test
80
+ @workbook.store_names
81
+
82
+ target = [%w(
83
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
84
+ 00 00 00 07 3B 00 00 00 00 09 00 00 00 FF 00
85
+ ).join('')].pack('H*')
86
+
87
+ caption = " \t+ Name repeats ( Sheet1!1:10 )";
88
+ result = _unpack_name(@workbook.data)
89
+ target = _unpack_name(target)
90
+ assert_equal(target, result)
91
+ end
92
+
93
+ def test_repeat_columns_for_a_single_column
94
+ worksheet1 = @workbook.add_worksheet
95
+
96
+ worksheet1.repeat_columns(0)
97
+
98
+ # Test the EXTERNSHEET record.
99
+ @workbook.calculate_extern_sizes
100
+ @workbook.store_externsheet
101
+
102
+ target = [%w(
103
+ 17 00 08 00 01 00 00 00 00 00 00 00
104
+ ).join('')].pack('H*')
105
+
106
+ caption = " \tExternsheet"
107
+ result = _unpack_externsheet(@workbook.data)
108
+ target = _unpack_externsheet(target)
109
+ assert_equal(target, result)
110
+
111
+ # Test the NAME record.
112
+ @workbook.clear_data_for_test
113
+ @workbook.store_names
114
+
115
+ target = [%w(
116
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
117
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
118
+ ).join('')].pack('H*')
119
+
120
+ caption = " \t+ Name repeats ( Sheet1!A:A )";
121
+ result = _unpack_name(@workbook.data)
122
+ target = _unpack_name(target)
123
+ assert_equal(target, result)
124
+ end
125
+
126
+ def test_repeat_columns_for_a_single_column_A1_notation
127
+ worksheet1 = @workbook.add_worksheet
128
+
129
+ worksheet1.repeat_columns('A:A')
130
+
131
+ # Test the EXTERNSHEET record.
132
+ @workbook.calculate_extern_sizes
133
+ @workbook.store_externsheet
134
+
135
+ target = [%w(
136
+ 17 00 08 00 01 00 00 00 00 00 00 00
137
+ ).join('')].pack('H*')
138
+
139
+ caption = " \tExternsheet"
140
+ result = _unpack_externsheet(@workbook.data)
141
+ target = _unpack_externsheet(target)
142
+ assert_equal(target, result)
143
+
144
+ # Test the NAME record.
145
+ @workbook.clear_data_for_test
146
+ @workbook.store_names
147
+
148
+ target = [%w(
149
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
150
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
151
+ ).join('')].pack('H*')
152
+
153
+ caption = " \t+ Name repeats ( Sheet1!A:A )";
154
+ result = _unpack_name(@workbook.data)
155
+ target = _unpack_name(target)
156
+ assert_equal(target, result)
157
+ end
158
+
159
+ def test_repeat_columns_for_a_10_columns
160
+ worksheet1 = @workbook.add_worksheet
161
+
162
+ worksheet1.repeat_columns(0, 9)
163
+
164
+ # Test the EXTERNSHEET record.
165
+ @workbook.calculate_extern_sizes
166
+ @workbook.store_externsheet
167
+
168
+ target = [%w(
169
+ 17 00 08 00 01 00 00 00 00 00 00 00
170
+ ).join('')].pack('H*')
171
+
172
+ caption = " \tExternsheet"
173
+ result = _unpack_externsheet(@workbook.data)
174
+ target = _unpack_externsheet(target)
175
+ assert_equal(target, result)
176
+
177
+ # Test the NAME record.
178
+ @workbook.clear_data_for_test
179
+ @workbook.store_names
180
+
181
+ target = [%w(
182
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
183
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
184
+ ).join('')].pack('H*')
185
+
186
+ caption = " \t+ Name repeats ( Sheet1!A:J )";
187
+ result = _unpack_name(@workbook.data)
188
+ target = _unpack_name(target)
189
+ assert_equal(target, result)
190
+ end
191
+
192
+ def test_repeat_columns_for_a_10_columns_A1_notation
193
+ worksheet1 = @workbook.add_worksheet
194
+
195
+ worksheet1.repeat_columns('A:J')
196
+
197
+ # Test the EXTERNSHEET record.
198
+ @workbook.calculate_extern_sizes
199
+ @workbook.store_externsheet
200
+
201
+ target = [%w(
202
+ 17 00 08 00 01 00 00 00 00 00 00 00
203
+ ).join('')].pack('H*')
204
+
205
+ caption = " \tExternsheet"
206
+ result = _unpack_externsheet(@workbook.data)
207
+ target = _unpack_externsheet(target)
208
+ assert_equal(target, result)
209
+
210
+ # Test the NAME record.
211
+ @workbook.clear_data_for_test
212
+ @workbook.store_names
213
+
214
+ target = [%w(
215
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
216
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
217
+ ).join('')].pack('H*')
218
+
219
+ caption = " \t+ Name repeats ( Sheet1!A:J )";
220
+ result = _unpack_name(@workbook.data)
221
+ target = _unpack_name(target)
222
+ assert_equal(target, result)
223
+ end
224
+
225
+ def test_repeat_rows_on_multiple_sheets
226
+ worksheet1 = @workbook.add_worksheet
227
+ worksheet2 = @workbook.add_worksheet
228
+ worksheet3 = @workbook.add_worksheet
229
+
230
+ worksheet1.repeat_rows(0, 1)
231
+ worksheet2.repeat_rows(3, 4)
232
+ worksheet3.repeat_rows(6, 7)
233
+
234
+ # Test the EXTERNSHEET record.
235
+ @workbook.calculate_extern_sizes
236
+ @workbook.store_externsheet
237
+
238
+ target = [%w(
239
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 01 00
240
+ 01 00 00 00 02 00 02 00
241
+ ).join('')].pack('H*')
242
+
243
+ caption = " \tExternsheet"
244
+ result = _unpack_externsheet(@workbook.data)
245
+ target = _unpack_externsheet(target)
246
+ assert_equal(target, result)
247
+
248
+ # Test the NAME record.
249
+ @workbook.clear_data_for_test
250
+ @workbook.store_names
251
+
252
+ target = [%w(
253
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
254
+ 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
255
+
256
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 02 00 00 00
257
+ 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
258
+
259
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
260
+ 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
261
+ ).join('')].pack('H*')
262
+
263
+ caption = " \t+ Name repeats ( Sheet1!1:2, Sheet2!4:5, Sheet3!7:8 )";
264
+ result = _unpack_name(@workbook.data)
265
+ target = _unpack_name(target)
266
+ assert_equal(target, result)
267
+ end
268
+
269
+ def test_repeat_rows_on_multiple_sheets_with_sheets_spaced_out
270
+ worksheet1 = @workbook.add_worksheet
271
+ worksheet2 = @workbook.add_worksheet
272
+ worksheet3 = @workbook.add_worksheet
273
+ worksheet4 = @workbook.add_worksheet
274
+ worksheet5 = @workbook.add_worksheet
275
+
276
+ worksheet1.repeat_rows(0, 1)
277
+ worksheet3.repeat_rows(3, 4)
278
+ worksheet5.repeat_rows(6, 7)
279
+
280
+ # Test the EXTERNSHEET record.
281
+ @workbook.calculate_extern_sizes
282
+ @workbook.store_externsheet
283
+
284
+ target = [%w(
285
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 02 00
286
+ 02 00 00 00 04 00 04 00
287
+ ).join('')].pack('H*')
288
+
289
+ caption = " \tExternsheet"
290
+ result = _unpack_externsheet(@workbook.data)
291
+ target = _unpack_externsheet(target)
292
+ assert_equal(target, result)
293
+
294
+ # Test the NAME record.
295
+ @workbook.clear_data_for_test
296
+ @workbook.store_names
297
+
298
+ target = [%w(
299
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
300
+ 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
301
+
302
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
303
+ 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
304
+
305
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 05 00 00 00
306
+ 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
307
+ ).join('')].pack('H*')
308
+
309
+ caption = " \t+ Name repeats ( Sheet1!1:2, Sheet3!4:5, Sheet5!7:8 )";
310
+ result = _unpack_name(@workbook.data)
311
+ target = _unpack_name(target)
312
+ assert_equal(target, result)
313
+ end
314
+
315
+ def test_repeat_rows_and_repeat_columns_together
316
+ worksheet1 = @workbook.add_worksheet
317
+
318
+ worksheet1.repeat_rows(1, 2)
319
+ worksheet1.repeat_columns(3, 4)
320
+
321
+ # Test the EXTERNSHEET record.
322
+ @workbook.calculate_extern_sizes
323
+ @workbook.store_externsheet
324
+
325
+ target = [%w(
326
+ 17 00 08 00 01 00 00 00 00 00 00 00
327
+ ).join('')].pack('H*')
328
+
329
+ caption = " \tExternsheet"
330
+ result = _unpack_externsheet(@workbook.data)
331
+ target = _unpack_externsheet(target)
332
+ assert_equal(target, result)
333
+
334
+ # Test the NAME record.
335
+ @workbook.clear_data_for_test
336
+ @workbook.store_names
337
+
338
+ target = [%w(
339
+ 18 00 2A 00 20 00 00 01 1A 00 00 00 01 00 00 00
340
+ 00 00 00 07 29 17 00 3B 00 00 00 00 FF FF 03 00
341
+ 04 00 3B 00 00 01 00 02 00 00 00 FF 00 10
342
+ ).join('')].pack('H*')
343
+
344
+ caption = " \t+ Name repeats ( Sheet1!2:3, Sheet1!D:E )";
345
+ result = _unpack_name(@workbook.data)
346
+ target = _unpack_name(target)
347
+ assert_equal(target, result)
348
+ end
349
+
350
+ ###############################################################################
351
+ #
352
+ # _unpack_externsheet()
353
+ #
354
+ # Unpack the EXTERNSHEET recordfor easier comparison.
355
+ #
356
+ def _unpack_externsheet(data)
357
+ externsheet = Hash.new
358
+
359
+ externsheet['record'] = data[0, 2].unpack('v')[0]
360
+ data[0, 2] = ''
361
+ externsheet['length'] = data[0, 2].unpack('v')[0]
362
+ data[0, 2] = ''
363
+ externsheet['count'] = data[0, 2].unpack('v')[0]
364
+ data[0, 2] = ''
365
+ externsheet['array'] = [];
366
+
367
+ externsheet['count'].times do
368
+ externsheet['array'] << data[0, 6].unpack('vvv')
369
+ data[0, 6] = ''
370
+ end
371
+ externsheet
372
+ end
373
+
374
+ ###############################################################################
375
+ #
376
+ # _unpack_name()
377
+ #
378
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
379
+ #
380
+ def _unpack_name(data)
381
+ names = Array.new
382
+ while data.length > 0
383
+ name = Hash.new
384
+
385
+ name['record'] = data[0, 2].unpack('v')[0]
386
+ data[0, 2] = ''
387
+ name['length'] = data[0, 2].unpack('v')[0]
388
+ data[0, 2] = ''
389
+ name['flags'] = data[0, 2].unpack('v')[0]
390
+ data[0, 2] = ''
391
+ name['shortcut'] = data[0, 1].unpack('C')[0]
392
+ data[0, 1] = ''
393
+ name['str_len'] = data[0, 1].unpack('C')[0]
394
+ data[0, 1] = ''
395
+ name['formula_len'] = data[0, 2].unpack('v')[0]
396
+ data[0, 2] = ''
397
+ name['itals'] = data[0, 2].unpack('v')[0]
398
+ data[0, 2] = ''
399
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
400
+ data[0, 2] = ''
401
+ name['menu_len'] = data[0, 1].unpack('C')[0]
402
+ data[0, 1] = ''
403
+ name['desc_len'] = data[0, 1].unpack('C')[0]
404
+ data[0, 1] = ''
405
+ name['help_len'] = data[0, 1].unpack('C')[0]
406
+ data[0, 1] = ''
407
+ name['status_len'] = data[0, 1].unpack('C')[0]
408
+ data[0, 1] = ''
409
+ name['encoding'] = data[0, 1].unpack('C')[0]
410
+ data[0, 1] = ''
411
+
412
+ # Decode the individual flag fields.
413
+ flag = Hash.new
414
+ flag['hidden'] = name['flags'] & 0x0001
415
+ flag['function'] = name['flags'] & 0x0002
416
+ flag['vb'] = name['flags'] & 0x0004
417
+ flag['macro'] = name['flags'] & 0x0008
418
+ flag['complex'] = name['flags'] & 0x0010
419
+ flag['builtin'] = name['flags'] & 0x0020
420
+ flag['group'] = name['flags'] & 0x0FC0
421
+ flag['binary'] = name['flags'] & 0x1000
422
+ name['flags'] = flag
423
+
424
+ # Decode the string part of the NAME structure.
425
+ if name['encoding'] == 1
426
+ # UTF-16 name. Leave in hex.
427
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
428
+ data[0, 2 * name['str_len']] = ''
429
+ elsif flag['builtin'] != 0
430
+ # 1 digit builtin name. Leave in hex.
431
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
432
+ data[0, name['str_len']] = ''
433
+ else
434
+ # ASCII name.
435
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
436
+ data[0, name['str_len']] = ''
437
+ end
438
+
439
+ # Keep the formula as a hex string.
440
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
441
+ data[0, name['formula_len']] = ''
442
+
443
+ names << name
444
+ end
445
+ names
446
+ end
447
+
448
+ def assert_hash_equal?(result, target)
449
+ assert_equal(result.keys.sort, target.keys.sort)
450
+ result.each_key do |key|
451
+ assert_equal(result[key], target[key])
452
+ end
453
+ end
454
+ end