write_xlsx 0.83.0 → 0.85.1

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -0
  3. data/Changes +15 -0
  4. data/README.md +2 -2
  5. data/examples/chart_clustered.rb +63 -0
  6. data/examples/chart_styles.rb +53 -0
  7. data/lib/write_xlsx/chart.rb +191 -4
  8. data/lib/write_xlsx/chart/axis.rb +47 -4
  9. data/lib/write_xlsx/chart/series.rb +13 -2
  10. data/lib/write_xlsx/gradient.rb +74 -0
  11. data/lib/write_xlsx/version.rb +1 -1
  12. data/lib/write_xlsx/workbook.rb +33 -15
  13. data/lib/write_xlsx/worksheet.rb +7 -1
  14. data/lib/write_xlsx/worksheet/cell_data.rb +11 -1
  15. data/lib/write_xlsx/worksheet/hyperlink.rb +25 -14
  16. data/lib/write_xlsx/worksheet/page_setup.rb +8 -7
  17. data/test/regression/test_chart_clustered01.rb +65 -0
  18. data/test/regression/test_chart_display_units01.rb +35 -0
  19. data/test/regression/test_chart_display_units02.rb +36 -0
  20. data/test/regression/test_chart_display_units03.rb +36 -0
  21. data/test/regression/test_chart_display_units04.rb +36 -0
  22. data/test/regression/test_chart_display_units05.rb +36 -0
  23. data/test/regression/test_chart_display_units06.rb +36 -0
  24. data/test/regression/test_chart_display_units07.rb +36 -0
  25. data/test/regression/test_chart_display_units08.rb +36 -0
  26. data/test/regression/test_chart_display_units09.rb +36 -0
  27. data/test/regression/test_chart_display_units10.rb +36 -0
  28. data/test/regression/test_chart_display_units11.rb +36 -0
  29. data/test/regression/test_chart_display_units12.rb +41 -0
  30. data/test/regression/test_chart_gradient01.rb +46 -0
  31. data/test/regression/test_chart_gradient02.rb +46 -0
  32. data/test/regression/test_chart_gradient03.rb +49 -0
  33. data/test/regression/test_chart_gradient04.rb +49 -0
  34. data/test/regression/test_chart_gradient05.rb +49 -0
  35. data/test/regression/test_chart_gradient06.rb +49 -0
  36. data/test/regression/test_chart_gradient07.rb +47 -0
  37. data/test/regression/test_chart_gradient08.rb +46 -0
  38. data/test/regression/test_chart_gradient09.rb +46 -0
  39. data/test/regression/test_chart_gradient10.rb +46 -0
  40. data/test/regression/test_chart_gradient11.rb +46 -0
  41. data/test/regression/test_chart_gradient12.rb +49 -0
  42. data/test/regression/test_chart_gradient13.rb +49 -0
  43. data/test/regression/test_formula_results01.rb +37 -0
  44. data/test/regression/test_hyperlink21.rb +24 -0
  45. data/test/regression/test_merge_range01.rb +27 -0
  46. data/test/regression/test_merge_range02.rb +27 -0
  47. data/test/regression/test_merge_range03.rb +29 -0
  48. data/test/regression/test_merge_range04.rb +27 -0
  49. data/test/regression/test_merge_range05.rb +27 -0
  50. data/test/regression/test_print_options07.rb +33 -0
  51. data/test/regression/xlsx_files/chart_clustered01.xlsx +0 -0
  52. data/test/regression/xlsx_files/chart_display_units01.xlsx +0 -0
  53. data/test/regression/xlsx_files/chart_display_units02.xlsx +0 -0
  54. data/test/regression/xlsx_files/chart_display_units03.xlsx +0 -0
  55. data/test/regression/xlsx_files/chart_display_units04.xlsx +0 -0
  56. data/test/regression/xlsx_files/chart_display_units05.xlsx +0 -0
  57. data/test/regression/xlsx_files/chart_display_units06.xlsx +0 -0
  58. data/test/regression/xlsx_files/chart_display_units07.xlsx +0 -0
  59. data/test/regression/xlsx_files/chart_display_units08.xlsx +0 -0
  60. data/test/regression/xlsx_files/chart_display_units09.xlsx +0 -0
  61. data/test/regression/xlsx_files/chart_display_units10.xlsx +0 -0
  62. data/test/regression/xlsx_files/chart_display_units11.xlsx +0 -0
  63. data/test/regression/xlsx_files/chart_display_units12.xlsx +0 -0
  64. data/test/regression/xlsx_files/chart_gradient01.xlsx +0 -0
  65. data/test/regression/xlsx_files/chart_gradient02.xlsx +0 -0
  66. data/test/regression/xlsx_files/chart_gradient03.xlsx +0 -0
  67. data/test/regression/xlsx_files/chart_gradient04.xlsx +0 -0
  68. data/test/regression/xlsx_files/chart_gradient05.xlsx +0 -0
  69. data/test/regression/xlsx_files/chart_gradient06.xlsx +0 -0
  70. data/test/regression/xlsx_files/chart_gradient07.xlsx +0 -0
  71. data/test/regression/xlsx_files/chart_gradient08.xlsx +0 -0
  72. data/test/regression/xlsx_files/chart_gradient09.xlsx +0 -0
  73. data/test/regression/xlsx_files/chart_gradient10.xlsx +0 -0
  74. data/test/regression/xlsx_files/chart_gradient11.xlsx +0 -0
  75. data/test/regression/xlsx_files/chart_gradient12.xlsx +0 -0
  76. data/test/regression/xlsx_files/chart_gradient13.xlsx +0 -0
  77. data/test/regression/xlsx_files/formula_results01.xlsx +0 -0
  78. data/test/regression/xlsx_files/hyperlink21.xlsx +0 -0
  79. data/test/regression/xlsx_files/merge_range01.xlsx +0 -0
  80. data/test/regression/xlsx_files/merge_range02.xlsx +0 -0
  81. data/test/regression/xlsx_files/merge_range03.xlsx +0 -0
  82. data/test/regression/xlsx_files/merge_range04.xlsx +0 -0
  83. data/test/regression/xlsx_files/merge_range05.xlsx +0 -0
  84. data/test/regression/xlsx_files/print_options07.xlsx +0 -0
  85. data/test/workbook/test_workbook_new.rb +3 -3
  86. metadata +142 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 055ac6da5fa4ffabd709a61116271eb670a1a946
