caxlsx 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
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.