caxlsx 3.4.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -1
  3. data/README.md +9 -11
  4. data/Rakefile +7 -5
  5. data/examples/generate.rb +3 -1
  6. data/lib/axlsx/content_type/abstract_content_type.rb +12 -4
  7. data/lib/axlsx/content_type/content_type.rb +8 -6
  8. data/lib/axlsx/content_type/default.rb +7 -2
  9. data/lib/axlsx/content_type/override.rb +7 -2
  10. data/lib/axlsx/doc_props/app.rb +95 -26
  11. data/lib/axlsx/doc_props/core.rb +8 -6
  12. data/lib/axlsx/drawing/area_chart.rb +10 -8
  13. data/lib/axlsx/drawing/area_series.rb +20 -12
  14. data/lib/axlsx/drawing/ax_data_source.rb +2 -0
  15. data/lib/axlsx/drawing/axes.rb +6 -4
  16. data/lib/axlsx/drawing/axis.rb +42 -22
  17. data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
  18. data/lib/axlsx/drawing/bar_chart.rb +13 -11
  19. data/lib/axlsx/drawing/bar_series.rb +20 -9
  20. data/lib/axlsx/drawing/bubble_chart.rb +6 -4
  21. data/lib/axlsx/drawing/bubble_series.rb +8 -6
  22. data/lib/axlsx/drawing/cat_axis.rb +29 -12
  23. data/lib/axlsx/drawing/chart.rb +46 -20
  24. data/lib/axlsx/drawing/d_lbls.rb +10 -8
  25. data/lib/axlsx/drawing/drawing.rb +59 -56
  26. data/lib/axlsx/drawing/graphic_frame.rb +6 -4
  27. data/lib/axlsx/drawing/hyperlink.rb +19 -8
  28. data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
  29. data/lib/axlsx/drawing/line_chart.rb +10 -8
  30. data/lib/axlsx/drawing/line_series.rb +20 -12
  31. data/lib/axlsx/drawing/marker.rb +24 -7
  32. data/lib/axlsx/drawing/num_data.rb +9 -7
  33. data/lib/axlsx/drawing/num_data_source.rb +9 -7
  34. data/lib/axlsx/drawing/num_val.rb +7 -5
  35. data/lib/axlsx/drawing/one_cell_anchor.rb +13 -5
  36. data/lib/axlsx/drawing/pic.rb +26 -15
  37. data/lib/axlsx/drawing/picture_locking.rb +3 -1
  38. data/lib/axlsx/drawing/pie_3D_chart.rb +6 -4
  39. data/lib/axlsx/drawing/pie_chart.rb +36 -0
  40. data/lib/axlsx/drawing/pie_series.rb +23 -9
  41. data/lib/axlsx/drawing/scaling.rb +25 -9
  42. data/lib/axlsx/drawing/scatter_chart.rb +7 -5
  43. data/lib/axlsx/drawing/scatter_series.rb +14 -12
  44. data/lib/axlsx/drawing/ser_axis.rb +13 -5
  45. data/lib/axlsx/drawing/series.rb +13 -5
  46. data/lib/axlsx/drawing/series_title.rb +6 -4
  47. data/lib/axlsx/drawing/str_data.rb +7 -5
  48. data/lib/axlsx/drawing/str_val.rb +6 -4
  49. data/lib/axlsx/drawing/title.rb +13 -14
  50. data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
  51. data/lib/axlsx/drawing/val_axis.rb +4 -2
  52. data/lib/axlsx/drawing/view_3D.rb +16 -8
  53. data/lib/axlsx/drawing/vml_drawing.rb +18 -16
  54. data/lib/axlsx/drawing/vml_shape.rb +24 -22
  55. data/lib/axlsx/package.rb +73 -67
  56. data/lib/axlsx/rels/relationship.rb +21 -6
  57. data/lib/axlsx/rels/relationships.rb +6 -4
  58. data/lib/axlsx/stylesheet/border.rb +15 -4
  59. data/lib/axlsx/stylesheet/border_pr.rb +19 -6
  60. data/lib/axlsx/stylesheet/cell_alignment.rb +41 -10
  61. data/lib/axlsx/stylesheet/cell_protection.rb +12 -3
  62. data/lib/axlsx/stylesheet/cell_style.rb +33 -8
  63. data/lib/axlsx/stylesheet/color.rb +15 -7
  64. data/lib/axlsx/stylesheet/dxf.rb +34 -9
  65. data/lib/axlsx/stylesheet/fill.rb +7 -2
  66. data/lib/axlsx/stylesheet/font.rb +65 -17
  67. data/lib/axlsx/stylesheet/gradient_fill.rb +12 -4
  68. data/lib/axlsx/stylesheet/gradient_stop.rb +14 -5
  69. data/lib/axlsx/stylesheet/num_fmt.rb +14 -10
  70. data/lib/axlsx/stylesheet/pattern_fill.rb +18 -5
  71. data/lib/axlsx/stylesheet/styles.rb +124 -82
  72. data/lib/axlsx/stylesheet/table_style.rb +19 -6
  73. data/lib/axlsx/stylesheet/table_style_element.rb +15 -4
  74. data/lib/axlsx/stylesheet/table_styles.rb +14 -5
  75. data/lib/axlsx/stylesheet/xf.rb +73 -18
  76. data/lib/axlsx/util/accessors.rb +10 -6
  77. data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
  78. data/lib/axlsx/util/constants.rb +117 -104
  79. data/lib/axlsx/util/mime_type_utils.rb +3 -5
  80. data/lib/axlsx/util/options_parser.rb +3 -1
  81. data/lib/axlsx/util/serialized_attributes.rb +42 -17
  82. data/lib/axlsx/util/simple_typed_list.rb +47 -47
  83. data/lib/axlsx/util/storage.rb +11 -10
  84. data/lib/axlsx/util/validators.rb +101 -41
  85. data/lib/axlsx/util/zip_command.rb +10 -10
  86. data/lib/axlsx/version.rb +3 -1
  87. data/lib/axlsx/workbook/defined_name.rb +6 -4
  88. data/lib/axlsx/workbook/defined_names.rb +4 -2
  89. data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
  90. data/lib/axlsx/workbook/workbook.rb +94 -79
  91. data/lib/axlsx/workbook/workbook_view.rb +3 -1
  92. data/lib/axlsx/workbook/workbook_views.rb +4 -2
  93. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
  94. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +11 -5
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
  96. data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
  97. data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
  98. data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
  99. data/lib/axlsx/workbook/worksheet/break.rb +3 -1
  100. data/lib/axlsx/workbook/worksheet/cell.rb +83 -64
  101. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
  102. data/lib/axlsx/workbook/worksheet/cfvo.rb +11 -3
  103. data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
  104. data/lib/axlsx/workbook/worksheet/col.rb +5 -3
  105. data/lib/axlsx/workbook/worksheet/col_breaks.rb +6 -4
  106. data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
  107. data/lib/axlsx/workbook/worksheet/cols.rb +4 -2
  108. data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
  109. data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +16 -5
  111. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +73 -16
  112. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +4 -2
  113. data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
  114. data/lib/axlsx/workbook/worksheet/data_validation.rb +69 -28
  115. data/lib/axlsx/workbook/worksheet/data_validations.rb +4 -2
  116. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
  117. data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
  118. data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
  119. data/lib/axlsx/workbook/worksheet/icon_set.rb +38 -9
  120. data/lib/axlsx/workbook/worksheet/merged_cells.rb +6 -6
  121. data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
  122. data/lib/axlsx/workbook/worksheet/page_margins.rb +39 -11
  123. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +7 -4
  124. data/lib/axlsx/workbook/worksheet/page_setup.rb +34 -9
  125. data/lib/axlsx/workbook/worksheet/pane.rb +17 -9
  126. data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
  127. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
  128. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +3 -1
  129. data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
  130. data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
  131. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +6 -4
  132. data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
  133. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +46 -24
  134. data/lib/axlsx/workbook/worksheet/row.rb +11 -9
  135. data/lib/axlsx/workbook/worksheet/row_breaks.rb +7 -5
  136. data/lib/axlsx/workbook/worksheet/selection.rb +15 -7
  137. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
  138. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  139. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
  140. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
  141. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +11 -9
  142. data/lib/axlsx/workbook/worksheet/sheet_view.rb +38 -15
  143. data/lib/axlsx/workbook/worksheet/table.rb +9 -7
  144. data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
  145. data/lib/axlsx/workbook/worksheet/tables.rb +4 -2
  146. data/lib/axlsx/workbook/worksheet/worksheet.rb +56 -39
  147. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
  148. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
  149. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +7 -5
  150. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +5 -3
  151. data/lib/axlsx.rb +56 -42
  152. data/lib/caxlsx.rb +3 -1
  153. metadata +39 -71
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The Xf class defines a formatting record for use in Styles. The recommended way to manage styles for your workbook is with Styles#add_style
3
5
  # @see Styles#add_style
