write_xlsx 0.72.2 → 0.72.3.beta1

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/{README.rdoc → Changes} +3 -94
  3. data/README.md +96 -0
  4. data/lib/write_xlsx/chart.rb +115 -259
  5. data/lib/write_xlsx/chart/axis.rb +4 -4
  6. data/lib/write_xlsx/chart/bar.rb +1 -1
  7. data/lib/write_xlsx/chart/column.rb +1 -1
  8. data/lib/write_xlsx/chart/pie.rb +3 -3
  9. data/lib/write_xlsx/chart/radar.rb +1 -1
  10. data/lib/write_xlsx/chart/scatter.rb +1 -1
  11. data/lib/write_xlsx/chart/series.rb +0 -37
  12. data/lib/write_xlsx/chartsheet.rb +25 -37
  13. data/lib/write_xlsx/col_name.rb +40 -0
  14. data/lib/write_xlsx/drawing.rb +95 -85
  15. data/lib/write_xlsx/format.rb +32 -32
  16. data/lib/write_xlsx/package/app.rb +18 -23
  17. data/lib/write_xlsx/package/button.rb +15 -12
  18. data/lib/write_xlsx/package/comments.rb +33 -30
  19. data/lib/write_xlsx/package/conditional_format.rb +18 -14
  20. data/lib/write_xlsx/package/content_types.rb +22 -17
  21. data/lib/write_xlsx/package/core.rb +19 -24
  22. data/lib/write_xlsx/package/relationships.rb +10 -13
  23. data/lib/write_xlsx/package/shared_strings.rb +8 -16
  24. data/lib/write_xlsx/package/styles.rb +59 -64
  25. data/lib/write_xlsx/package/table.rb +27 -37
  26. data/lib/write_xlsx/package/vml.rb +23 -21
  27. data/lib/write_xlsx/package/xml_writer_simple.rb +3 -6
  28. data/lib/write_xlsx/sheets.rb +4 -4
  29. data/lib/write_xlsx/sparkline.rb +22 -22
  30. data/lib/write_xlsx/utility.rb +61 -33
  31. data/lib/write_xlsx/version.rb +1 -1
  32. data/lib/write_xlsx/workbook.rb +46 -50
  33. data/lib/write_xlsx/worksheet.rb +149 -133
  34. data/lib/write_xlsx/worksheet/cell_data.rb +8 -6
  35. data/lib/write_xlsx/worksheet/data_validation.rb +14 -14
  36. data/lib/write_xlsx/worksheet/hyperlink.rb +97 -65
  37. data/lib/write_xlsx/worksheet/page_setup.rb +23 -22
  38. data/test/chart/test_write_a_latin.rb +3 -3
  39. data/test/regression/test_chart_font01.rb +1 -1
  40. data/test/regression/test_chart_font02.rb +1 -1
  41. data/test/regression/test_chart_font03.rb +1 -1
  42. data/test/regression/test_chart_font04.rb +1 -1
  43. data/test/regression/test_chart_font05.rb +1 -1
  44. data/test/regression/test_chart_font06.rb +1 -1
  45. data/test/test_xml_writer_simple.rb +3 -3
  46. data/test/worksheet/test_write_hyperlink.rb +4 -4
  47. data/test/worksheet/test_write_worksheet_attributes.rb +3 -3
  48. data/write_xlsx.gemspec +2 -1
  49. metadata +9 -8
  50. data/test/package/table/test_write_xml_declaration.rb +0 -20
@@ -1,5 +1,5 @@
1
1
  require 'write_xlsx/workbook'
2
2
 
3
3
  class WriteXLSX < Writexlsx::Workbook
4
- VERSION = "0.72.2"
4
+ VERSION = "0.72.3.beta1"
5
5
  end
@@ -242,36 +242,33 @@ def assemble_xml_file #:nodoc:
242
242
  # Prepare format object for passing to Style.rb.
243
243
  prepare_format_properties
244
244
 
245
- write_xml_declaration
245
+ write_xml_declaration do
246
246
 
247
- # Write the root workbook element.
248
- write_workbook do
247
+ # Write the root workbook element.
248
+ write_workbook do
249
249
 
250
- # Write the XLSX file version.
251
- write_file_version
250
+ # Write the XLSX file version.
251
+ write_file_version
252
252
 
253
- # Write the workbook properties.
254
- write_workbook_pr
253
+ # Write the workbook properties.
254
+ write_workbook_pr
255
255
 
256
- # Write the workbook view properties.
257
- write_book_views
256
+ # Write the workbook view properties.
257
+ write_book_views
258
258
 
259
- # Write the worksheet names and ids.
260
- @worksheets.write_sheets(@writer)
259
+ # Write the worksheet names and ids.
260
+ @worksheets.write_sheets(@writer)
261
261
 
262
- # Write the workbook defined names.
263
- write_defined_names
262
+ # Write the workbook defined names.
263
+ write_defined_names
264
264
 
265
- # Write the workbook calculation properties.
266
- write_calc_pr
265
+ # Write the workbook calculation properties.
266
+ write_calc_pr
267
267
 
