write_xlsx 1.13.0 → 1.15.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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/Changes +20 -0
  4. data/lib/write_xlsx/chart/area.rb +2 -2
  5. data/lib/write_xlsx/chart/axis.rb +55 -32
  6. data/lib/write_xlsx/chart/axis_writer.rb +528 -0
  7. data/lib/write_xlsx/chart/bar.rb +2 -2
  8. data/lib/write_xlsx/chart/caption.rb +16 -9
  9. data/lib/write_xlsx/chart/chart_area.rb +121 -0
  10. data/lib/write_xlsx/chart/column.rb +2 -2
  11. data/lib/write_xlsx/chart/d_pt_point_writer.rb +14 -0
  12. data/lib/write_xlsx/chart/doughnut.rb +0 -3
  13. data/lib/write_xlsx/chart/formatting_writer.rb +652 -0
  14. data/lib/write_xlsx/chart/initialization.rb +100 -0
  15. data/lib/write_xlsx/chart/line.rb +4 -3
  16. data/lib/write_xlsx/chart/pie.rb +6 -2
  17. data/lib/write_xlsx/chart/radar.rb +2 -2
  18. data/lib/write_xlsx/chart/scatter.rb +4 -3
  19. data/lib/write_xlsx/chart/series.rb +35 -15
  20. data/lib/write_xlsx/chart/series_data.rb +132 -0
  21. data/lib/write_xlsx/chart/series_writer.rb +318 -0
  22. data/lib/write_xlsx/chart/settings.rb +226 -0
  23. data/lib/write_xlsx/chart/stock.rb +2 -2
  24. data/lib/write_xlsx/chart/table.rb +50 -0
  25. data/lib/write_xlsx/chart/xml_writer.rb +305 -0
  26. data/lib/write_xlsx/chart.rb +286 -2477
  27. data/lib/write_xlsx/chartsheet.rb +31 -82
  28. data/lib/write_xlsx/constants.rb +11 -0
  29. data/lib/write_xlsx/drawing.rb +5 -3
  30. data/lib/write_xlsx/format/alignment_state.rb +39 -0
  31. data/lib/write_xlsx/format/alignment_style.rb +92 -0
  32. data/lib/write_xlsx/format/border_state.rb +47 -0
  33. data/lib/write_xlsx/format/border_style.rb +116 -0
  34. data/lib/write_xlsx/format/fill_state.rb +26 -0
  35. data/lib/write_xlsx/format/fill_style.rb +52 -0
  36. data/lib/write_xlsx/format/font_state.rb +74 -0
  37. data/lib/write_xlsx/format/font_style.rb +172 -0
  38. data/lib/write_xlsx/format/format_state.rb +65 -0
  39. data/lib/write_xlsx/format/number_format_state.rb +20 -0
  40. data/lib/write_xlsx/format/number_format_style.rb +28 -0
  41. data/lib/write_xlsx/format/protection_state.rb +20 -0
  42. data/lib/write_xlsx/format/protection_style.rb +28 -0
  43. data/lib/write_xlsx/format.rb +1093 -426
  44. data/lib/write_xlsx/formats.rb +0 -2
  45. data/lib/write_xlsx/image_property.rb +4 -1
  46. data/lib/write_xlsx/inserted_chart.rb +1 -1
  47. data/lib/write_xlsx/object_positioning.rb +15 -1
  48. data/lib/write_xlsx/package/app.rb +2 -2
  49. data/lib/write_xlsx/package/button.rb +6 -2
  50. data/lib/write_xlsx/package/comments.rb +11 -3
  51. data/lib/write_xlsx/package/conditional_format.rb +7 -3
  52. data/lib/write_xlsx/package/content_types.rb +2 -2
  53. data/lib/write_xlsx/package/core.rb +2 -2
  54. data/lib/write_xlsx/package/custom.rb +3 -2
  55. data/lib/write_xlsx/package/metadata.rb +2 -2
  56. data/lib/write_xlsx/package/packager.rb +0 -3
  57. data/lib/write_xlsx/package/relationships.rb +2 -2
  58. data/lib/write_xlsx/package/rich_value.rb +4 -2
  59. data/lib/write_xlsx/package/rich_value_rel.rb +2 -2
  60. data/lib/write_xlsx/package/rich_value_structure.rb +2 -2
  61. data/lib/write_xlsx/package/rich_value_types.rb +3 -3
  62. data/lib/write_xlsx/package/shared_strings.rb +2 -2
  63. data/lib/write_xlsx/package/styles.rb +13 -9
  64. data/lib/write_xlsx/package/table.rb +8 -2
  65. data/lib/write_xlsx/package/theme.rb +0 -3
  66. data/lib/write_xlsx/package/vml.rb +2 -2
  67. data/lib/write_xlsx/page_setup.rb +3 -1
  68. data/lib/write_xlsx/shape.rb +97 -100
  69. data/lib/write_xlsx/sheets.rb +6 -1
  70. data/lib/write_xlsx/sparkline.rb +2 -2
  71. data/lib/write_xlsx/utility/cell_reference.rb +124 -0
  72. data/lib/write_xlsx/utility/chart_formatting.rb +262 -0
  73. data/lib/write_xlsx/utility/common.rb +44 -0
  74. data/lib/write_xlsx/utility/date_time.rb +113 -0
  75. data/lib/write_xlsx/utility/dimensions.rb +40 -0
  76. data/lib/write_xlsx/utility/drawing.rb +136 -0
  77. data/lib/write_xlsx/utility/rich_text.rb +184 -0
  78. data/lib/write_xlsx/utility/sheetname_quoting.rb +73 -0
  79. data/lib/write_xlsx/utility/string_width.rb +45 -0
  80. data/lib/write_xlsx/utility/url.rb +27 -0
  81. data/lib/write_xlsx/utility/xml_primitives.rb +32 -0
  82. data/lib/write_xlsx/version.rb +1 -1
  83. data/lib/write_xlsx/workbook/chart_data.rb +188 -0
  84. data/lib/write_xlsx/workbook/format_preparation.rb +199 -0
  85. data/lib/write_xlsx/workbook/initialization.rb +223 -0
  86. data/lib/write_xlsx/workbook/package_preparation.rb +231 -0
  87. data/lib/write_xlsx/workbook/workbook_writer.rb +164 -0
  88. data/lib/write_xlsx/workbook.rb +143 -981
  89. data/lib/write_xlsx/worksheet/autofilter.rb +3 -1
  90. data/lib/write_xlsx/worksheet/cell_data.rb +5 -1
  91. data/lib/write_xlsx/worksheet/columns.rb +8 -3
  92. data/lib/write_xlsx/worksheet/data_validation.rb +9 -1
  93. data/lib/write_xlsx/worksheet/data_writing.rb +37 -10
  94. data/lib/write_xlsx/worksheet/formatting.rb +3 -1
  95. data/lib/write_xlsx/worksheet/hyperlink.rb +9 -1
  96. data/lib/write_xlsx/worksheet/row_col_sizing.rb +3 -1
  97. data/lib/write_xlsx/worksheet/xml_writer.rb +9 -4
  98. data/lib/write_xlsx/worksheet.rb +19 -2
  99. metadata +41 -2
  100. data/lib/write_xlsx/utility.rb +0 -1034
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8da4e683796759c1d6cdee00aaba72671bb7ea86e7ece2a794628d04289c880a
4
- data.tar.gz: dd59c677e92a15eb273d6290c093e90c2a560d4c087a937c2ee343f2cf5286f4
3
+ metadata.gz: e475548e954baadcd73499953c8a6a01a3e668ec2e023d3a98f382e633b0b460
4
+ data.tar.gz: 57f95edde86df1b2a6d9d8bae225f0ad085a3d3f1f93e093c56d8f0be21897d4
5
5
  SHA512:
6
- metadata.gz: 33646d4746630950a08a4f29546682a2c52c04db52df9e201c37b42d31e1033ecd486904009b09b88d637a0d7074f65ac92025c9ea0755e427f3d7d7183da33c
7
- data.tar.gz: a6f60317b950822df36b6cc3eacfd4922bcff4026f090714964d547eaa8227b9e5cb56c6f49ea33686601bf95d9c6788b8b9d70dc1d8f46f46ce1e16855420bb
6
+ metadata.gz: 4565dea924eb24aeae0297e3bc8c418815618ffaa24c4f92b8ecb642bf5b18d1dc47731caf944092caeb9974c6f659a919a744b46a5b674933816d8f496ec096
7
+ data.tar.gz: a5b5094db8ce823dfb0fa773bf9f5e0c69a6fcc767cbbf2b1817ab5bc4735db9b02ebe5ab0d6c629cf3dc51cc29a8cd92735c4a03e595744974892334bf89f1d
data/.rubocop.yml CHANGED
@@ -48,6 +48,9 @@ Lint/DuplicateBranch:
48
48
  - 'lib/write_xlsx/worksheet.rb'
49
49
  - 'lib/write_xlsx/worksheet/data_writing.rb'
50
50
 
51
+ Lint/DuplicateMethods:
52
+ Enabled: false
53
+
51
54
  Lint/FloatComparison:
52
55
  Enabled: false
53
56
 
@@ -136,9 +139,18 @@ Style/NumericLiterals:
136
139
  Style/OptionalBooleanParameter:
137
140
  Enabled: false
138
141
 
142
+ Style/ParallelAssignment:
143
+ Enabled: false
144
+
145
+ Style/PreferredHashMethods:
146
+ Enabled: false
147
+
139
148
  Style/RaiseArgs:
140
149
  Enabled: false
141
150
 
151
+ Style/RedundantSelf:
152
+ Enabled: false
153
+
142
154
  Style/SlicingWithRange:
143
155
  Enabled: false
144
156
 
@@ -148,3 +160,6 @@ Style/StringLiterals:
148
160
  Style/StringLiteralsInInterpolation:
149
161
  Enabled: true
150
162
  EnforcedStyle: double_quotes
163
+
164
+ Styles/TrivialAccessors:
165
+ Enabled: false
data/Changes CHANGED
@@ -1,5 +1,25 @@
1
1
  Change history of write_xlsx rubygem.
2
2
 
3
+ 2026-03-20 v1.15.0
4
+ Add the option to position custom data labels in the same way that the
5
+ data labels can be positioned for the entire series.
6
+
7
+ Add border, fill, gradient and pattern formatting options for
8
+ chart titles and also chart axis titles.
9
+
10
+ Added documentation for the Worksheet `autofit()` method.
11
+
12
+ Fix failed match for range string in conditional format.
13
+ Strings used in a cell equality must be quoted. In order to
14
+ ensure this there is a check for non-range/non-numeric strings.
15
+ However this test wasn't anchored properly and gave a false
16
+ positive.
17
+
18
+ Fixed an issue where `set_row()` with the default height of 15 was
19
+ ignored if `set_default_row()` was also used.
20
+
21
+ Fixed issue with 0 DPI in PNG images.
22
+
3
23
  2026-03-12 v1.13.0
4
24
  fix sheet name quoting with upstream Perl implementation.
5
25
 
@@ -15,12 +15,12 @@
15
15
 
16
16
  require 'write_xlsx/package/xml_writer_simple'
17
17
  require 'write_xlsx/chart'
18
- require 'write_xlsx/utility'
18
+ require 'write_xlsx/utility/xml_primitives'
19
19
 
20
20
  module Writexlsx
21
21
  class Chart
22
22
  class Area < self
23
- include Writexlsx::Utility
23
+ include Writexlsx::Utility::XmlPrimitives
24
24
 
25
25
  def initialize(subtype)
26
26
  super
@@ -2,13 +2,13 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'write_xlsx/package/xml_writer_simple'
5
- require 'write_xlsx/utility'
6
5
  require 'write_xlsx/chart/caption'
7
6
 
8
7
  module Writexlsx
9
8
  class Chart
10
- class Axis < Caption
11
- include Writexlsx::Utility
9
+ class Axis
10
+ include Writexlsx::Utility::Common
11
+ include Writexlsx::Utility::RichText
12
12
 
13
13
  attr_accessor :defaults
14
14
  attr_accessor :min, :max, :num_format, :position
