write_xlsx 1.12.3 → 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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +22 -0
  3. data/Changes +23 -0
  4. data/README.md +1 -1
  5. data/lib/write_xlsx/chart/area.rb +2 -2
  6. data/lib/write_xlsx/chart/axis.rb +55 -32
  7. data/lib/write_xlsx/chart/axis_writer.rb +528 -0
  8. data/lib/write_xlsx/chart/bar.rb +2 -2
  9. data/lib/write_xlsx/chart/caption.rb +16 -9
  10. data/lib/write_xlsx/chart/chart_area.rb +121 -0
  11. data/lib/write_xlsx/chart/column.rb +2 -2
  12. data/lib/write_xlsx/chart/d_pt_point_writer.rb +14 -0
  13. data/lib/write_xlsx/chart/doughnut.rb +0 -3
  14. data/lib/write_xlsx/chart/formatting_writer.rb +652 -0
  15. data/lib/write_xlsx/chart/initialization.rb +100 -0
  16. data/lib/write_xlsx/chart/line.rb +4 -3
  17. data/lib/write_xlsx/chart/pie.rb +6 -2
  18. data/lib/write_xlsx/chart/radar.rb +2 -2
  19. data/lib/write_xlsx/chart/scatter.rb +4 -3
  20. data/lib/write_xlsx/chart/series.rb +35 -15
  21. data/lib/write_xlsx/chart/series_data.rb +132 -0
  22. data/lib/write_xlsx/chart/series_writer.rb +318 -0
  23. data/lib/write_xlsx/chart/settings.rb +226 -0
  24. data/lib/write_xlsx/chart/stock.rb +2 -2
  25. data/lib/write_xlsx/chart/table.rb +50 -0
  26. data/lib/write_xlsx/chart/xml_writer.rb +305 -0
  27. data/lib/write_xlsx/chart.rb +286 -2477
  28. data/lib/write_xlsx/chartsheet.rb +35 -83
  29. data/lib/write_xlsx/constants.rb +11 -0
  30. data/lib/write_xlsx/drawing.rb +5 -3
  31. data/lib/write_xlsx/format/alignment_state.rb +39 -0
  32. data/lib/write_xlsx/format/alignment_style.rb +92 -0
  33. data/lib/write_xlsx/format/border_state.rb +47 -0
  34. data/lib/write_xlsx/format/border_style.rb +116 -0
  35. data/lib/write_xlsx/format/fill_state.rb +26 -0
  36. data/lib/write_xlsx/format/fill_style.rb +52 -0
  37. data/lib/write_xlsx/format/font_state.rb +74 -0
  38. data/lib/write_xlsx/format/font_style.rb +172 -0
  39. data/lib/write_xlsx/format/format_state.rb +65 -0
  40. data/lib/write_xlsx/format/number_format_state.rb +20 -0
  41. data/lib/write_xlsx/format/number_format_style.rb +28 -0
  42. data/lib/write_xlsx/format/protection_state.rb +20 -0
  43. data/lib/write_xlsx/format/protection_style.rb +28 -0
  44. data/lib/write_xlsx/format.rb +1093 -426
  45. data/lib/write_xlsx/formats.rb +0 -2
  46. data/lib/write_xlsx/image_property.rb +4 -1
  47. data/lib/write_xlsx/inserted_chart.rb +1 -1
  48. data/lib/write_xlsx/object_positioning.rb +203 -0
  49. data/lib/write_xlsx/package/app.rb +3 -3
  50. data/lib/write_xlsx/package/button.rb +6 -2
  51. data/lib/write_xlsx/package/comments.rb +11 -3
  52. data/lib/write_xlsx/package/conditional_format.rb +7 -3
  53. data/lib/write_xlsx/package/content_types.rb +2 -2
  54. data/lib/write_xlsx/package/core.rb +2 -2
  55. data/lib/write_xlsx/package/custom.rb +3 -2
  56. data/lib/write_xlsx/package/metadata.rb +2 -2
  57. data/lib/write_xlsx/package/packager.rb +0 -3
  58. data/lib/write_xlsx/package/relationships.rb +2 -2
  59. data/lib/write_xlsx/package/rich_value.rb +4 -2
  60. data/lib/write_xlsx/package/rich_value_rel.rb +2 -2
  61. data/lib/write_xlsx/package/rich_value_structure.rb +2 -2
  62. data/lib/write_xlsx/package/rich_value_types.rb +3 -3
  63. data/lib/write_xlsx/package/shared_strings.rb +2 -2
  64. data/lib/write_xlsx/package/styles.rb +13 -9
  65. data/lib/write_xlsx/package/table.rb +8 -2
  66. data/lib/write_xlsx/package/theme.rb +0 -3
  67. data/lib/write_xlsx/package/vml.rb +2 -2
  68. data/lib/write_xlsx/page_setup.rb +192 -0
  69. data/lib/write_xlsx/shape.rb +97 -100
  70. data/lib/write_xlsx/sheets.rb +9 -4
  71. data/lib/write_xlsx/sparkline.rb +2 -2
  72. data/lib/write_xlsx/utility/cell_reference.rb +124 -0
  73. data/lib/write_xlsx/utility/chart_formatting.rb +262 -0
  74. data/lib/write_xlsx/utility/common.rb +44 -0
  75. data/lib/write_xlsx/utility/date_time.rb +113 -0
  76. data/lib/write_xlsx/utility/dimensions.rb +40 -0
  77. data/lib/write_xlsx/utility/drawing.rb +136 -0
  78. data/lib/write_xlsx/utility/rich_text.rb +184 -0
  79. data/lib/write_xlsx/utility/sheetname_quoting.rb +73 -0
  80. data/lib/write_xlsx/utility/string_width.rb +45 -0
  81. data/lib/write_xlsx/utility/url.rb +27 -0
  82. data/lib/write_xlsx/utility/xml_primitives.rb +32 -0
  83. data/lib/write_xlsx/version.rb +1 -1
  84. data/lib/write_xlsx/workbook/chart_data.rb +188 -0
  85. data/lib/write_xlsx/workbook/format_preparation.rb +199 -0
  86. data/lib/write_xlsx/workbook/initialization.rb +223 -0
  87. data/lib/write_xlsx/workbook/package_preparation.rb +231 -0
  88. data/lib/write_xlsx/workbook/workbook_writer.rb +164 -0
  89. data/lib/write_xlsx/workbook.rb +143 -981
  90. data/lib/write_xlsx/worksheet/asset_manager.rb +60 -0
  91. data/lib/write_xlsx/worksheet/autofilter.rb +390 -0
  92. data/lib/write_xlsx/worksheet/cell_data.rb +13 -6
  93. data/lib/write_xlsx/worksheet/cell_data_manager.rb +47 -0
  94. data/lib/write_xlsx/worksheet/cell_data_store.rb +61 -0
  95. data/lib/write_xlsx/worksheet/columns.rb +204 -0
  96. data/lib/write_xlsx/worksheet/comments_support.rb +61 -0
  97. data/lib/write_xlsx/worksheet/conditional_formats.rb +30 -0
  98. data/lib/write_xlsx/worksheet/data_validation.rb +9 -1
  99. data/lib/write_xlsx/worksheet/data_writing.rb +1017 -0
  100. data/lib/write_xlsx/worksheet/drawing_methods.rb +308 -0
  101. data/lib/write_xlsx/worksheet/drawing_preparation.rb +290 -0
  102. data/lib/write_xlsx/worksheet/drawing_relations.rb +76 -0
  103. data/lib/write_xlsx/worksheet/drawing_xml_writer.rb +50 -0
  104. data/lib/write_xlsx/worksheet/formatting.rb +418 -0
  105. data/lib/write_xlsx/worksheet/hyperlink.rb +9 -1
  106. data/lib/write_xlsx/worksheet/initialization.rb +146 -0
  107. data/lib/write_xlsx/worksheet/panes.rb +64 -0
  108. data/lib/write_xlsx/worksheet/print_options.rb +72 -0
  109. data/lib/write_xlsx/worksheet/protection.rb +65 -0
  110. data/lib/write_xlsx/worksheet/rich_text_helpers.rb +78 -0
  111. data/lib/write_xlsx/worksheet/row_col_sizing.rb +69 -0
  112. data/lib/write_xlsx/worksheet/rows.rb +84 -0
  113. data/lib/write_xlsx/worksheet/selection.rb +41 -0
  114. data/lib/write_xlsx/worksheet/xml_writer.rb +1246 -0
  115. data/lib/write_xlsx/worksheet.rb +376 -4530
  116. metadata +66 -4
  117. data/lib/write_xlsx/utility.rb +0 -986
  118. data/lib/write_xlsx/worksheet/page_setup.rb +0 -192
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73aab5eb08b0bd985cad2f77620ef0b9c44a383d0e98a598428c1385e544963a
4
- data.tar.gz: 20bdb3eaab4895e2378659137e1eb84b62daee5563b2c7bd350e421a77dd1ff8
3
+ metadata.gz: e475548e954baadcd73499953c8a6a01a3e668ec2e023d3a98f382e633b0b460
4
+ data.tar.gz: 57f95edde86df1b2a6d9d8bae225f0ad085a3d3f1f93e093c56d8f0be21897d4
5
5
  SHA512:
6
- metadata.gz: 21519073cbab6a3b3397afe389e055334b1b0f415a5d4c2e7196e13b6d31e98c47894dd59fc9646c4eb884a9882fb2ad05d4d50a97222a9a2f9a383197e0d75a
7
- data.tar.gz: aec12c29800ed6c0054bb1c705a3ef40a615ef975ef0911978b56dfe051a3f44b4e8644186d9c2f13458f455cf3a25769a8651bd631ab121094fd4edcb0e0a86
6
+ metadata.gz: 4565dea924eb24aeae0297e3bc8c418815618ffaa24c4f92b8ecb642bf5b18d1dc47731caf944092caeb9974c6f659a919a744b46a5b674933816d8f496ec096
7
+ data.tar.gz: a5b5094db8ce823dfb0fa773bf9f5e0c69a6fcc767cbbf2b1817ab5bc4735db9b02ebe5ab0d6c629cf3dc51cc29a8cd92735c4a03e595744974892334bf89f1d
data/.rubocop.yml CHANGED
@@ -46,6 +46,13 @@ Lint/DuplicateBranch:
46
46
  IgnoreLiteralBranches: true
47
47
  Exclude:
48
48
  - 'lib/write_xlsx/worksheet.rb'
49
+ - 'lib/write_xlsx/worksheet/data_writing.rb'
50
+
51
+ Lint/DuplicateMethods:
52
+ Enabled: false
53
+
54
+ Lint/FloatComparison:
55
+ Enabled: false
49
56
 