268
- # Write the workbook extension storage.
269
- #write_ext_lst
268
+ # Write the workbook extension storage.
269
+ #write_ext_lst
270
+ end
270
271
  end
271
-
272
- # Close the XML writer object and filehandle.
273
- @writer.crlf
274
- @writer.close
275
272
  end
276
273
 
277
274
  #
@@ -1073,17 +1070,13 @@ def get_chart_range(range) #:nodoc:
1073
1070
  return [sheetname, row_start, col_start, row_end, col_end]
1074
1071
  end
1075
1072
 
1076
- def write_xml_declaration #:nodoc:
1077
- @writer.xml_decl
1078
- end
1079
-
1080
1073
  def write_workbook #:nodoc:
1081
1074
  schema = 'http://schemas.openxmlformats.org'
1082
1075
  attributes = [
1083
- 'xmlns',
1084
- schema + '/spreadsheetml/2006/main',
1085
- 'xmlns:r',
1086
- schema + '/officeDocument/2006/relationships'
1076
+ ['xmlns',
1077
+ schema + '/spreadsheetml/2006/main'],
1078
+ ['xmlns:r',
1079
+ schema + '/officeDocument/2006/relationships']
1087
1080
  ]
1088
1081
  @writer.tag_elements('workbook', attributes) do
1089
1082
  yield
@@ -1092,14 +1085,14 @@ def write_workbook #:nodoc:
1092
1085
 
1093
1086
  def write_file_version #:nodoc:
1094
1087
  attributes = [
1095
- 'appName', 'xl',
1096
- 'lastEdited', 4,
1097
- 'lowestEdited', 4,
1098
- 'rupBuild', 4505
1088
+ ['appName', 'xl'],
1089
+ ['lastEdited', 4],
1090
+ ['lowestEdited', 4],
1091
+ ['rupBuild', 4505]
1099
1092
  ]
1100
1093
 
1101
1094
  if @vba_project
1102
- attributes << :codeName << '{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}'
1095
+ attributes << [:codeName, '{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}']
1103
1096
  end
1104
1097
 
1105
1098
  @writer.empty_tag('fileVersion', attributes)
@@ -1107,9 +1100,9 @@ def write_file_version #:nodoc:
1107
1100
 
1108
1101
  def write_workbook_pr #:nodoc:
1109
1102
  attributes = []
1110
- attributes << 'codeName' << @vba_codename if ptrue?(@vba_codename)
1111
- attributes << 'date1904' << 1 if date_1904?
1112
- attributes << 'defaultThemeVersion' << 124226
1103
+ attributes << ['codeName', @vba_codename] if ptrue?(@vba_codename)
1104
+ attributes << ['date1904', 1] if date_1904?
1105
+ attributes << ['defaultThemeVersion', 124226]
1113
1106
  @writer.empty_tag('workbookPr', attributes)
1114
1107
  end
1115
1108
 
@@ -1119,25 +1112,28 @@ def write_book_views #:nodoc:
1119
1112
 
1120
1113
  def write_workbook_view #:nodoc:
1121
1114
  attributes = [
1122
- 'xWindow', @x_window,
1123
- 'yWindow', @y_window,
1124
- 'windowWidth', @window_width,
1125
- 'windowHeight', @window_height
1115
+ ['xWindow', @x_window],
1116
+ ['yWindow', @y_window],
1117
+ ['windowWidth', @window_width],
1118
+ ['windowHeight', @window_height]
1126
1119
  ]
1127
1120
  if @tab_ratio != 500
1128
- attributes << 'tabRatio' << @tab_ratio
1121
+ attributes << ['tabRatio', @tab_ratio]
1129
1122
  end
1130
1123
  if @firstsheet > 0
1131
- attributes << 'firstSheet' << @firstsheet + 1
1124
+ attributes << ['firstSheet', @firstsheet + 1]
1132
1125
  end
1133
1126
  if @activesheet > 0
1134
- attributes << 'activeTab' << @activesheet
1127
+ attributes << ['activeTab', @activesheet]
1135
1128
  end
1136
1129
  @writer.empty_tag('workbookView', attributes)
1137
1130
  end
1138
1131
 
1139
1132
  def write_calc_pr #:nodoc:
1140
- attributes = ['calcId', 124519, 'fullCalcOnLoad', 1]
1133
+ attributes = [
1134
+ ['calcId', 124519],
1135
+ ['fullCalcOnLoad', 1]
1136
+ ]
1141
1137
  @writer.empty_tag('calcPr', attributes)
1142
1138
  end
1143
1139
 
@@ -1147,8 +1143,8 @@ def write_ext_lst #:nodoc:
1147
1143
 
1148
1144
  def write_ext #:nodoc:
1149
1145
  attributes = [
1150
- 'xmlns:mx', "#{OFFICE_URL}mac/excel/2008/main",
1151
- 'uri', uri
1146
+ ['xmlns:mx', "#{OFFICE_URL}mac/excel/2008/main"],
1147
+ ['uri', uri]
1152
1148
  ]
1153
1149
  @writer.tag_elements('ext', attributes) { write_mx_arch_id }
1154
1150
  end