@@ -93,51 +95,104 @@ module Axlsx
93
95
  attr_reader :applyProtection
94
96
 
95
97
  # @see Xf#alignment
96
- def alignment=(v) DataTypeValidator.validate "Xf.alignment", CellAlignment, v; @alignment = v end
98
+ def alignment=(v)
99
+ DataTypeValidator.validate "Xf.alignment", CellAlignment, v
100
+ @alignment = v
101
+ end
97
102
 
98
103
  # @see protection
99
- def protection=(v) DataTypeValidator.validate "Xf.protection", CellProtection, v; @protection = v end
104
+ def protection=(v)
105
+ DataTypeValidator.validate "Xf.protection", CellProtection, v
106
+ @protection = v
107
+ end
100
108
 
101
109
  # @see numFmtId
102
- def numFmtId=(v) Axlsx::validate_unsigned_int v; @numFmtId = v end
110
+ def numFmtId=(v)
111
+ Axlsx.validate_unsigned_int v
112
+ @numFmtId = v
113
+ end
103
114
 
104
115
  # @see fontId
105
- def fontId=(v) Axlsx::validate_unsigned_int v; @fontId = v end
116
+ def fontId=(v)
117
+ Axlsx.validate_unsigned_int v
118
+ @fontId = v
119
+ end
120
+
106
121
  # @see fillId
