write_xlsx 1.09.5 → 1.10.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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -1
  3. data/Changes +8 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +1 -1
  6. data/examples/autofilter.rb +39 -10
  7. data/examples/chart_area.rb +12 -12
  8. data/examples/chart_bar.rb +12 -12
  9. data/examples/chart_clustered.rb +12 -12
  10. data/examples/chart_column.rb +12 -12
  11. data/examples/chart_combined.rb +25 -25
  12. data/examples/chart_data_labels.rb +99 -99
  13. data/examples/chart_data_table.rb +25 -25
  14. data/examples/chart_data_tools.rb +50 -50
  15. data/examples/chart_doughnut.rb +29 -29
  16. data/examples/chart_gauge.rb +18 -18
  17. data/examples/chart_line.rb +32 -32
  18. data/examples/chart_pareto.rb +16 -16
  19. data/examples/chart_pie.rb +17 -17
  20. data/examples/chart_radar.rb +38 -38
  21. data/examples/chart_scatter.rb +12 -12
  22. data/examples/chart_secondary_axis.rb +13 -13
  23. data/examples/chart_stock.rb +12 -12
  24. data/examples/chart_styles.rb +5 -5
  25. data/examples/colors.rb +11 -11
  26. data/examples/comments2.rb +15 -15
  27. data/examples/conditional_format.rb +74 -74
  28. data/examples/data_validate.rb +64 -64
  29. data/examples/date_time.rb +3 -3
  30. data/examples/demo.rb +14 -14
  31. data/examples/diag_border.rb +6 -6
  32. data/examples/dynamic_arrays.rb +247 -0
  33. data/examples/formats.rb +10 -10
  34. data/examples/hyperlink1.rb +4 -4
  35. data/examples/ignore_errors.rb +2 -2
  36. data/examples/indent.rb +2 -2
  37. data/examples/lambda.rb +43 -0
  38. data/examples/macros.rb +4 -4
  39. data/examples/merge1.rb +1 -1
  40. data/examples/merge2.rb +9 -9
  41. data/examples/merge3.rb +5 -5
  42. data/examples/merge4.rb +20 -20
  43. data/examples/merge5.rb +18 -18
  44. data/examples/merge6.rb +7 -7
  45. data/examples/outline.rb +1 -1
  46. data/examples/outline_collapsed.rb +1 -1
  47. data/examples/panes.rb +4 -4
  48. data/examples/properties.rb +9 -9
  49. data/examples/protection.rb +2 -2
  50. data/examples/rich_strings.rb +6 -6
  51. data/examples/shape1.rb +7 -7
  52. data/examples/shape2.rb +16 -16
  53. data/examples/shape3.rb +5 -5
  54. data/examples/shape4.rb +7 -7
  55. data/examples/shape5.rb +7 -7
  56. data/examples/shape6.rb +7 -7
  57. data/examples/shape7.rb +10 -10
  58. data/examples/shape8.rb +10 -10
  59. data/examples/shape_all.rb +4 -4
  60. data/examples/sparklines1.rb +11 -11
  61. data/examples/sparklines2.rb +76 -76
  62. data/examples/tables.rb +87 -87
  63. data/examples/watermark.png +0 -0
  64. data/examples/watermark.rb +26 -0
  65. data/lib/write_xlsx/chart/bar.rb +4 -4
  66. data/lib/write_xlsx/chart/line.rb +1 -1
  67. data/lib/write_xlsx/chart/radar.rb +2 -2
  68. data/lib/write_xlsx/chart/scatter.rb +4 -4
  69. data/lib/write_xlsx/chart/series.rb +27 -27
  70. data/lib/write_xlsx/chart/stock.rb +5 -5
  71. data/lib/write_xlsx/chart.rb +31 -30
  72. data/lib/write_xlsx/chartsheet.rb +1 -0
  73. data/lib/write_xlsx/col_name.rb +1 -0
  74. data/lib/write_xlsx/colors.rb +20 -19
  75. data/lib/write_xlsx/compatibility.rb +1 -0
  76. data/lib/write_xlsx/drawing.rb +20 -10
  77. data/lib/write_xlsx/format.rb +5 -0
  78. data/lib/write_xlsx/formats.rb +1 -0
  79. data/lib/write_xlsx/gradient.rb +2 -0
  80. data/lib/write_xlsx/package/app.rb +1 -0
  81. data/lib/write_xlsx/package/button.rb +6 -2
  82. data/lib/write_xlsx/package/comments.rb +3 -1
  83. data/lib/write_xlsx/package/conditional_format.rb +4 -3
  84. data/lib/write_xlsx/package/content_types.rb +1 -0
  85. data/lib/write_xlsx/package/core.rb +1 -0
  86. data/lib/write_xlsx/package/custom.rb +1 -0
  87. data/lib/write_xlsx/package/metadata.rb +1 -0
  88. data/lib/write_xlsx/package/packager.rb +1 -0
  89. data/lib/write_xlsx/package/relationships.rb +1 -0
  90. data/lib/write_xlsx/package/shared_strings.rb +1 -1
  91. data/lib/write_xlsx/package/styles.rb +1 -0
  92. data/lib/write_xlsx/package/table.rb +9 -8
  93. data/lib/write_xlsx/package/theme.rb +1 -0
  94. data/lib/write_xlsx/package/vml.rb +1 -0
  95. data/lib/write_xlsx/package/xml_writer_simple.rb +21 -2
  96. data/lib/write_xlsx/shape.rb +6 -5
  97. data/lib/write_xlsx/sheets.rb +2 -1
  98. data/lib/write_xlsx/sparkline.rb +287 -286
  99. data/lib/write_xlsx/utility.rb +25 -26
  100. data/lib/write_xlsx/version.rb +3 -1
  101. data/lib/write_xlsx/workbook.rb +20 -20
  102. data/lib/write_xlsx/worksheet/cell_data.rb +53 -63
  103. data/lib/write_xlsx/worksheet/data_validation.rb +1 -0
  104. data/lib/write_xlsx/worksheet/hyperlink.rb +3 -2
  105. data/lib/write_xlsx/worksheet/page_setup.rb +1 -0
  106. data/lib/write_xlsx/worksheet.rb +287 -74
  107. data/lib/write_xlsx/zip_file_utils.rb +1 -0
  108. data/lib/write_xlsx.rb +1 -0
  109. data/write_xlsx.gemspec +1 -0
  110. metadata +8 -4