@@ -1167,9 +1163,9 @@ def write_defined_names #:nodoc:
1167
1163
  def write_defined_name(defined_name) #:nodoc:
1168
1164
  name, id, range, hidden = defined_name
1169
1165
 
1170
- attributes = ['name', name]
1171
- attributes << 'localSheetId' << "#{id}" unless id == -1
1172
- attributes << 'hidden' << '1' if hidden
1166
+ attributes = [ ['name', name] ]
1167
+ attributes << ['localSheetId', "#{id}"] unless id == -1
1168
+ attributes << ['hidden', '1'] if hidden
1173
1169
 
1174
1170
  @writer.data_element('definedName', range, attributes)
1175
1171
  end
@@ -372,33 +372,32 @@ def set_xml_writer(filename) #:nodoc:
372
372
  end
373
373
 
374
374
  def assemble_xml_file #:nodoc:
375
- @writer.xml_decl
376
- @writer.tag_elements('worksheet', write_worksheet_attributes) do
377
- write_sheet_pr
378
- write_dimension
379
- write_sheet_views
380
- write_sheet_format_pr
381
- write_cols
382
- write_sheet_data
383
- write_sheet_protection
384
- write_auto_filter
385
- write_merge_cells
386
- write_conditional_formats
387
- write_data_validations
388
- write_hyperlinks
389
- write_print_options
390
- write_page_margins
391
- write_page_setup
392
- write_header_footer
393
- write_row_breaks
394
- write_col_breaks
395
- write_drawings
396
- write_legacy_drawing
397
- write_table_parts
398
- write_ext_sparklines
375
+ write_xml_declaration do
376
+ @writer.tag_elements('worksheet', write_worksheet_attributes) do
377
+ write_sheet_pr
378
+ write_dimension
379
+ write_sheet_views
380
+ write_sheet_format_pr
381
+ write_cols
382
+ write_sheet_data
383
+ write_sheet_protection
384
+ write_auto_filter
385
+ write_merge_cells
386
+ write_conditional_formats
387
+ write_data_validations
388
+ write_hyperlinks
389
+ write_print_options
390
+ write_page_margins
391
+ write_page_setup
392
+ write_header_footer
393
+ write_row_breaks
394
+ write_col_breaks
395
+ write_drawings
396
+ write_legacy_drawing
397
+ write_table_parts
398
+ write_ext_sparklines
399
+ end
399
400
  end
400
- @writer.crlf
401
- @writer.close
402
401
  end
403
402
 
404
403
  #
@@ -2559,7 +2558,7 @@ def write_url(*args)
2559
2558
  check_dimensions(row, col)
2560
2559
  store_row_col_max_min_values(row, col)
2561
2560
 
2562
- hyperlink = Hyperlink.new(url, str)
2561
+ hyperlink = Hyperlink.factory(url, str)
2563
2562
  hyperlink.tip = tip
2564
2563
 
2565
2564
  @hlink_count += 1
@@ -5681,7 +5680,12 @@ def write_cell_formula(formula = '') #:nodoc:
5681
5680
  # Write the cell array formula <f> element.
5682
5681
  #
5683
5682
  def write_cell_array_formula(formula, range) #:nodoc:
5684
- @writer.data_element('f', formula, ['t', 'array', 'ref', range])
5683
+ @writer.data_element('f', formula,
5684
+ [
5685
+ ['t', 'array'],
5686
+ ['ref', range]
5687
+ ]
5688
+ )
5685
5689
  end
5686
5690
 
5687
5691
  def date_1904? #:nodoc:
@@ -5817,7 +5821,7 @@ def xml_str_of_rich_string(fragments)
5817
5821
  # Write the string fragment part, with whitespace handling.
5818
5822
  attributes = []
5819
5823
 
5820
- attributes << 'xml:space' << 'preserve' if token =~ /^\s/ || token =~ /\s$/
5824
+ attributes << ['xml:space', 'preserve'] if token =~ /^\s/ || token =~ /\s$/
5821
5825
  writer.data_element('t', token, attributes)
5822
5826
  writer.end_tag('r')
5823
5827
  end
@@ -6337,13 +6341,13 @@ def encode_password(password) #:nodoc:
6337
6341
  def write_worksheet_attributes #:nodoc:
6338
6342
  schema = 'http://schemas.openxmlformats.org/'
6339
6343
  attributes = [
6340
- 'xmlns', "#{schema}spreadsheetml/2006/main",
6341
- 'xmlns:r', "#{schema}officeDocument/2006/relationships"
6344
+ ['xmlns', "#{schema}spreadsheetml/2006/main"],
6345
+ ['xmlns:r', "#{schema}officeDocument/2006/relationships"]
6342
6346
  ]
6343
6347
  if @excel_version == 2010
6344
- attributes << 'xmlns:mc' << "#{schema}markup-compatibility/2006"
6345
- attributes << 'xmlns:x14ac' << "#{OFFICE_URL}spreadsheetml/2009/9/ac"
6346
- attributes << 'mc:Ignorable' << 'x14ac'
6348
+ attributes << ['xmlns:mc', "#{schema}markup-compatibility/2006"]
6349
+ attributes << ['xmlns:x14ac', "#{OFFICE_URL}spreadsheetml/2009/9/ac"]
6350
+ attributes << ['mc:Ignorable', 'x14ac']
6347
6351
  end