107
- def fillId=(v) Axlsx::validate_unsigned_int v; @fillId = v end
122
+ def fillId=(v)
123
+ Axlsx.validate_unsigned_int v
124
+ @fillId = v
125
+ end
126
+
108
127
  # @see borderId
109
- def borderId=(v) Axlsx::validate_unsigned_int v; @borderId = v end
128
+ def borderId=(v)
129
+ Axlsx.validate_unsigned_int v
130
+ @borderId = v
131
+ end
132
+
110
133
  # @see xfId
111
- def xfId=(v) Axlsx::validate_unsigned_int v; @xfId = v end
134
+ def xfId=(v)
135
+ Axlsx.validate_unsigned_int v
136
+ @xfId = v
137
+ end
138
+
112
139
  # @see quotePrefix
113
- def quotePrefix=(v) Axlsx::validate_boolean v; @quotePrefix = v end
140
+ def quotePrefix=(v)
141
+ Axlsx.validate_boolean v
142
+ @quotePrefix = v
143
+ end
144
+
114
145
  # @see pivotButton
115
- def pivotButton=(v) Axlsx::validate_boolean v; @pivotButton = v end
146
+ def pivotButton=(v)
147
+ Axlsx.validate_boolean v
148
+ @pivotButton = v
149
+ end
150
+
116
151
  # @see applyNumberFormat
117
- def applyNumberFormat=(v) Axlsx::validate_boolean v; @applyNumberFormat = v end
152
+ def applyNumberFormat=(v)
153
+ Axlsx.validate_boolean v
154
+ @applyNumberFormat = v
155
+ end
156
+
118
157
  # @see applyFont
119
- def applyFont=(v) Axlsx::validate_boolean v; @applyFont = v end
158
+ def applyFont=(v)
159
+ Axlsx.validate_boolean v
160
+ @applyFont = v
161
+ end
162
+
120
163
  # @see applyFill
121
- def applyFill=(v) Axlsx::validate_boolean v; @applyFill = v end
164
+ def applyFill=(v)
165
+ Axlsx.validate_boolean v
166
+ @applyFill = v
167
+ end
122
168
 
123
169
  # @see applyBorder
124
- def applyBorder=(v) Axlsx::validate_boolean v; @applyBorder = v end
170
+ def applyBorder=(v)
171
+ Axlsx.validate_boolean v
172
+ @applyBorder = v
173
+ end
125
174
 
126
175
  # @see applyAlignment
127
- def applyAlignment=(v) Axlsx::validate_boolean v; @applyAlignment = v end
176
+ def applyAlignment=(v)
177
+ Axlsx.validate_boolean v
178
+ @applyAlignment = v
179
+ end
128
180
 