@@ -458,11 +458,10 @@ module Writexlsx
458
458
  [left, top, width, height]
459
459
  end
460
460
 
461
- def v_shape_attributes_base(id, z_index)
461
+ def v_shape_attributes_base(id)
462
462
  [
463
463
  ['id', "_x0000_s#{id}"],
464
- ['type', type],
465
- ['style', (v_shape_style_base(z_index, vertices) + style_addition).join]
464
+ ['type', type]
466
465
  ]
467
466
  end
468
467
 
@@ -684,7 +683,7 @@ module Writexlsx
684
683
  end
685
684
 
686
685
  def line_fill_properties(params)
687
- return { :_defined => 0 } unless params
686
+ return { _defined: 0 } unless params
688
687
 
689
688
  ret = params.dup
690
689
  ret[:dash_type] = yield if block_given? && ret[:dash_type]
@@ -694,17 +693,17 @@ module Writexlsx
694
693
 
695
694
  def dash_types
696
695
  {
697
- :solid => 'solid',
698
- :round_dot => 'sysDot',
699
- :square_dot => 'sysDash',
700
- :dash => 'dash',
701
- :dash_dot => 'dashDot',
702
- :long_dash => 'lgDash',
703
- :long_dash_dot => 'lgDashDot',
704
- :long_dash_dot_dot => 'lgDashDotDot',
705
- :dot => 'dot',
706
- :system_dash_dot => 'sysDashDot',
707
- :system_dash_dot_dot => 'sysDashDotDot'
696
+ solid: 'solid',
697
+ round_dot: 'sysDot',
698
+ square_dot: 'sysDash',
699
+ dash: 'dash',
700
+ dash_dot: 'dashDot',
701
+ long_dash: 'lgDash',
702
+ long_dash_dot: 'lgDashDot',
703
+ long_dash_dot_dot: 'lgDashDotDot',
704
+ dot: 'dot',
705
+ system_dash_dot: 'sysDashDot',
706
+ system_dash_dot_dot: 'sysDashDotDot'
708
707
  }
709
708
  end
710
709
 
@@ -767,16 +766,16 @@ module Writexlsx
767
766
 
768
767
  def params_to_font(params)