6348
6352
  attributes
6349
6353
  end
@@ -6355,8 +6359,8 @@ def write_sheet_pr #:nodoc:
6355
6359
  return unless tab_outline_fit? || vba_codename? || filter_on?
6356
6360
 
6357
6361
  attributes = []
6358
- attributes << 'codeName' << @vba_codename if vba_codename?
6359
- attributes << 'filterMode' << 1 if filter_on?
6362
+ attributes << ['codeName', @vba_codename] if vba_codename?
6363
+ attributes << ['filterMode', 1] if filter_on?
6360
6364
 
6361
6365
  if tab_outline_fit?
6362
6366
  @writer.tag_elements('sheetPr', attributes) do
@@ -6377,7 +6381,7 @@ def tab_outline_fit?
6377
6381
  # Write the <pageSetUpPr> element.
6378
6382
  #
6379
6383
  def write_page_set_up_pr #:nodoc:
6380
- @writer.empty_tag('pageSetUpPr', ['fitToPage', 1]) if fit_page?
6384
+ @writer.empty_tag('pageSetUpPr', [ ['fitToPage', 1] ]) if fit_page?
6381
6385
  end
6382
6386
 
6383
6387
  # Write the <dimension> element. This specifies the range of cells in the
@@ -6409,7 +6413,7 @@ def write_dimension #:nodoc:
6409
6413
  cell_2 = xl_rowcol_to_cell(@dim_rowmax, @dim_colmax)
6410
6414
  ref = cell_1 + ':' + cell_2
6411
6415
  end
6412
- @writer.empty_tag('dimension', ['ref', ref])
6416
+ @writer.empty_tag('dimension', [ ['ref', ref] ])
6413
6417
  end
6414
6418
  #
6415
6419
  # Write the <sheetViews> element.
@@ -6421,31 +6425,31 @@ def write_sheet_views #:nodoc:
6421
6425
  def write_sheet_view #:nodoc:
6422
6426
  attributes = []
6423
6427
  # Hide screen gridlines if required
6424
- attributes << 'showGridLines' << 0 unless @screen_gridlines
6428
+ attributes << ['showGridLines', 0] unless @screen_gridlines
6425
6429
 
6426
6430
  # Hide zeroes in cells.
6427
- attributes << 'showZeros' << 0 unless show_zeros?
6431
+ attributes << ['showZeros', 0] unless show_zeros?
6428
6432
 
6429
6433
  # Display worksheet right to left for Hebrew, Arabic and others.
6430
- attributes << 'rightToLeft' << 1 if @right_to_left
6434
+ attributes << ['rightToLeft', 1] if @right_to_left
6431
6435
 
6432
6436
  # Show that the sheet tab is selected.
6433
- attributes << 'tabSelected' << 1 if @selected
6437
+ attributes << ['tabSelected', 1] if @selected
6434
6438
 
6435
6439
  # Turn outlines off. Also required in the outlinePr element.
6436
- attributes << "showOutlineSymbols" << 0 if @outline_on
6440
+ attributes << ["showOutlineSymbols", 0] if @outline_on
6437
6441
 
6438
6442
  # Set the page view/layout mode if required.
6439
6443
  # TODO. Add pageBreakPreview mode when requested.
6440
- (attributes << 'view' << 'pageLayout') if page_view?
6444
+ attributes << ['view', 'pageLayout'] if page_view?
6441
6445
 
6442
6446
  # Set the zoom level.
6443
6447
  if @zoom != 100
6444
- (attributes << 'zoomScale' << @zoom) unless page_view?
6445
- (attributes << 'zoomScaleNormal' << @zoom) if zoom_scale_normal?
6448
+ attributes << ['zoomScale', @zoom] unless page_view?
6449
+ attributes << ['zoomScaleNormal', @zoom] if zoom_scale_normal?
6446
6450
  end
6447
6451
 
6448
- attributes << 'workbookViewId' << 0
6452
+ attributes << ['workbookViewId', 0]
6449
6453
 
6450
6454
  if @panes.empty? && @selections.empty?
6451
6455
  @writer.empty_tag('sheetView', attributes)
@@ -6469,9 +6473,9 @@ def write_selections #:nodoc:
6469
6473
  #
6470
6474
  def write_selection(pane, active_cell, sqref) #:nodoc:
6471
6475
  attributes = []
6472
- (attributes << 'pane' << pane) if pane
6473
- (attributes << 'activeCell' << active_cell) if active_cell
6474
- (attributes << 'sqref' << sqref) if sqref
6476
+ attributes << ['pane', pane] if pane
6477
+ attributes << ['activeCell', active_cell] if active_cell
6478
+ attributes << ['sqref', sqref] if sqref
6475
6479
 
6476
6480
  @writer.empty_tag('selection', attributes)
6477
6481
  end
@@ -6482,19 +6486,21 @@ def write_selection(pane, active_cell, sqref) #:nodoc:
6482
6486
  def write_sheet_format_pr #:nodoc:
6483
6487
  base_col_width = 10
6484
6488
 
6485
- attributes = ['defaultRowHeight', @default_row_height]
6489
+ attributes = [
6490
+ ['defaultRowHeight', @default_row_height]
6491
+ ]
6486
6492
  if @default_row_height != 15
6487
- attributes << 'customHeight' << 1
6493
+ attributes << ['customHeight', 1]
6488
6494
  end
6489
6495
 
6490
6496
  if ptrue?(@default_row_zeroed)
6491
- attributes << 'zeroHeight' << 1
6497
+ attributes << ['zeroHeight', 1]
6492
6498
  end
6493
6499
 
6494
- attributes << 'outlineLevelRow' << @outline_row_level if @outline_row_level > 0
6495
- attributes << 'outlineLevelCol' << @outline_col_level if @outline_col_level > 0
6500
+ attributes << ['outlineLevelRow', @outline_row_level] if @outline_row_level > 0
6501
+ attributes << ['outlineLevelCol', @outline_col_level] if @outline_col_level > 0
6496
6502
  if @excel_version == 2010
6497
- attributes << 'x14ac:dyDescent' << '0.25'
6503
+ attributes << ['x14ac:dyDescent', '0.25']
6498
6504
  end
6499
6505
  @writer.empty_tag('sheetFormatPr', attributes)
6500
6506
  end
@@ -6547,16 +6553,16 @@ def col_info_attributes(args)
6547
6553
  width = width.to_i if width - width.to_i == 0
6548
6554
 
6549
6555
  attributes = [
6550
- 'min', min + 1,
6551
- 'max', max + 1,
6552
- 'width', width
6556
+ ['min', min + 1],
6557
+ ['max', max + 1],
6558
+ ['width', width]
6553
6559
  ]
6554
6560
 
6555
- attributes << 'style' << xf_index if xf_index != 0
6556
- attributes << 'hidden' << 1 if hidden != 0
6557
- attributes << 'customWidth' << 1 if custom_width
6558
- attributes << 'outlineLevel' << level if level != 0
6559
- attributes << 'collapsed' << 1 if collapsed != 0
6561
+ attributes << ['style', xf_index] if xf_index != 0
6562
+ attributes << ['hidden', 1] if hidden != 0
6563
+ attributes << ['customWidth', 1] if custom_width
6564
+ attributes << ['outlineLevel', level] if level != 0
6565
+ attributes << ['collapsed', 1] if collapsed != 0
6560
6566
  attributes
6561
6567
  end
6562
6568
 
@@ -6633,19 +6639,19 @@ def row_attributes(args)
6633
6639
  level ||= 0
6634
6640
  xf_index = format ? format.get_xf_index : 0
6635
6641
 
6636
- attributes = ['r', r + 1]
6642
+ attributes = [['r', r + 1]]
6637
6643
 
6638
- (attributes << 'spans' << spans) if spans
6639
- (attributes << 's' << xf_index) if ptrue?(xf_index)
6640
- (attributes << 'customFormat' << 1 ) if ptrue?(format)
6641
- (attributes << 'ht' << height) if height != 15
6642
- (attributes << 'hidden' << 1 ) if ptrue?(hidden)
6643
- (attributes << 'customHeight' << 1 ) if height != 15
6644
- (attributes << 'outlineLevel' << level) if ptrue?(level)
6645
- (attributes << 'collapsed' << 1 ) if ptrue?(collapsed)
6644
+ attributes << ['spans', spans] if spans
6645
+ attributes << ['s', xf_index] if ptrue?(xf_index)
6646
+ attributes << ['customFormat', 1] if ptrue?(format)
6647
+ attributes << ['ht', height] if height != 15
6648
+ attributes << ['hidden', 1] if ptrue?(hidden)
6649
+ attributes << ['customHeight', 1] if height != 15
6650
+ attributes << ['outlineLevel', level] if ptrue?(level)
6651
+ attributes << ['collapsed', 1] if ptrue?(collapsed)
6646
6652
 
6647
6653
  if @excel_version == 2010
6648
- attributes << 'x14ac:dyDescent' << '0.25'
6654
+ attributes << ['x14ac:dyDescent', '0.25']
6649
6655
  end
6650
6656
  attributes
6651
6657
  end
@@ -6691,11 +6697,11 @@ def write_freeze_panes(row, col, top_row, left_col, type) #:nodoc:
6691
6697
  end
6692
6698
 
6693
6699
  attributes = []
6694
- (attributes << 'xSplit' << x_split) if x_split > 0
6695
- (attributes << 'ySplit' << y_split) if y_split > 0
6696
- attributes << 'topLeftCell' << top_left_cell
6697
- attributes << 'activePane' << active_pane
6698
- attributes << 'state' << state
6700
+ attributes << ['xSplit', x_split] if x_split > 0
6701
+ attributes << ['ySplit', y_split] if y_split > 0
6702
+ attributes << ['topLeftCell', top_left_cell]
6703
+ attributes << ['activePane', active_pane]
6704
+ attributes << ['state', state]
6699
6705
 
6700
6706
  @writer.empty_tag('pane', attributes)