50
57
  Lint/UnderscorePrefixedVariableName:
51
58
  Enabled: false
@@ -94,6 +101,9 @@ Naming/MethodParameterName:
94
101
  Naming/PredicateMethod:
95
102
  Enabled: false
96
103
 
104
+ Naming/PredicatePrefix:
105
+ Enabled: false
106
+
97
107
  Naming/VariableNumber:
98
108
  Enabled: false
99
109
 
@@ -129,9 +139,18 @@ Style/NumericLiterals:
129
139
  Style/OptionalBooleanParameter:
130
140
  Enabled: false
131
141
 
142
+ Style/ParallelAssignment:
143
+ Enabled: false
144
+
145
+ Style/PreferredHashMethods:
146
+ Enabled: false
147
+
132
148
  Style/RaiseArgs:
133
149
  Enabled: false
134
150
 
151
+ Style/RedundantSelf:
152
+ Enabled: false
153
+
135
154
  Style/SlicingWithRange:
136
155
  Enabled: false
137
156
 
@@ -141,3 +160,6 @@ Style/StringLiterals:
141
160
  Style/StringLiteralsInInterpolation:
142
161
  Enabled: true
143
162
  EnforcedStyle: double_quotes
163
+
164
+ Styles/TrivialAccessors:
165
+ Enabled: false
data/Changes CHANGED
@@ -1,5 +1,28 @@
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
+
23
+ 2026-03-12 v1.13.0
24
+ fix sheet name quoting with upstream Perl implementation.
25
+
3
26
  2025-10-28 v1.12.3
4
27
  fix compatibility with rubyzip 3.x
5
28
 
data/README.md CHANGED
@@ -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(nakamrua.hideo@gmail.com)
88
- Copyright (c) 2012-2024 Hideo NAKAMURA.
88
+ Copyright (c) 2012-2026 Hideo NAKAMURA.
89
89
 
90
90
  See LICENSE.txt for further details.
91
91
 
@@ -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