769
768
  {
770
- :_name => params[:name],
771
- :_color => params[:color],
772
- :_size => params[:size],
773
- :_bold => params[:bold],
774
- :_italic => params[:italic],
775
- :_underline => params[:underline],
776
- :_pitch_family => params[:pitch_family],
777
- :_charset => params[:charset],
778
- :_baseline => params[:baseline] || 0,
779
- :_rotation => params[:rotation]
769
+ _name: params[:name],
770
+ _color: params[:color],
771
+ _size: params[:size],
772
+ _bold: params[:bold],
773
+ _italic: params[:italic],
774
+ _underline: params[:underline],
775
+ _pitch_family: params[:pitch_family],
776
+ _charset: params[:charset],
777
+ _baseline: params[:baseline] || 0,
778
+ _rotation: params[:rotation]
780
779
  }
781
780
  end
782
781
 
@@ -863,7 +862,7 @@ module Writexlsx
863
862
 
864
863
  if !latin_attributes.empty? || has_color
865
864
  @writer.tag_elements(tag, style_attributes) do
866
- write_a_solid_fill(:color => font[:_color]) if has_color
865
+ write_a_solid_fill(color: font[:_color]) if has_color
867
866
  write_a_latin(latin_attributes) unless latin_attributes.empty?
868
867
  end
869
868
  else
@@ -1 +1,3 @@
1
- WriteXLSX_VERSION = "1.09.5"
1
+ # frozen_string_literal: true
2
+
3
+ WriteXLSX_VERSION = "1.10.1"
@@ -95,18 +95,18 @@ module Writexlsx
95
95
 
96
96
  if @excel2003_style
97
97
  add_format(default_formats.merge(
98
- :xf_index => 0,
99
- :font_family => 0,
100
- :font => 'Arial',
101
- :size => 10,
102
- :theme => -1
98
+ xf_index: 0,
99
+ font_family: 0,
100
+ font: 'Arial',
101
+ size: 10,
102
+ theme: -1
103
103
  ))
104
104
  else
105
- add_format(default_formats.merge(:xf_index => 0))
105
+ add_format(default_formats.merge(xf_index: 0))
106
106
  end
107
107
 
108
108
  # Add a default URL format.
109
- @default_url_format = add_format(:hyperlink => 1)
109
+ @default_url_format = add_format(hyperlink: 1)
110
110
 
111
111
  set_color_palette
112
112
  end
@@ -273,7 +273,7 @@ module Writexlsx
273
273
  #
274
274
  def add_format(property_hash = {})
275
275
  properties = {}
276
- properties.update(:font => 'Arial', :size => 10, :theme => -1) if @excel2003_style
276
+ properties.update(font: 'Arial', size: 10, theme: -1) if @excel2003_style
277
277
  properties.update(property_hash)
278
278
 
279
279
  format = Format.new(@formats, properties)
@@ -376,18 +376,18 @@ module Writexlsx
376
376
 
377
377
  # List of valid input parameters.
378
378
  valid = {
379
- :title => 1,
380
- :subject => 1,
381
- :author => 1,
382
- :keywords => 1,
383
- :comments => 1,
384
- :last_author => 1,
385
- :created => 1,
386
- :category => 1,
387
- :manager => 1,
388
- :company => 1,
389
- :status => 1,
390
- :hyperlink_base => 1
379
+ title: 1,
380
+ subject: 1,
381
+ author: 1,
382
+ keywords: 1,
383
+ comments: 1,
384
+ last_author: 1,
385
+ created: 1,
386
+ category: 1,
387
+ manager: 1,
388
+ company: 1,
389
+ status: 1,
390
+ hyperlink_base: 1
391
391
  }
392
392
 
393
393
  # Check for valid input parameters.
@@ -6,14 +6,13 @@ module Writexlsx
6
6
  class CellData # :nodoc:
7
7
  include Writexlsx::Utility
8
8
 
9
- attr_reader :row, :col, :token, :xf
10
- attr_reader :result, :range, :link_type, :url, :tip
9
+ attr_reader :xf
11
10
 
12
11
  #
13
12
  # attributes for the <cell> element. This is the innermost loop so efficiency is
14
13
  # important where possible.
15
14
  #
16
- def cell_attributes # :nodoc:
15
+ def cell_attributes(worksheet, row, col) # :nodoc:
17
16
  xf_index = xf ? xf.get_xf_index : 0