6701
6707
  end
@@ -6739,10 +6745,10 @@ def write_split_panes(row, col, top_row, left_col, type) #:nodoc:
6739
6745
  active_pane = set_active_pane_and_cell_selections(row, col, top_row, left_col, active_cell, sqref)
6740
6746
 
6741
6747
  attributes = []
6742
- (attributes << 'xSplit' << x_split) if x_split > 0
6743
- (attributes << 'ySplit' << y_split) if y_split > 0
6744
- attributes << 'topLeftCell' << top_left_cell
6745
- (attributes << 'activePane' << active_pane) if has_selection
6748
+ attributes << ['xSplit', x_split] if x_split > 0
6749
+ attributes << ['ySplit', y_split] if y_split > 0
6750
+ attributes << ['topLeftCell', top_left_cell]
6751
+ attributes << ['activePane', active_pane] if has_selection
6746
6752
 
6747
6753
  @writer.empty_tag('pane', attributes)
6748
6754
  end
@@ -6772,7 +6778,7 @@ def calculate_x_split_width(width) #:nodoc:
6772
6778
  # Write the <sheetCalcPr> element for the worksheet calculation properties.
6773
6779
  #
6774
6780
  def write_sheet_calc_pr #:nodoc:
6775
- @writer.empty_tag('sheetCalcPr', ['fullCalcOnLoad', 1])
6781
+ @writer.empty_tag('sheetCalcPr', [ ['fullCalcOnLoad', 1] ])
6776
6782
  end
6777
6783
 
6778
6784
  #
@@ -6780,8 +6786,8 @@ def write_sheet_calc_pr #:nodoc:
6780
6786
  #
6781
6787
  def write_phonetic_pr #:nodoc:
6782
6788
  attributes = [
6783
- 'fontId', 1,
6784
- 'type', 'noConversion'
6789
+ ['fontId', 1],
6790
+ ['type', 'noConversion']
6785
6791
  ]
6786
6792
 
6787
6793
  @writer.empty_tag('phoneticPr', attributes)
@@ -6813,7 +6819,7 @@ def write_merge_cells #:nodoc:
6813
6819
  def write_some_elements(tag, container)
6814
6820
  return if container.empty?
6815
6821
 
6816
- @writer.tag_elements(tag, ['count', container.size]) do
6822
+ @writer.tag_elements(tag, [ ['count', container.size] ]) do
6817
6823
  yield
6818
6824
  end
6819
6825
  end
@@ -6828,7 +6834,7 @@ def write_merge_cell(merged_range) #:nodoc:
6828
6834
  cell_1 = xl_rowcol_to_cell(row_min, col_min)
6829
6835
  cell_2 = xl_rowcol_to_cell(row_max, col_max)
6830
6836
 
6831
- @writer.empty_tag('mergeCell', ['ref', "#{cell_1}:#{cell_2}"])
6837
+ @writer.empty_tag('mergeCell', [ ['ref', "#{cell_1}:#{cell_2}"] ])
6832
6838
  end
6833
6839
 
6834
6840
  #
@@ -6874,7 +6880,10 @@ def write_breaks(tag) # :nodoc:
6874
6880
 
6875
6881
  return if page_breaks.empty?
6876
6882
 
6877
- attributes = ['count', count, 'manualBreakCount', count]
6883
+ attributes = [
6884
+ ['count', count],
6885
+ ['manualBreakCount', count]
6886
+ ]
6878
6887
 
6879
6888
  @writer.tag_elements(tag, attributes) do
6880
6889
  page_breaks.each { |num| write_brk(num, max) }
@@ -6885,9 +6894,9 @@ def write_breaks(tag) # :nodoc:
6885
6894
  #
6886
6895
  def write_brk(id, max) #:nodoc:
6887
6896
  attributes = [
6888
- 'id', id,
6889
- 'max', max,
6890
- 'man', 1
6897
+ ['id', id],
6898
+ ['max', max],
6899
+ ['man', 1]
6891
6900
  ]
6892
6901
 
6893
6902
  @writer.empty_tag('brk', attributes)
@@ -6899,7 +6908,9 @@ def write_brk(id, max) #:nodoc:
6899
6908
  def write_auto_filter #:nodoc:
6900
6909
  return unless autofilter_ref?
6901
6910
 
6902
- attributes = ['ref', @autofilter_ref]
6911
+ attributes = [
6912
+ ['ref', @autofilter_ref]
6913
+ ]
6903
6914
 
6904
6915
  if filter_on?
6905
6916
  # Autofilter defined active filters.
@@ -6936,7 +6947,7 @@ def write_autofilters #:nodoc:
6936
6947
  # Write the <filterColumn> element.
6937
6948
  #
6938
6949
  def write_filter_column(col_id, type, *filters) #:nodoc:
6939
- @writer.tag_elements('filterColumn', ['colId', col_id]) do
6950
+ @writer.tag_elements('filterColumn', [ ['colId', col_id] ]) do
6940
6951
  if type == 1
6941
6952
  # Type == 1 is the new XLSX style filter.
6942
6953
  write_filters(*filters)