4
- data.tar.gz: da5f1f06369023fec4603457d29cd60b1638e317
3
+ metadata.gz: 4ef56ba78bc0dc29b679deb80865e971e73c9a7d
4
+ data.tar.gz: 8f59b217f920752fe91ff5291ccb335c0ecc5052
5
5
  SHA512:
6
- metadata.gz: 8b09a5444cce89ac0b182f9a82d37ade0e41e5a081cd0c885dcb288e8b6c67a6424ce44dc69e9c6e4e302d4271fb29b9997365ad379629103af99f55fee115ad
7
- data.tar.gz: cfd9852383a7cf97b141ab4ec6a1d5eac376cb05c3e6ecbb64a48e3c799bf513c043273e4a26c8890abb36331278e5705ec5abe34806102ceb615ff58a148bf5
6
+ metadata.gz: 6228d2653d110defdf4ae1f7c19e0ce8cf868c00ec404a39d081c4f09c1c8bd4894f65d078dce84ba471f9fc382442f000d5f9953d52f0b0afd1031b3078a05d
7
+ data.tar.gz: 409bdff580f1c80d2a457d92d744ec5cca67b16dedfb6614474dd12e3f2867f4e0027a9c2074deb3c4ec262df23668e21aa5baae7c9da547e00dd1ac3239d700
data/.travis.yml CHANGED
@@ -1,8 +1,23 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.3.1
4
+ - 2.3.0
5
+ - 2.2.5
6
+ - 2.2.4
7
+ - 2.2.3
8
+ - 2.2.2
9
+ - 2.2.1
3
10
  - 2.2.0
11
+ - 2.1.10
12
+ - 2.1.9
13
+ - 2.1.8
14
+ - 2.1.7
15
+ - 2.1.6
4
16
  - 2.1.5
17
+ - 2.1.4
18
+ - 2.1.3
5
19
  - 2.1.2
6
20
  - 2.1.1