@@ -19,39 +19,79 @@ module Writexlsx
19
19
  attr_reader :num_format_linked, :num_font, :layout, :interval_unit
20
20
  attr_reader :interval_tick, :major_gridlines, :minor_gridlines, :reverse
21
21
  attr_reader :line, :fill, :text_axis, :label_align
22
+ attr_reader :title
23
+
24
+ def initialize(chart)
25
+ @chart = chart
26
+ @title = Caption.new(chart)
27
+ end
22
28
 
23
29
  #
24
30
  # Convert user defined axis values into axis instance.
25
31
  #
26
- def merge_with_hash(params) # :nodoc:
27
- super
32
+ def apply_options(params) # :nodoc:
28
33
  args = (defaults || {}).merge(params)
29
34
 
35
+ apply_axis_options(args)
36
+ apply_axis_display_options(args)
37
+ apply_axis_format_options(args)
38
+ apply_axis_tick_options(args)
39
+ apply_axis_title_options(args)
40
+ end
41
+
42
+ def apply_axis_options(args)
30
43
  %i[
31
44
  reverse min max minor_unit major_unit minor_unit_type
32
45
  major_unit_type log_base crossing position_axis
33
46
  label_position num_format num_format_linked interval_unit
34
47
  interval_tick line fill label_align
35
48
  ].each { |val| instance_variable_set("@#{val}", args[val]) }
36
- set_major_minor_gridlines(args)
37
49
 
38
- @visible = args[:visible] || 1
50
+ @visible = args[:visible] || 1
51
+ end
52
+
53
+ def apply_axis_display_options(args)
54
+ set_major_minor_gridlines(args)
39
55
  set_display_units(args)
40
56
  set_display_units_visible(args)
41
57
  set_position(args)
42
58
  set_position_axis
43
- set_font_properties(args)
44
- set_axis_name_layout(args)
45
- set_axis_line(args)
46
- set_axis_fill(args)
59
+
47
60
  if ptrue?(args[:text_axis])
48
- chart.date_category = false
61
+ @chart.date_category = false
49
62
  @text_axis = true
50
63
  end
64
+ end
65
+
66
+ def apply_axis_format_options(args)
67
+ @num_font = convert_font_args(args[:num_font])
68
+ @line = @chart.line_properties(args[:line])
69
+ @fill = @chart.fill_properties(args[:fill])
70
+ end
51
71
 
52
- # Set the tick marker types.
53
- @major_tick_mark = get_tick_type(params[:major_tick_mark])
54
- @minor_tick_mark = get_tick_type(params[:minor_tick_mark])
72
+ def apply_axis_tick_options(args)
73
+ @major_tick_mark = get_tick_type(args[:major_tick_mark])
74
+ @minor_tick_mark = get_tick_type(args[:minor_tick_mark])
75
+ end
76
+
77
+ def apply_axis_title_options(args)
78
+ # Set the axis title properties.
79
+ @title.apply_text_options(
80
+ name: args[:name],
81
+ name_formula: args[:name_formula],
82
+ data: args[:data],
83
+ name_font: args[:name_font],
84
+ layout: args[:name_layout]
85
+ )
86
+
87
+ # Set the format properties.
88
+ @title.apply_format_options(
89
+ line: args[:name_line],
90
+ border: args[:name_border],
91
+ fill: args[:name_fill],
92
+ pattern: args[:name_pattern],
93
+ gradient: args[:name_gradient]
94
+ )
55
95
  end
56
96
 
57
97
  #
@@ -171,23 +211,6 @@ module Writexlsx
171
211
  end
172
212
  end
173
213
  end
174
-
175
- def set_font_properties(args)
176
- @num_font = convert_font_args(args[:num_font])
177
- @name_font = convert_font_args(args[:name_font])
178
- end
179
-
180
- def set_axis_name_layout(args)
181
- @layout = chart.layout_properties(args[:name_layout], 1)
182
- end
183
-
184
- def set_axis_line(args)
185
- @line = chart.line_properties(args[:line])
186
- end
187
-
188
- def set_axis_fill(args)
189
- @fill = chart.fill_properties(args[:fill])
190
- end
191
214
  end
192
215
  end
193
216
  end