@@ -6953,7 +6964,7 @@ def write_filter_column(col_id, type, *filters) #:nodoc:
6953
6964
  def write_filters(*filters) #:nodoc:
6954
6965
  if filters.size == 1 && filters[0] == 'blanks'
6955
6966
  # Special case for blank cells only.
6956
- @writer.empty_tag('filters', ['blank', 1])
6967
+ @writer.empty_tag('filters', [ ['blank', 1] ])
6957
6968
  else
6958
6969
  # General case.
6959
6970
  @writer.tag_elements('filters') do
@@ -6966,7 +6977,7 @@ def write_filters(*filters) #:nodoc:
6966
6977
  # Write the <filter> element.
6967
6978
  #
6968
6979
  def write_filter(val) #:nodoc:
6969
- @writer.empty_tag('filter', ['val', val])
6980
+ @writer.empty_tag('filter', [ ['val', val] ])
6970
6981
  end
6971
6982
 
6972
6983
  #
@@ -6981,9 +6992,9 @@ def write_custom_filters(*tokens) #:nodoc:
6981
6992
 
6982
6993
  # Check if the "join" operand is "and" or "or".
6983
6994
  if tokens[2] == 0
6984
- attributes = ['and', 1]
6995
+ attributes = [ ['and', 1] ]
6985
6996
  else
6986
- attributes = ['and', 0]
6997
+ attributes = [ ['and', 0] ]
6987
6998
  end
6988
6999
 
6989
7000
  # Write the two custom filters.
@@ -7017,8 +7028,8 @@ def write_custom_filter(operator, val) #:nodoc:
7017
7028
 
7018
7029
  # The 'equal' operator is the default attribute and isn't stored.
7019
7030
  attributes = []
7020
- attributes << 'operator' << operator unless operator == 'equal'
7021
- attributes << 'val' << val
7031
+ attributes << ['operator', operator] unless operator == 'equal'
7032
+ attributes << ['val', val]
7022
7033
 
7023
7034
  @writer.empty_tag('customFilter', attributes)
7024
7035
  end
@@ -7096,7 +7107,10 @@ def write_hyperlink_internal(link, row, col) #:nodoc:
7096
7107
  def write_tab_color #:nodoc:
7097
7108
  return unless tab_color?
7098
7109
 
7099
- @writer.empty_tag('tabColor', ['rgb', get_palette_color(@tab_color)])
7110
+ @writer.empty_tag('tabColor',
7111
+ [
7112
+ ['rgb', get_palette_color(@tab_color)]
7113
+ ])
7100
7114
  end
7101
7115
 
7102
7116
  #
@@ -7106,10 +7120,10 @@ def write_outline_pr
7106
7120
  return unless outline_changed?
7107
7121
 
7108
7122
  attributes = []
7109
- attributes << "applyStyles" << 1 if @outline_style != 0
7110
- attributes << "summaryBelow" << 0 if @outline_below == 0
7111
- attributes << "summaryRight" << 0 if @outline_right == 0
7112
- attributes << "showOutlineSymbols" << 0 if @outline_on == 0
7123
+ attributes << ["applyStyles", 1] if @outline_style != 0
7124
+ attributes << ["summaryBelow", 0] if @outline_below == 0
7125
+ attributes << ["summaryRight", 0] if @outline_right == 0
7126
+ attributes << ["showOutlineSymbols", 0] if @outline_on == 0
7113
7127
 
7114
7128
  @writer.empty_tag('outlinePr', attributes)
7115
7129
  end
@@ -7121,27 +7135,27 @@ def write_sheet_protection #:nodoc:
7121
7135
  return unless protect?
7122
7136
 
7123
7137
  attributes = []
