caxlsx 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +24 -5
- data/Rakefile +0 -1
- data/lib/axlsx/content_type/abstract_content_type.rb +2 -5
- data/lib/axlsx/content_type/content_type.rb +0 -4
- data/lib/axlsx/content_type/default.rb +1 -5
- data/lib/axlsx/content_type/override.rb +0 -4
- data/lib/axlsx/doc_props/app.rb +1 -6
- data/lib/axlsx/doc_props/core.rb +1 -6
- data/lib/axlsx/drawing/area_chart.rb +3 -6
- data/lib/axlsx/drawing/area_series.rb +1 -4
- data/lib/axlsx/drawing/ax_data_source.rb +1 -6
- data/lib/axlsx/drawing/axes.rb +5 -6
- data/lib/axlsx/drawing/axis.rb +7 -12
- data/lib/axlsx/drawing/bar_3D_chart.rb +7 -10
- data/lib/axlsx/drawing/bar_chart.rb +6 -9
- data/lib/axlsx/drawing/bar_series.rb +2 -8
- data/lib/axlsx/drawing/bubble_chart.rb +2 -5
- data/lib/axlsx/drawing/bubble_series.rb +3 -6
- data/lib/axlsx/drawing/cat_axis.rb +2 -7
- data/lib/axlsx/drawing/chart.rb +7 -12
- data/lib/axlsx/drawing/d_lbls.rb +23 -22
- data/lib/axlsx/drawing/drawing.rb +4 -8
- data/lib/axlsx/drawing/graphic_frame.rb +0 -3
- data/lib/axlsx/drawing/hyperlink.rb +4 -7
- data/lib/axlsx/drawing/line_3D_chart.rb +10 -14
- data/lib/axlsx/drawing/line_chart.rb +3 -6
- data/lib/axlsx/drawing/line_series.rb +1 -4
- data/lib/axlsx/drawing/marker.rb +5 -9
- data/lib/axlsx/drawing/num_data.rb +4 -9
- data/lib/axlsx/drawing/num_data_source.rb +3 -7
- data/lib/axlsx/drawing/num_val.rb +2 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +4 -6
- data/lib/axlsx/drawing/pic.rb +46 -13
- data/lib/axlsx/drawing/picture_locking.rb +3 -6
- data/lib/axlsx/drawing/pie_3D_chart.rb +2 -7
- data/lib/axlsx/drawing/pie_series.rb +1 -6
- data/lib/axlsx/drawing/scaling.rb +2 -5
- data/lib/axlsx/drawing/scatter_chart.rb +2 -5
- data/lib/axlsx/drawing/scatter_series.rb +2 -5
- data/lib/axlsx/drawing/ser_axis.rb +2 -6
- data/lib/axlsx/drawing/series.rb +3 -5
- data/lib/axlsx/drawing/series_title.rb +0 -2
- data/lib/axlsx/drawing/str_data.rb +3 -8
- data/lib/axlsx/drawing/str_val.rb +2 -5
- data/lib/axlsx/drawing/title.rb +12 -15
- data/lib/axlsx/drawing/two_cell_anchor.rb +5 -7
- data/lib/axlsx/drawing/val_axis.rb +1 -4
- data/lib/axlsx/drawing/view_3D.rb +24 -24
- data/lib/axlsx/drawing/vml_drawing.rb +2 -5
- data/lib/axlsx/drawing/vml_shape.rb +4 -7
- data/lib/axlsx/package.rb +35 -36
- data/lib/axlsx/rels/relationship.rb +21 -24
- data/lib/axlsx/rels/relationships.rb +3 -6
- data/lib/axlsx/stylesheet/border.rb +1 -4
- data/lib/axlsx/stylesheet/border_pr.rb +3 -5
- data/lib/axlsx/stylesheet/cell_alignment.rb +2 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +1 -4
- data/lib/axlsx/stylesheet/cell_style.rb +3 -7
- data/lib/axlsx/stylesheet/color.rb +6 -5
- data/lib/axlsx/stylesheet/dxf.rb +2 -6
- data/lib/axlsx/stylesheet/fill.rb +0 -4
- data/lib/axlsx/stylesheet/font.rb +7 -6
- data/lib/axlsx/stylesheet/gradient_fill.rb +4 -6
- data/lib/axlsx/stylesheet/gradient_stop.rb +2 -3
- data/lib/axlsx/stylesheet/num_fmt.rb +1 -4
- data/lib/axlsx/stylesheet/pattern_fill.rb +3 -5
- data/lib/axlsx/stylesheet/styles.rb +53 -45
- data/lib/axlsx/stylesheet/table_style.rb +5 -8
- data/lib/axlsx/stylesheet/table_style_element.rb +1 -4
- data/lib/axlsx/stylesheet/table_styles.rb +3 -7
- data/lib/axlsx/stylesheet/xf.rb +3 -6
- data/lib/axlsx/util/accessors.rb +2 -4
- data/lib/axlsx/util/constants.rb +3 -5
- data/lib/axlsx/util/mime_type_utils.rb +13 -0
- data/lib/axlsx/util/options_parser.rb +1 -2
- data/lib/axlsx/util/serialized_attributes.rb +4 -5
- data/lib/axlsx/util/simple_typed_list.rb +18 -17
- data/lib/axlsx/util/storage.rb +32 -36
- data/lib/axlsx/util/validators.rb +7 -4
- data/lib/axlsx/util/zip_command.rb +0 -2
- data/lib/axlsx/version.rb +1 -2
- data/lib/axlsx/workbook/defined_name.rb +6 -5
- data/lib/axlsx/workbook/defined_names.rb +1 -2
- data/lib/axlsx/workbook/shared_strings_table.rb +3 -6
- data/lib/axlsx/workbook/workbook.rb +96 -91
- data/lib/axlsx/workbook/workbook_view.rb +5 -10
- data/lib/axlsx/workbook/workbook_views.rb +1 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +9 -8
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +6 -6
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +13 -14
- data/lib/axlsx/workbook/worksheet/border_creator.rb +29 -26
- data/lib/axlsx/workbook/worksheet/break.rb +2 -5
- data/lib/axlsx/workbook/worksheet/cell.rb +46 -26
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +11 -11
- data/lib/axlsx/workbook/worksheet/cfvo.rb +2 -2
- data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -5
- data/lib/axlsx/workbook/worksheet/col.rb +4 -7
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +4 -5
- data/lib/axlsx/workbook/worksheet/color_scale.rb +10 -12
- data/lib/axlsx/workbook/worksheet/cols.rb +6 -6
- data/lib/axlsx/workbook/worksheet/comment.rb +4 -5
- data/lib/axlsx/workbook/worksheet/comments.rb +6 -10
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +4 -5
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +2 -6
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +2 -4
- data/lib/axlsx/workbook/worksheet/data_bar.rb +20 -22
- data/lib/axlsx/workbook/worksheet/data_validation.rb +4 -5
- data/lib/axlsx/workbook/worksheet/data_validations.rb +2 -5
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -3
- data/lib/axlsx/workbook/worksheet/dimension.rb +5 -4
- data/lib/axlsx/workbook/worksheet/header_footer.rb +0 -1
- data/lib/axlsx/workbook/worksheet/icon_set.rb +2 -3
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +8 -8
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +0 -1
- data/lib/axlsx/workbook/worksheet/page_margins.rb +2 -2
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -3
- data/lib/axlsx/workbook/worksheet/page_setup.rb +117 -120
- data/lib/axlsx/workbook/worksheet/pane.rb +16 -17
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +8 -11
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -11
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +3 -4
- data/lib/axlsx/workbook/worksheet/print_options.rb +0 -1
- data/lib/axlsx/workbook/worksheet/protected_range.rb +4 -5
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +9 -9
- data/lib/axlsx/workbook/worksheet/rich_text.rb +4 -6
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +21 -5
- data/lib/axlsx/workbook/worksheet/row.rb +24 -15
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +3 -4
- data/lib/axlsx/workbook/worksheet/selection.rb +7 -9
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +5 -6
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +4 -6
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +4 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +12 -13
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +35 -42
- data/lib/axlsx/workbook/worksheet/table.rb +7 -9
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +2 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +4 -4
- data/lib/axlsx/workbook/worksheet/worksheet.rb +63 -35
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -6
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +3 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +5 -6
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -4
- data/lib/axlsx.rb +23 -9
- data/lib/caxlsx.rb +0 -1
- 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 ?
|
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
|
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
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.
|
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:
|
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.
|
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.
|