18
17
  attributes = [
19
18
  ['r', xl_rowcol_to_cell(row, col)]
@@ -22,11 +21,11 @@ module Writexlsx
22
21
  # Add the cell format index.
23
22
  if xf_index != 0
24
23
  attributes << ['s', xf_index]
25
- elsif @worksheet.set_rows[row] && @worksheet.set_rows[row][1]
26
- row_xf = @worksheet.set_rows[row][1]
24
+ elsif worksheet.set_rows[row] && worksheet.set_rows[row][1]
25
+ row_xf = worksheet.set_rows[row][1]
27
26
  attributes << ['s', row_xf.get_xf_index]
28
- elsif @worksheet.col_formats[col]
29
- col_xf = @worksheet.col_formats[col]
27
+ elsif worksheet.col_formats[col]
28
+ col_xf = worksheet.col_formats[col]
30
29
  attributes << ['s', col_xf.get_xf_index]
31
30
  end
32
31
  attributes
@@ -38,10 +37,9 @@ module Writexlsx
38
37
  end
39
38
 
40
39
  class NumberCellData < CellData # :nodoc:
41
- def initialize(worksheet, row, col, num, xf)
42
- @worksheet = worksheet
43
- @row = row
44
- @col = col
40
+ attr_reader :token
41
+
42
+ def initialize(num, xf)
45
43
  @token = num
46
44
  @xf = xf
47
45
  end
@@ -50,32 +48,31 @@ module Writexlsx
50
48
  @token
51
49
  end
52
50
 
53
- def write_cell
54
- @worksheet.writer.tag_elements('c', cell_attributes) do
55
- @worksheet.write_cell_value(token)
51
+ def write_cell(worksheet, row, col)
52
+ worksheet.writer.tag_elements('c', cell_attributes(worksheet, row, col)) do
53
+ worksheet.write_cell_value(token)
56
54
  end
57
55
  end
58
56
  end
59
57
 
60
58
  class StringCellData < CellData # :nodoc:
61
- def initialize(worksheet, row, col, index, xf)
62
- @worksheet = worksheet
63
- @row = row
64
- @col = col
59
+ attr_reader :token
60
+
61
+ def initialize(index, xf)
65
62
  @token = index
66
63
  @xf = xf
67
64
  end
68
65
 
69
66
  def data
70
- { :sst_id => token }
67
+ { sst_id: token }
71
68
  end
72
69
 
73
70
  TYPE_STR_ATTRS = %w[t s].freeze
74
- def write_cell
75
- attributes = cell_attributes
71
+ def write_cell(worksheet, row, col)
72
+ attributes = cell_attributes(worksheet, row, col)
76
73
  attributes << TYPE_STR_ATTRS
77
- @worksheet.writer.tag_elements('c', attributes) do
78
- @worksheet.write_cell_value(token)
74
+ worksheet.writer.tag_elements('c', attributes) do
75
+ worksheet.write_cell_value(token)
79
76
  end
80
77
  end
81
78
 
@@ -85,10 +82,9 @@ module Writexlsx
85
82
  end
86
83
 
87
84
  class FormulaCellData < CellData # :nodoc:
88
- def initialize(worksheet, row, col, formula, xf, result)
89
- @worksheet = worksheet
90
- @row = row
91
- @col = col
85
+ attr_reader :token, :result, :range, :link_type, :url
86
+
87
+ def initialize(formula, xf, result)
92
88
  @token = formula
93
89
  @xf = xf
94
90
  @result = result
@@ -98,11 +94,11 @@ module Writexlsx
98
94
  @result || 0
99
95
  end
100
96
 
101
- def write_cell
97
+ def write_cell(worksheet, row, col)
102
98
  truefalse = { 'TRUE' => 1, 'FALSE' => 0 }
103
99
  error_code = ['#DIV/0!', '#N/A', '#NAME?', '#NULL!', '#NUM!', '#REF!', '#VALUE!']
104
100
 
105
- attributes = cell_attributes
101
+ attributes = cell_attributes(worksheet, row, col)
106
102
  if @result && !(@result.to_s =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
107
103
  if truefalse[@result]
108
104
  attributes << %w[t b]
@@ -113,18 +109,17 @@ module Writexlsx
113
109
  attributes << %w[t str]
114
110
  end
115
111
  end
116
- @worksheet.writer.tag_elements('c', attributes) do
117
- @worksheet.write_cell_formula(token)
118
- @worksheet.write_cell_value(result || 0)
112
+ worksheet.writer.tag_elements('c', attributes) do
113
+ worksheet.write_cell_formula(token)
114
+ worksheet.write_cell_value(result || 0)
119
115
  end
120
116
  end
121
117
  end
122
118
 
123
119
  class FormulaArrayCellData < CellData # :nodoc:
124
- def initialize(worksheet, row, col, formula, xf, range, result)
125
- @worksheet = worksheet
126
- @row = row
127
- @col = col
120
+ attr_reader :token, :result, :range, :link_type, :url
121
+
122
+ def initialize(formula, xf, range, result)
128
123
  @token = formula
129
124
  @xf = xf
130
125
  @range = range
@@ -135,19 +130,18 @@ module Writexlsx
135
130
  @result || 0
136
131
  end
137
132
 
138
- def write_cell
139
- @worksheet.writer.tag_elements('c', cell_attributes) do
140
- @worksheet.write_cell_array_formula(token, range)
141
- @worksheet.write_cell_value(result)
133
+ def write_cell(worksheet, row, col)
134
+ worksheet.writer.tag_elements('c', cell_attributes(worksheet, row, col)) do
135
+ worksheet.write_cell_array_formula(token, range)
136
+ worksheet.write_cell_value(result)
142
137
  end
143
138
  end
144
139
  end
145
140
 
146
141
  class DynamicFormulaArrayCellData < CellData # :nodoc:
147
- def initialize(worksheet, row, col, formula, xf, range, result)
148
- @worksheet = worksheet
149
- @row = row
150
- @col = col
142
+ attr_reader :token, :result, :range, :link_type, :url
143
+
144
+ def initialize(formula, xf, range, result)
151
145
  @token = formula
152
146
  @xf = xf
153
147
  @range = range
@@ -158,23 +152,22 @@ module Writexlsx
158
152
  @result || 0
159
153
  end
160
154
 
161
- def write_cell
155
+ def write_cell(worksheet, row, col)
162
156
  # Add metadata linkage for dynamic array formulas.
163
- attributes = cell_attributes
157
+ attributes = cell_attributes(worksheet, row, col)
164
158
  attributes << %w[cm 1]
165
159
 
166
- @worksheet.writer.tag_elements('c', attributes) do
167
- @worksheet.write_cell_array_formula(token, range)
168
- @worksheet.write_cell_value(result)
160
+ worksheet.writer.tag_elements('c', attributes) do
161
+ worksheet.write_cell_array_formula(token, range)
162
+ worksheet.write_cell_value(result)
169
163
  end
170
164
  end
171
165
  end
172
166
 
173
167
  class BooleanCellData < CellData # :nodoc:
174
- def initialize(worksheet, row, col, val, xf)
175
- @worksheet = worksheet
176
- @row = row
177
- @col = col
168
+ attr_reader :token
169
+
170
+ def initialize(val, xf)
178
171
  @token = val
179
172
  @xf = xf
180
173
  end
@@ -183,21 +176,18 @@ module Writexlsx
183
176
  @token
184
177
  end
185
178
 
186
- def write_cell
187
- attributes = cell_attributes
179
+ def write_cell(worksheet, row, col)
180
+ attributes = cell_attributes(worksheet, row, col)
188
181
 
189
182
  attributes << %w[t b]
190
- @worksheet.writer.tag_elements('c', attributes) do
191
- @worksheet.write_cell_value(token)
183
+ worksheet.writer.tag_elements('c', attributes) do
184
+ worksheet.write_cell_value(token)
192
185
  end
193
186
  end
194
187
  end
195
188
 
196
189
  class BlankCellData < CellData # :nodoc:
197
- def initialize(worksheet, row, col, xf)
198
- @worksheet = worksheet
199
- @row = row
200
- @col = col
190
+ def initialize(xf)
201
191
  @xf = xf
202
192
  end
203
193
 
@@ -205,8 +195,8 @@ module Writexlsx
205
195
  ''
206
196
  end
207
197
 
208
- def write_cell
209
- @worksheet.writer.empty_tag('c', cell_attributes)
198
+ def write_cell(worksheet, row, col)
199
+ worksheet.writer.empty_tag('c', cell_attributes(worksheet, row, col))
210
200
  end
211
201
  end
212
202
  end
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Writexlsx
4
5
  class Worksheet
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Writexlsx
4
5
  class Worksheet
@@ -99,10 +100,10 @@ module Writexlsx
99
100
 
100
101
  # For external links change the directory separator from Unix to Dos.
101
102
  url = url.gsub(%r{/}, '\\')
102
- str.gsub!(%r{/}, '\\')
103
+ str = str.gsub(%r{/}, '\\')
103
104
 
104
105
  # Strip the mailto header.
105
- str.sub!(/^mailto:/, '')
106
+ str = str.sub(/^mailto:/, '')
106
107
 
107
108
  # Split url into the link and optional anchor/location.
108
109
  url, url_str = url.split(/#/, 2)
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Writexlsx
4
5
  class Worksheet