129
181
  # @see applyProtection
130
- def applyProtection=(v) Axlsx::validate_boolean v; @applyProtection = v end
182
+ def applyProtection=(v)
183
+ Axlsx.validate_boolean v
184
+ @applyProtection = v
185
+ end
131
186
 
132
187
  # Serializes the object
133
188
  # @param [String] str
134
189
  # @return [String]
135
- def to_xml_string(str = '')
190
+ def to_xml_string(str = +'')
136
191
  str << '<xf '
137
192
  serialized_attributes str
138
193
  str << '>'
139
- alignment.to_xml_string(str) if self.alignment
140
- protection.to_xml_string(str) if self.protection
194
+ alignment.to_xml_string(str) if alignment
195
+ protection.to_xml_string(str) if protection
141
196
  str << '</xf>'
142
197
  end
143
198
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # This module defines some of the more common validating attribute
3
5
  # accessors that we use in Axlsx
@@ -42,19 +44,21 @@ module Axlsx
42
44
  validated_attr_accessor(symbols, :validate_boolean)
43
45
  end
44
46
 
45
- # Template for defining validated write accessors
46
- SETTER = "def %s=(value) Axlsx::%s(value); @%s = value; end".freeze
47
-
48
47
  # Creates the reader and writer access methods
49
- # @param [Array] symbols The names of the attributes to create
50
- # @param [String] validator The axlsx validation method to use when
48
+ # @param [Array<Symbol, String>] symbols The names of the attributes to create
49
+ # @param [Symbol|String] validator The axlsx validation method to use when
51
50
  # validating assignation.
52
51
  # @see lib/axlsx/util/validators.rb
53
52
  def validated_attr_accessor(symbols, validator)
54
53
  symbols.each do |symbol|
55
54
  attr_reader symbol
56
55
 
57
- module_eval(SETTER % [symbol, validator, symbol], __FILE__, __LINE__)
56
+ module_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
57
+ def #{symbol}=(value) # def name=(value)
58
+ Axlsx.#{validator} value # Axlsx.validate_string value
59
+ @#{symbol} = value # @name = value
60
+ end # end
61
+ RUBY_EVAL
58
62
  end
59
63
  end
60
64
  end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Axlsx
4
+ # The BufferedZipOutputStream buffers the output in order to avoid appending many small strings directly to the
5
+ # the `Zip::OutputStream`.
6
+ #
7
+ # The methods provided here mimic `Zip::OutputStream` so that this class can be used a drop-in replacement.
8
+ class BufferedZipOutputStream
9
+ # The 4_096 was chosen somewhat arbitrary, however, it was difficult to see any obvious improvement with larger
10
+ # buffer sizes.
11
+ BUFFER_SIZE = 4_096
12
+
13
+ def initialize(zos)
14
+ @zos = zos
15
+ @buffer = String.new(capacity: BUFFER_SIZE * 2)
16
+ end
17
+
18
+ # Create a temporary directory for writing files to.
19
+ #
20
+ # The directory and its contents are removed at the end of the block.
21
+ def self.open(file_name, encrypter = nil)
22
+ Zip::OutputStream.open(file_name, encrypter) do |zos|
23
+ bzos = new(zos)
24
+ yield(bzos)
25
+ ensure
26
+ bzos.flush if bzos
27
+ end
28
+ end
29
+
30
+ def self.write_buffer(io = ::StringIO.new, encrypter = nil)
31
+ Zip::OutputStream.write_buffer(io, encrypter) do |zos|
32
+ bzos = new(zos)
33
+ yield(bzos)
34
+ ensure
35
+ bzos.flush if bzos
36
+ end
37
+ end
38
+
39
+ # Closes the current entry and opens a new for writing.
40
+ def put_next_entry(entry)
41
+ flush
42
+ @zos.put_next_entry(entry)
43
+ end
44
+
45
+ # Write to a buffer that will be written to the current entry
46
+ def write(content)
47
+ @buffer << content.to_s
48
+ flush if @buffer.size > BUFFER_SIZE
49
+ self
50
+ end
51
+ alias << write
52
+
53
+ def flush
54
+ return if @buffer.empty?
55
+
56
+ @zos << @buffer
57
+ @buffer.clear
58
+ end
59
+ end
60
+ end