caxlsx 3.3.0 → 3.4.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 (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +24 -5
  4. data/Rakefile +0 -1
  5. data/lib/axlsx/content_type/abstract_content_type.rb +2 -5
  6. data/lib/axlsx/content_type/content_type.rb +0 -4
  7. data/lib/axlsx/content_type/default.rb +1 -5
  8. data/lib/axlsx/content_type/override.rb +0 -4
  9. data/lib/axlsx/doc_props/app.rb +1 -6
  10. data/lib/axlsx/doc_props/core.rb +1 -6
  11. data/lib/axlsx/drawing/area_chart.rb +3 -6
  12. data/lib/axlsx/drawing/area_series.rb +1 -4
  13. data/lib/axlsx/drawing/ax_data_source.rb +1 -6
  14. data/lib/axlsx/drawing/axes.rb +5 -6
  15. data/lib/axlsx/drawing/axis.rb +7 -12
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +7 -10
  17. data/lib/axlsx/drawing/bar_chart.rb +6 -9
  18. data/lib/axlsx/drawing/bar_series.rb +2 -8
  19. data/lib/axlsx/drawing/bubble_chart.rb +2 -5
  20. data/lib/axlsx/drawing/bubble_series.rb +3 -6
  21. data/lib/axlsx/drawing/cat_axis.rb +2 -7
  22. data/lib/axlsx/drawing/chart.rb +7 -12
  23. data/lib/axlsx/drawing/d_lbls.rb +23 -22
  24. data/lib/axlsx/drawing/drawing.rb +4 -8
  25. data/lib/axlsx/drawing/graphic_frame.rb +0 -3
  26. data/lib/axlsx/drawing/hyperlink.rb +4 -7
  27. data/lib/axlsx/drawing/line_3D_chart.rb +10 -14
  28. data/lib/axlsx/drawing/line_chart.rb +3 -6
  29. data/lib/axlsx/drawing/line_series.rb +1 -4
  30. data/lib/axlsx/drawing/marker.rb +5 -9
  31. data/lib/axlsx/drawing/num_data.rb +4 -9
  32. data/lib/axlsx/drawing/num_data_source.rb +3 -7
  33. data/lib/axlsx/drawing/num_val.rb +2 -5
  34. data/lib/axlsx/drawing/one_cell_anchor.rb +4 -6
  35. data/lib/axlsx/drawing/pic.rb +46 -13
  36. data/lib/axlsx/drawing/picture_locking.rb +3 -6
  37. data/lib/axlsx/drawing/pie_3D_chart.rb +2 -7
  38. data/lib/axlsx/drawing/pie_series.rb +1 -6
  39. data/lib/axlsx/drawing/scaling.rb +2 -5
  40. data/lib/axlsx/drawing/scatter_chart.rb +2 -5
  41. data/lib/axlsx/drawing/scatter_series.rb +2 -5
  42. data/lib/axlsx/drawing/ser_axis.rb +2 -6
  43. data/lib/axlsx/drawing/series.rb +3 -5
  44. data/lib/axlsx/drawing/series_title.rb +0 -2
  45. data/lib/axlsx/drawing/str_data.rb +3 -8
  46. data/lib/axlsx/drawing/str_val.rb +2 -5
  47. data/lib/axlsx/drawing/title.rb +12 -15
  48. data/lib/axlsx/drawing/two_cell_anchor.rb +5 -7
  49. data/lib/axlsx/drawing/val_axis.rb +1 -4
  50. data/lib/axlsx/drawing/view_3D.rb +24 -24
  51. data/lib/axlsx/drawing/vml_drawing.rb +2 -5
  52. data/lib/axlsx/drawing/vml_shape.rb +4 -7
  53. data/lib/axlsx/package.rb +35 -36
  54. data/lib/axlsx/rels/relationship.rb +21 -24
  55. data/lib/axlsx/rels/relationships.rb +3 -6
  56. data/lib/axlsx/stylesheet/border.rb +1 -4
  57. data/lib/axlsx/stylesheet/border_pr.rb +3 -5
  58. data/lib/axlsx/stylesheet/cell_alignment.rb +2 -10
  59. data/lib/axlsx/stylesheet/cell_protection.rb +1 -4
  60. data/lib/axlsx/stylesheet/cell_style.rb +3 -7
  61. data/lib/axlsx/stylesheet/color.rb +6 -5
  62. data/lib/axlsx/stylesheet/dxf.rb +2 -6
  63. data/lib/axlsx/stylesheet/fill.rb +0 -4
  64. data/lib/axlsx/stylesheet/font.rb +7 -6
  65. data/lib/axlsx/stylesheet/gradient_fill.rb +4 -6
  66. data/lib/axlsx/stylesheet/gradient_stop.rb +2 -3
  67. data/lib/axlsx/stylesheet/num_fmt.rb +1 -4
  68. data/lib/axlsx/stylesheet/pattern_fill.rb +3 -5
  69. data/lib/axlsx/stylesheet/styles.rb +53 -45
  70. data/lib/axlsx/stylesheet/table_style.rb +5 -8
  71. data/lib/axlsx/stylesheet/table_style_element.rb +1 -4
  72. data/lib/axlsx/stylesheet/table_styles.rb +3 -7
  73. data/lib/axlsx/stylesheet/xf.rb +3 -6
  74. data/lib/axlsx/util/accessors.rb +2 -4
  75. data/lib/axlsx/util/constants.rb +3 -5
  76. data/lib/axlsx/util/mime_type_utils.rb +13 -0
  77. data/lib/axlsx/util/options_parser.rb +1 -2
  78. data/lib/axlsx/util/serialized_attributes.rb +4 -5
  79. data/lib/axlsx/util/simple_typed_list.rb +18 -17
  80. data/lib/axlsx/util/storage.rb +32 -36
  81. data/lib/axlsx/util/validators.rb +7 -4
  82. data/lib/axlsx/util/zip_command.rb +0 -2
  83. data/lib/axlsx/version.rb +1 -2
  84. data/lib/axlsx/workbook/defined_name.rb +6 -5
  85. data/lib/axlsx/workbook/defined_names.rb +1 -2
  86. data/lib/axlsx/workbook/shared_strings_table.rb +3 -6
  87. data/lib/axlsx/workbook/workbook.rb +96 -91
  88. data/lib/axlsx/workbook/workbook_view.rb +5 -10
  89. data/lib/axlsx/workbook/workbook_views.rb +1 -3
  90. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +9 -8
  91. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +6 -6
  92. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +13 -14
  93. data/lib/axlsx/workbook/worksheet/border_creator.rb +29 -26
  94. data/lib/axlsx/workbook/worksheet/break.rb +2 -5
  95. data/lib/axlsx/workbook/worksheet/cell.rb +46 -26
  96. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +11 -11
  97. data/lib/axlsx/workbook/worksheet/cfvo.rb +2 -2
  98. data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -5
  99. data/lib/axlsx/workbook/worksheet/col.rb +4 -7
  100. data/lib/axlsx/workbook/worksheet/col_breaks.rb +4 -5
  101. data/lib/axlsx/workbook/worksheet/color_scale.rb +10 -12
  102. data/lib/axlsx/workbook/worksheet/cols.rb +6 -6
  103. data/lib/axlsx/workbook/worksheet/comment.rb +4 -5
  104. data/lib/axlsx/workbook/worksheet/comments.rb +6 -10
  105. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +4 -5
  106. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +2 -6
  107. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +2 -4
  108. data/lib/axlsx/workbook/worksheet/data_bar.rb +20 -22
  109. data/lib/axlsx/workbook/worksheet/data_validation.rb +4 -5
  110. data/lib/axlsx/workbook/worksheet/data_validations.rb +2 -5
  111. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -3
  112. data/lib/axlsx/workbook/worksheet/dimension.rb +5 -4
  113. data/lib/axlsx/workbook/worksheet/header_footer.rb +0 -1
  114. data/lib/axlsx/workbook/worksheet/icon_set.rb +2 -3
  115. data/lib/axlsx/workbook/worksheet/merged_cells.rb +8 -8
  116. data/lib/axlsx/workbook/worksheet/outline_pr.rb +0 -1
  117. data/lib/axlsx/workbook/worksheet/page_margins.rb +2 -2
  118. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -3
  119. data/lib/axlsx/workbook/worksheet/page_setup.rb +117 -120
  120. data/lib/axlsx/workbook/worksheet/pane.rb +16 -17
  121. data/lib/axlsx/workbook/worksheet/pivot_table.rb +8 -11
  122. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -11
  123. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +3 -4
  124. data/lib/axlsx/workbook/worksheet/print_options.rb +0 -1
  125. data/lib/axlsx/workbook/worksheet/protected_range.rb +4 -5
  126. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +9 -9
  127. data/lib/axlsx/workbook/worksheet/rich_text.rb +4 -6
  128. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +21 -5
  129. data/lib/axlsx/workbook/worksheet/row.rb +24 -15
  130. data/lib/axlsx/workbook/worksheet/row_breaks.rb +3 -4
  131. data/lib/axlsx/workbook/worksheet/selection.rb +7 -9
  132. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +5 -6
  133. data/lib/axlsx/workbook/worksheet/sheet_data.rb +4 -6
  134. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
  135. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +4 -4
  136. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +12 -13
  137. data/lib/axlsx/workbook/worksheet/sheet_view.rb +35 -42
  138. data/lib/axlsx/workbook/worksheet/table.rb +7 -9
  139. data/lib/axlsx/workbook/worksheet/table_style_info.rb +2 -3
  140. data/lib/axlsx/workbook/worksheet/tables.rb +4 -4
  141. data/lib/axlsx/workbook/worksheet/worksheet.rb +63 -35
  142. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -6
  143. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +3 -2
  144. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +5 -6
  145. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -4
  146. data/lib/axlsx.rb +23 -9
  147. data/lib/caxlsx.rb +0 -1
  148. metadata +3 -3
@@ -1,8 +1,6 @@
1
1
  module Axlsx
2
-
3
2
  # A worksheet hyperlink object. Note that this is not the same as a drawing hyperlink object.
4
3
  class WorksheetHyperlink
5
-
6
4
  include Axlsx::OptionsParser
7
5
  include Axlsx::Accessors
8
6
  include Axlsx::SerializedAttributes
@@ -15,7 +13,7 @@ module Axlsx
15
13
  # @option [String] tooltip The tip to display when the user positions the mouse cursor over this hyperlink
16
14
  # @option [Symbol] target This is :external by default. If you set it to anything else, the location is interpreted to be the current workbook.
17
15
  # @option [String|Cell] ref The location of this hyperlink in the worksheet
18
- def initialize(worksheet, options={})
16
+ def initialize(worksheet, options = {})
19
17
  DataTypeValidator.validate "Hyperlink.worksheet", [Worksheet], worksheet
20
18
  @worksheet = worksheet
21
19
  @target = :external
@@ -27,7 +25,7 @@ module Axlsx
27
25
 
28
26
  serializable_attributes :display, :tooltip, :ref
29
27
 
30
- #Cell location of hyperlink on worksheet.
28
+ # Cell location of hyperlink on worksheet.
31
29
  # @return [String]
32
30
  attr_reader :ref
33
31
 
@@ -51,13 +49,14 @@ module Axlsx
51
49
  # @return [Relationship]
52
50
  def relationship
53
51
  return unless @target == :external
52
+
54
53
  Relationship.new(self, HYPERLINK_R, location, :target_mode => :External)
55
54
  end
56
55
 
57
56
  # Seralize the object
58
57
  # @param [String] str
59
58
  # @return [String]
60
- def to_xml_string(str='')
59
+ def to_xml_string(str = '')
61
60
  str << '<hyperlink '
62
61
  serialized_attributes str, location_or_id
63
62
  str << '/>'
@@ -68,7 +67,7 @@ module Axlsx
68
67
  # r:id should only be specified for external targets.
69
68
  # @return [Hash]
70
69
  def location_or_id
71
- @target == :external ? { :"r:id" => relationship.Id } : { :location => Axlsx::coder.encode(location) }
70
+ @target == :external ? { :"r:id" => relationship.Id } : { :location => Axlsx::coder.encode(location) }
72
71
  end
73
72
  end
74
73
  end
@@ -1,8 +1,6 @@
1
1
  module Axlsx
2
-
3
- #A collection of hyperlink objects for a worksheet
2
+ # A collection of hyperlink objects for a worksheet
4
3
  class WorksheetHyperlinks < SimpleTypedList
5
-
6
4
  # Creates a new Hyperlinks collection
7
5
  # @param [Worksheet] worksheet the worksheet that owns these hyperlinks
8
6
  def initialize(worksheet)
@@ -23,13 +21,15 @@ module Axlsx
23
21
  # @return Array
24
22
  def relationships
25
23
  return [] if empty?
24
+
26
25
  map { |hyperlink| hyperlink.relationship }
27
26
  end
28
27
 
29
28
  # seralize the collection of hyperlinks
30
29
  # @return [String]
31
- def to_xml_string(str='')
30
+ def to_xml_string(str = '')
32
31
  return if empty?
32
+
33
33
  str << '<hyperlinks>'
34
34
  each { |hyperlink| hyperlink.to_xml_string(str) }
35
35
  str << '</hyperlinks>'
data/lib/axlsx.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  require 'htmlentities'
3
2
  require 'axlsx/version.rb'
4
3
  require 'marcel'
@@ -22,11 +21,11 @@ require 'axlsx/rels/relationships.rb'
22
21
  require 'axlsx/drawing/drawing.rb'
23
22
  require 'axlsx/workbook/workbook.rb'
24
23
  require 'axlsx/package.rb'
25
- #required gems
24
+ # required gems
26
25
  require 'nokogiri'
27
26
  require 'zip'
28
27
 
29
- #core dependencies
28
+ # core dependencies
30
29
  require 'bigdecimal'
31
30
  require 'set'
32
31
  require 'time'
@@ -55,7 +54,7 @@ module Axlsx
55
54
  end
56
55
 
57
56
  # determines the cell range for the items provided
58
- def self.cell_range(cells, absolute=true)
57
+ def self.cell_range(cells, absolute = true)
59
58
  return "" unless cells.first.is_a? Cell
60
59
 
61
60
  first_cell, last_cell = cells.minmax_by(&:pos)
@@ -76,7 +75,7 @@ module Axlsx
76
75
  cells.sort_by(&:pos)
77
76
  end
78
77
 
79
- #global reference html entity encoding
78
+ # global reference html entity encoding
80
79
  # @return [HtmlEntities]
81
80
  def self.coder
82
81
  @@coder ||= ::HTMLEntities.new
@@ -89,7 +88,7 @@ module Axlsx
89
88
  letters_str = name[/[A-Z]+/]
90
89
 
91
90
  # capitalization?!?
92
- v = letters_str.reverse.chars.reduce({:base=>1, :i=>0}) do |val, c|
91
+ v = letters_str.reverse.chars.reduce({ :base => 1, :i => 0 }) do |val, c|
93
92
  val[:i] += ((c.bytes.first - 64) * val[:base])
94
93
 
95
94
  val[:base] *= 26
@@ -124,7 +123,7 @@ module Axlsx
124
123
  # @example Relative Cell Reference
125
124
  # ws.rows.first.cells.first.r #=> "A1"
126
125
  def self.cell_r(c_index, r_index)
127
- col_ref(c_index) << (r_index+1).to_s
126
+ col_ref(c_index) << (r_index + 1).to_s
128
127
  end
129
128
 
130
129
  # Creates an array of individual cell references based on an excel reference range.
@@ -144,10 +143,10 @@ module Axlsx
144
143
  # performs the increadible feat of changing snake_case to CamelCase
145
144
  # @param [String] s The snake case string to camelize
146
145
  # @return [String]
147
- def self.camel(s="", all_caps = true)
146
+ def self.camel(s = "", all_caps = true)
148
147
  s = s.to_s
149
148
  s = s.capitalize if all_caps
150
- s.gsub(/_(.)/){ $1.upcase }
149
+ s.gsub(/_(.)/) { $1.upcase }
151
150
  end
152
151
 
153
152
  # returns the provided string with all invalid control charaters
@@ -201,4 +200,19 @@ module Axlsx
201
200
  def self.trust_input=(trust_me)
202
201
  @trust_input = trust_me
203
202
  end
203
+
204
+ # Whether to treat values starting with an equals sign as formulas or as literal strings.
205
+ # Allowing user-generated data to be interpreted as formulas is a security risk.
206
+ # See https://www.owasp.org/index.php/CSV_Injection for details.
207
+ # @return [Boolean]
208
+ def self.escape_formulas
209
+ !defined?(@escape_formulas) || @escape_formulas.nil? ? false : @escape_formulas
210
+ end
211
+
212
+ # Sets whether to treat values starting with an equals sign as formulas or as literal strings.
213
+ # @param [Boolean] value The value to set.
214
+ def self.escape_formulas=(value)
215
+ Axlsx.validate_boolean(value)
216
+ @escape_formulas = value
217
+ end
204
218
  end
data/lib/caxlsx.rb CHANGED
@@ -1,2 +1 @@
1
- # encoding: UTF-8
2
1
  require 'axlsx.rb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caxlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Randy Morgan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-10-21 00:00:00.000000000 Z
12
+ date: 2023-04-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -344,7 +344,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
344
344
  - !ruby/object:Gem::Version
345
345
  version: '0'
346
346
  requirements: []
347
- rubygems_version: 3.0.9
347
+ rubygems_version: 3.2.3
348
348
  signing_key:
349
349
  specification_version: 4
350
350
  summary: Excel OOXML (xlsx) with charts, styles, images and autowidth columns.