21
+ - 2.1.0
7
22
  - 2.0.0
8
23
  - 1.9.3
data/Changes CHANGED
@@ -1,4 +1,19 @@
1
1
  Change history of write_xlsx rubygem.
2
+
3
+ 2017-05-19 v0.85.1
4
+ Fix for missing method Workbook#set_tempdir
5
+
6
+ 2016-06-01 v0.85.0
7
+ Fix url encoding of links to external files and dirs.
8
+
9
+ 2016-03-11 v0.84.0
10
+ Added support for chart axis display units (thousands, million, etc.).
11
+ Added option to set printing in black and white.
12
+ Added chart styles example.
13
+ Added gradient fill support.
14
+ Added support for clustered charts.
15
+ Added support for boolean error codes.
16
+
2
17
  2015-04-12 v0.83.0
3
18
  Added option to combine two different chart types. For example to
4
19
  create a Pareto chart.
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  gem to create a new file in the Excel 2007+ XLSX format, and you can use the
7
7
  same interface as writeexcel gem. write_xlsx is converted from Perl's module
8
- [Excel::Writer::XLSX-0.83](https://github.com/jmcnamara/excel-writer-xlsx) .
8
+ [Excel::Writer::XLSX-0.84](https://github.com/jmcnamara/excel-writer-xlsx) .
9
9
 
10
10
  ## Description
11
11
 
@@ -85,7 +85,7 @@ the first worksheet in an Excel XML spreadsheet called ruby.xlsx:
85
85
  Original Perl module was written by John McNamara(jmcnamara@cpan.org).
86
86
 
87
87
  Converted to ruby by Hideo NAKAMURA(cxn03651@msj.biglobe.ne.jp)
88
- Copyright (c) 2012-2015 Hideo NAKAMURA.
88
+ Copyright (c) 2012-2017 Hideo NAKAMURA.
89
89
 
90
90
  See LICENSE.txt for further details.
91
91
 
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ #
5
+ # A demo of a clustered category chart in Excel::Writer::XLSX.
6
+ #
7
+ # reverse ('(c)'), March 2015, John McNamara, jmcnamara@cpan.org
8
+ # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
9
+ #
10
+
11
+ require 'write_xlsx'
12
+
13
+ workbook = WriteXLSX.new('chart_clustered.xlsx')
14
+ worksheet = workbook.add_worksheet
15
+ bold = workbook.add_format(:bold => 1)
16
+
17
+ # Add the worksheet data that the charts will refer to.
18
+ headings = ['Types', 'Sub Type', 'Value 1', 'Value 2', 'Value 3']
19
+ data = [
20
+ ['Type 1', 'Sub Type A', 5000, 8000, 6000],
21
+ ['', 'Sub Type B', 2000, 3000, 4000],
22
+ ['', 'Sub Type C', 250, 1000, 2000],
23
+ ['Type 2', 'Sub Type D', 6000, 6000, 6500],
24
+ ['', 'Sub Type E', 500, 300, 200]
25
+ ]
26
+
27
+ worksheet.write('A1', headings, bold)
28
+ worksheet.write_col('A2', data)
29
+
30
+ # Create a new chart object. In this case an embedded chart.
31
+ chart = workbook.add_chart(:type => 'column', :embedded => 1)
32
+
33
+ # Configure the series. Note, that the categories are 2D ranges (from column A
34
+ # to column B). This creates the clusters. The series are shown as formula
35
+ # strings for clarity but you can also use the array syntax. See the docs.
36
+ chart.add_series(
37
+ :name => '=Sheet1!$C$1',
38
+ :categories => '=Sheet1!$A$2:$B$6',
39
+ :values => '=Sheet1!$C$2:$C$6'
40
+ )
41
+
42
+ chart.add_series(
43
+ :name => '=Sheet1!$D$1',
44
+ :categories => '=Sheet1!$A$2:$B$6',
45
+ :values => '=Sheet1!$D$2:$D$6'
46
+ )
47
+
48
+ chart.add_series(
49
+ :name => '=Sheet1!$E$1',
50
+ :categories => '=Sheet1!$A$2:$B$6',
51
+ :values => '=Sheet1!$E$2:$E$6'
52
+ )
53
+
54
+ # Set the Excel chart style.
55
+ chart.set_style(37)
56
+
57
+ # Turn off the legend.
58
+ chart.set_legend(:position => 'none')
59
+
60
+ # Insert the chart into the worksheet.
61
+ worksheet.insert_chart('G3', chart)
62
+
63
+ workbook.close
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ #######################################################################
5
+ #
6
+ # An example showing all 48 default chart styles available in Excel 2007
7
+ # using Excel::Writer::XLSX.. Note, these styles are not the same as the
8
+ # styles available in Excel 2013.
9
+ #
10
+ # reverse ('(c)'), March 2015, John McNamara, jmcnamara@cpan.org
11
+ # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
12
+ #
13
+
14
+ require 'write_xlsx'
15
+
16
+ workbook = WriteXLSX.new('chart_styles.xlsx')
17
+
18
+ # Show the styles for all of these chart types.
19
+ chart_types = ['column', 'area', 'line', 'pie']
20
+
21
+
22
+ chart_types.each do |chart_type|
23
+ # Add a worksheet for each chart type.
24
+ worksheet = workbook.add_worksheet(chart_type.capitalize)
25
+ worksheet.zoom = 30
26
+ style_number = 1
27
+
28
+ # Create 48 charts, each with a different style.
29
+ 0.step(89, 15) do |row_num|
30
+ 0.step(63, 8) do |col_num|
31
+ chart = workbook.add_chart(
32
+ :type => chart_type,
33
+ :embedded => 1
34
+ )
35
+
36
+ chart.add_series( :values => '=Data!$A$1:$A$6' )
37
+ chart.set_title( :name => "Style #{style_number}" )
38
+ chart.set_legend( :none => 1 )
39
+ chart.set_style( style_number )
40
+
41
+ worksheet.insert_chart(row_num, col_num, chart)
42
+ style_number += 1
43
+ end
44
+ end
45
+ end
46
+
47
+ # Create a worksheet with data for the charts.
48
+ data = [ 10, 40, 50, 20, 10, 50 ]
49
+ data_worksheet = workbook.add_worksheet('Data')
50
+ data_worksheet.write_col('A1', data)
51
+ data_worksheet.hide
52
+
53
+ workbook.close
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'write_xlsx/package/xml_writer_simple'
3
+ require 'write_xlsx/gradient'
3
4
  require 'write_xlsx/utility'
4
5
  require 'write_xlsx/chart/axis'
5
6
  require 'write_xlsx/chart/caption'
@@ -37,8 +38,9 @@ def attributes
37
38
 
38
39
  class ChartArea
39
40
  include Writexlsx::Utility
41
+ include Writexlsx::Gradient
40
42
 
41
- attr_reader :line, :fill, :layout
43
+ attr_reader :line, :fill, :gradient, :layout
42
44
 
43
45
  def initialize(params = {})
44
46
  @layout = layout_properties(params[:layout])
@@ -49,9 +51,16 @@ def initialize(params = {})
49
51
  # Set the line properties for the chartarea.
50
52
  @line = border ? line_properties(border) : line_properties(params[:line])
51
53
 
54
+ # Set the gradient fill properties for the series.
55
+ @gradient = gradient_properties(params[:gradient])
56
+
52
57
  # Map deprecated Spreadsheet::WriteExcel fill colour.
53
58
  fill = params[:color] ? { :color => params[:color] } : params[:fill]
54
59
  @fill = fill_properties(fill)
60
+
61
+ if ptrue?(@gradient)
62
+ @fill = nil
63
+ end
55
64
  end
56
65
 
57
66
  private
@@ -641,6 +650,7 @@ def get_data_type(data) # :nodoc:
641
650
  # Check for no data in the series.
642
651
  return 'none' unless data
643
652
  return 'none' if data.empty?
653
+ return 'multi_str' if data.first.kind_of?(Array)
644
654
 
645
655
  # If the token isn't a number assume it is a string.
646
656
  data.each do |token|
@@ -1089,6 +1099,10 @@ def write_cat(series) # :nodoc:
1089
1099
  @cat_has_num_fmt = false
1090
1100
  # Write the c:strRef element.
1091
1101
  write_str_ref(formula, data, type)
1102
+ elsif type == 'multi_str'
1103
+ @cat_has_num_fmt = false
1104
+ # Write the c:multiLvLStrRef element.
1105
+ write_multi_lvl_str_ref(formula, data)
1092
1106
  else
1093
1107
  @cat_has_num_fmt = true
1094
1108
  # Write the c:numRef element.
@@ -1146,6 +1160,32 @@ def write_str_ref(formula, data, type) # :nodoc:
1146
1160
  write_num_or_str_ref('c:strRef', formula, data, type)
1147
1161
  end
1148
1162
 
1163
+ #
1164
+ # Write the <c:multiLvLStrRef> element.
1165
+ #
1166
+ def write_multi_lvl_str_ref(formula, data)
1167
+ return if data.empty?
1168
+
1169
+ @writer.tag_elements('c:multiLvlStrRef') do
1170
+ # Write the c:f element.
1171
+ write_series_formula(formula)
1172
+
1173
+ @writer.tag_elements('c:multiLvlStrCache') do
1174
+
1175
+ # Write the c:ptCount element.
1176
+ write_pt_count(data.last.size)
1177
+
1178
+ # Write the data arrays in reverse order.
1179
+ data.reverse.each do |arr|
1180
+ @writer.tag_elements('c:lvl') do
1181
+ # Write the c:pt element.
1182
+ arr.each_with_index {|a, i| write_pt(i, a)}
1183
+ end
1184
+ end
1185
+ end
1186
+ end
1187
+ end
1188
+
1149
1189
  #
1150
1190
  # Write the <c:numLit> element for literal number list elements.
1151
1191
  #
@@ -1329,6 +1369,9 @@ def write_val_axis_base(x_axis, y_axis, axis_ids_0, axis_ids_1, position) # :no
1329
1369
 
1330
1370
  # Write the c:minorUnit element.
1331
1371
  write_c_minor_unit(y_axis.minor_unit)
1372
+
1373
+ # Write the c:dispUnits element.
1374
+ write_disp_units(y_axis.display_units, y_axis.display_units_visible)
1332
1375
  end
1333
1376
  end
1334
1377
 
@@ -2045,11 +2088,12 @@ def write_symbol(val) # :nodoc:
2045
2088
  # Write the <c:spPr> element.
2046
2089
  #
2047
2090
  def write_sp_pr(series) # :nodoc:
2048
- line = series.line
2049
- fill = series.fill
2091
+ line = series.line
2092
+ fill = series.fill
2093
+ gradient = series.gradient if series.respond_to?(:gradient)
2050
2094
 
2051
2095
  return if (!line || !ptrue?(line[:_defined])) &&
2052
- (!fill || !ptrue?(fill[:_defined]))
2096
+ (!fill || !ptrue?(fill[:_defined])) && !gradient
2053
2097
 
2054
2098
  @writer.tag_elements('c:spPr') do
2055
2099
  # Write the fill elements for solid charts such as pie/doughnut and bar.
@@ -2062,6 +2106,10 @@ def write_sp_pr(series) # :nodoc:
2062
2106
  write_a_solid_fill(fill)
2063
2107
  end
2064
2108
  end
2109
+ if ptrue?(gradient)
2110
+ # Write the a:gradFill element.
2111
+ write_a_grad_fill(gradient)
2112
+ end
2065
2113
  # Write the a:ln element.
2066
2114
  write_a_ln(line) if line && ptrue?(line[:_defined])
2067
2115
  end
@@ -2642,6 +2690,145 @@ def write_c_smooth(smooth)
2642
2690
  @writer.empty_tag('c:smooth', attributes)
2643
2691
  end
2644
2692
 
2693
+ #
2694
+ # Write the <c:dispUnits> element.
2695
+ #
2696
+ def write_disp_units(units, display)
2697
+ return unless ptrue?(units)
2698
+
2699
+ attributes = [ ['val', units] ]
2700
+
2701
+ @writer.tag_elements('c:dispUnits') do
2702
+ @writer.empty_tag('c:builtInUnit', attributes)
2703
+ if ptrue?(display)
2704
+ @writer.tag_elements('c:dispUnitsLbl') do
2705
+ @writer.empty_tag('c:layout')
2706
+ end
2707
+ end
2708
+ end
2709
+ end
2710
+
2711
+ #
2712
+ # Write the <a:gradFill> element.
2713
+ #
2714
+ def write_a_grad_fill(gradient)
2715
+ attributes = [
2716
+ ['flip', 'none'],
2717
+ ['rotWithShape', 1]
2718
+ ]
2719
+ attributes = [] if gradient[:type] == 'linear'
2720
+
2721
+ @writer.tag_elements('a:gradFill', attributes) do
2722
+
2723
+ # Write the a:gsLst element.
2724
+ write_a_gs_lst(gradient)
2725
+
2726
+ if gradient[:type] == 'linear'
2727
+ # Write the a:lin element.
2728
+ write_a_lin(gradient[:angle])
2729
+ else
2730
+ # Write the a:path element.
2731
+ write_a_path(gradient[:type])
2732
+
2733
+ # Write the a:tileRect element.
2734
+ write_a_tile_rect(gradient[:type])
2735
+ end
2736
+ end
2737
+ end
2738
+
2739
+ #
2740
+ # Write the <a:gsLst> element.
2741
+ #
2742
+ def write_a_gs_lst(gradient)
2743
+ positions = gradient[:positions]
2744
+ colors = gradient[:colors]
2745
+
2746
+ @writer.tag_elements('a:gsLst') do
2747
+ (0..colors.size-1).each do |i|
2748
+ pos = (positions[i] * 1000).to_i
2749
+
2750
+ attributes = [ ['pos', pos] ]
2751
+ @writer.tag_elements('a:gs', attributes) do
2752
+
2753
+ color = color(colors[i])
2754
+
2755
+ # Write the a:srgbClr element.
2756
+ # TODO: Wait for a feature request to support transparency.
2757
+ write_a_srgb_clr( color );
2758
+ end
2759
+ end
2760
+ end
2761
+ end
2762
+
2763
+ #
2764
+ # Write the <a:lin> element.
2765
+ #
2766
+ def write_a_lin(angle)
2767
+ scaled = 0
2768
+
2769
+ angle = (60000 * angle).to_i
2770
+
2771
+ attributes = [
2772
+ ['ang', angle],
2773
+ ['scaled', scaled]
2774
+ ]
2775
+
2776
+ @writer.empty_tag('a:lin', attributes)
2777
+ end
2778
+
2779
+ #
2780
+ # Write the <a:path> element.
2781
+ #
2782
+ def write_a_path(type)
2783
+ attributes = [ ['path', type] ]
2784
+
2785
+ @writer.tag_elements('a:path', attributes) do
2786
+ # Write the a:fillToRect element.
2787
+ write_a_fill_to_rect(type)
2788
+ end
2789
+ end
2790
+
2791
+ #
2792
+ # Write the <a:fillToRect> element.
2793
+ #
2794
+ def write_a_fill_to_rect(type)
2795
+ attributes = []
2796
+
2797
+ if type == 'shape'
2798
+ attributes = [
2799
+ ['l' , 50000],
2800
+ ['t' , 50000],
2801
+ ['r' , 50000],
2802
+ ['b' , 50000]
2803
+ ]
2804
+ else
2805
+ attributes = [
2806
+ ['l', 100000],
2807
+ ['t', 100000]
2808
+ ]
2809
+ end
2810
+
2811
+ @writer.empty_tag('a:fillToRect', attributes)
2812
+ end
2813
+
2814
+ #
2815
+ # Write the <a:tileRect> element.
2816
+ #
2817
+ def write_a_tile_rect(type)
2818
+ attributes = []
2819
+
2820
+ if type == 'shape'
2821
+ attributes = []
2822
+ else
2823
+ attributes = [
2824
+ ['r', -100000],
2825
+ ['b', -100000]
2826
+ ]
2827
+ end
2828
+
2829
+ @writer.empty_tag('a:tileRect', attributes)
2830
+ end
2831
+
2645
2832
  def write_bars_base(tag, format)
2646
2833
  if format.line_defined? || format.fill_defined?
2647
2834
  @writer.tag_elements(tag) { write_sp_pr(format) }