7124
- attributes << "password" << @protect[:password] if ptrue?(@protect[:password])
7125
- attributes << "sheet" << 1 if ptrue?(@protect[:sheet])
7126
- attributes << "content" << 1 if ptrue?(@protect[:content])
7127
- attributes << "objects" << 1 unless ptrue?(@protect[:objects])
7128
- attributes << "scenarios" << 1 unless ptrue?(@protect[:scenarios])
7129
- attributes << "formatCells" << 0 if ptrue?(@protect[:format_cells])
7130
- attributes << "formatColumns" << 0 if ptrue?(@protect[:format_columns])
7131
- attributes << "formatRows" << 0 if ptrue?(@protect[:format_rows])
7132
- attributes << "insertColumns" << 0 if ptrue?(@protect[:insert_columns])
7133
- attributes << "insertRows" << 0 if ptrue?(@protect[:insert_rows])
7134
- attributes << "insertHyperlinks" << 0 if ptrue?(@protect[:insert_hyperlinks])
7135
- attributes << "deleteColumns" << 0 if ptrue?(@protect[:delete_columns])
7136
- attributes << "deleteRows" << 0 if ptrue?(@protect[:delete_rows])
7137
-
7138
- attributes << "selectLockedCells" << 1 unless ptrue?(@protect[:select_locked_cells])
7139
-
7140
- attributes << "sort" << 0 if ptrue?(@protect[:sort])
7141
- attributes << "autoFilter" << 0 if ptrue?(@protect[:autofilter])
7142
- attributes << "pivotTables" << 0 if ptrue?(@protect[:pivot_tables])
7143
-
7144
- attributes << "selectUnlockedCells" << 1 unless ptrue?(@protect[:select_unlocked_cells])
7138
+ attributes << ["password", @protect[:password]] if ptrue?(@protect[:password])
7139
+ attributes << ["sheet", 1] if ptrue?(@protect[:sheet])
7140
+ attributes << ["content", 1] if ptrue?(@protect[:content])
7141
+ attributes << ["objects", 1] unless ptrue?(@protect[:objects])
7142
+ attributes << ["scenarios", 1] unless ptrue?(@protect[:scenarios])
7143
+ attributes << ["formatCells", 0] if ptrue?(@protect[:format_cells])
7144
+ attributes << ["formatColumns", 0] if ptrue?(@protect[:format_columns])
7145
+ attributes << ["formatRows", 0] if ptrue?(@protect[:format_rows])
7146
+ attributes << ["insertColumns", 0] if ptrue?(@protect[:insert_columns])
7147
+ attributes << ["insertRows", 0] if ptrue?(@protect[:insert_rows])
7148
+ attributes << ["insertHyperlinks", 0] if ptrue?(@protect[:insert_hyperlinks])
7149
+ attributes << ["deleteColumns", 0] if ptrue?(@protect[:delete_columns])
7150
+ attributes << ["deleteRows", 0] if ptrue?(@protect[:delete_rows])
7151
+
7152
+ attributes << ["selectLockedCells", 1] unless ptrue?(@protect[:select_locked_cells])
7153
+
7154
+ attributes << ["sort", 0] if ptrue?(@protect[:sort])
7155
+ attributes << ["autoFilter", 0] if ptrue?(@protect[:autofilter])
7156
+ attributes << ["pivotTables", 0] if ptrue?(@protect[:pivot_tables])
7157
+
7158
+ attributes << ["selectUnlockedCells", 1] unless ptrue?(@protect[:select_unlocked_cells])
7145
7159
 
7146
7160
  @writer.empty_tag('sheetProtection', attributes)
7147
7161
  end
@@ -7173,7 +7187,7 @@ def write_underline(writer, underline) #:nodoc:
7173
7187
  def write_table_parts
7174
7188
  return if @tables.empty?
7175
7189
 
7176
- @writer.tag_elements('tableParts', ['count', tables_count]) do
7190
+ @writer.tag_elements('tableParts', [ ['count', tables_count] ]) do
7177
7191
  tables_count.times { increment_rel_id_and_write_r_id('tablePart') }
7178
7192
  end
7179
7193
  end
@@ -7182,7 +7196,7 @@ def write_table_parts
7182
7196
  # Write the <tablePart> element.
7183
7197
  #
7184
7198
  def write_table_part(id)
7185
- @writer.empty_tag('tablePart', r_id_attributes(id))
7199
+ @writer.empty_tag('tablePart', [r_id_attributes(id)])
7186
7200
  end
7187
7201
 
7188
7202
  def increment_rel_id_and_write_r_id(tag)
@@ -7191,7 +7205,7 @@ def increment_rel_id_and_write_r_id(tag)
7191
7205
  end
7192
7206
 
7193
7207
  def write_r_id(tag, id)
7194
- @writer.empty_tag(tag, r_id_attributes(id))
7208
+ @writer.empty_tag(tag, [r_id_attributes(id)])
7195
7209
  end
7196
7210
 
7197
7211
  #
@@ -7209,8 +7223,8 @@ def write_ext
7209
7223
 
7210
7224
  def write_ext_attributes
7211
7225
  [
7212
- 'xmlns:x14', "#{OFFICE_URL}spreadsheetml/2009/9/main",
7213
- 'uri', '{05C60535-1F16-4fd2-B633-F4F36F0B64E0}'
7226
+ ['xmlns:x14', "#{OFFICE_URL}spreadsheetml/2009/9/main"],
7227
+ ['uri', '{05C60535-1F16-4fd2-B633-F4F36F0B64E0}']
7214
7228
  ]
7215
7229
  end
7216
7230
 
@@ -7225,7 +7239,9 @@ def write_sparkline_groups
7225
7239
  end
7226
7240
 
7227
7241
  def sparkline_groups_attributes # :nodoc:
7228
- ['xmlns:xm', "#{OFFICE_URL}excel/2006/main"]
7242
+ [
7243
+ ['xmlns:xm', "#{OFFICE_URL}excel/2006/main"]
7244
+ ]
7229
7245
  end
7230
7246
 
7231
7247
  #
@@ -7250,7 +7266,7 @@ def write_conditional_formats #:nodoc:
7250
7266
  # Write the <conditionalFormatting> element.
7251
7267
  #
7252
7268
  def write_conditional_formatting(range, cond_formats) #:nodoc:
7253
- @writer.tag_elements('conditionalFormatting', ['sqref', range]) do
7269
+ @writer.tag_elements('conditionalFormatting', [ ['sqref', range] ]) do
7254
7270
  cond_formats.each { |cond_format| cond_format.write_cf_rule }
7255
7271
  end
7256
7272
  end