axlsx 1.3.5 → 1.3.6
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +9 -1
- data/README.md +26 -17
- data/examples/conditional_formatting/example_conditional_formatting.rb +4 -2
- data/examples/example.rb +22 -9
- data/examples/pivot_table.rb +0 -2
- data/lib/axlsx/drawing/axes.rb +57 -0
- data/lib/axlsx/drawing/axis.rb +16 -13
- data/lib/axlsx/drawing/bar_3D_chart.rb +16 -12
- data/lib/axlsx/drawing/cat_axis.rb +2 -10
- data/lib/axlsx/drawing/d_lbls.rb +1 -1
- data/lib/axlsx/drawing/drawing.rb +2 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +27 -70
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +20 -2
- data/lib/axlsx/drawing/scatter_chart.rb +27 -17
- data/lib/axlsx/drawing/ser_axis.rb +15 -16
- data/lib/axlsx/drawing/val_axis.rb +14 -13
- data/lib/axlsx/drawing/vml_shape.rb +18 -77
- data/lib/axlsx/util/serialized_attributes.rb +0 -1
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/worksheet/comment.rb +10 -23
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +5 -3
- data/test/benchmark.rb +0 -1
- data/test/drawing/tc_axis.rb +15 -17
- data/test/drawing/tc_cat_axis.rb +9 -9
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +8 -2
- data/test/drawing/tc_ser_axis.rb +13 -12
- data/test/drawing/tc_val_axis.rb +6 -6
- data/test/drawing/tc_vml_shape.rb +9 -3
- data/test/profile.rb +5 -11
- data/test/tc_helper.rb +1 -0
- data/test/util/tc_validators.rb +5 -1
- data/test/workbook/worksheet/tc_comment.rb +5 -1
- data/test/workbook/worksheet/tc_comments.rb +2 -2
- data/test/workbook/worksheet/tc_conditional_formatting.rb +7 -0
- metadata +21 -55
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d5ac3fa208421a6a360082bbc4b4365cc4109e89
|
4
|
+
data.tar.gz: 45f0bc90cd313ae0042a63c868166177ab312184
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1c9396cf2d1f3841902f4de9787a7f793fd98795bd21a0a77af383e38c29e8428ea9b8d507d7b9b24e4a25a548ffa561a92c7f9cfb48e59e87fc87ba33a9f390
|
7
|
+
data.tar.gz: 7d48a79d7beb734a9f4d8abe3011df69c10a5fab90b284bbd0924742d66b70adbff793d4462248bafc682418aca7096668b2e49fecb0acb6841fd23823dd239e
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
---------
|
3
|
-
|
3
|
+
- **November.5.12**:1.3.2
|
4
|
+
- MASSIVE REFACTORING
|
5
|
+
- Patch for apostrophes in worksheet names
|
6
|
+
- added sheet_by_name for workbook so you can now find your worksheets
|
7
|
+
by name
|
8
|
+
- added insert_worksheet so you can now add a worksheet to an
|
9
|
+
arbitrary position in the worksheets list.
|
10
|
+
- reduced memory consumption for package parts post serialization
|
4
11
|
- **September.30.12**: 1.3.1
|
5
12
|
- Improved control character handling
|
6
13
|
- Added stored auto filter values and date grouping items
|
@@ -221,3 +228,4 @@ in value caches
|
|
221
228
|
- Updated documentation
|
222
229
|
|
223
230
|
##October.20.11: 0.1.0 release
|
231
|
+
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Axlsx: Office Open XML Spreadsheet Generation
|
2
2
|
====================================
|
3
|
-
[](http://travis-ci.org/randym/axlsx/)
|
3
|
+
[](http://travis-ci.org/randym/axlsx/)
|
4
4
|
|
5
5
|
If you are using axlsx for comercial purposes, or just want to show your
|
6
6
|
appreciation for the gem, please don't hesitate to make a donation.
|
@@ -17,28 +17,30 @@ appreciation for the gem, please don't hesitate to make a donation.
|
|
17
17
|
|
18
18
|
**Author**: Randy Morgan
|
19
19
|
|
20
|
-
**Copyright**: 2011 -
|
20
|
+
**Copyright**: 2011 - 2013
|
21
21
|
|
22
22
|
**License**: MIT License
|
23
23
|
|
24
|
-
**Latest Version**: 1.3.
|
24
|
+
**Latest Version**: 1.3.6
|
25
25
|
|
26
|
-
**Ruby Version**: 1.8.7, 1.9.2, 1.9.3
|
26
|
+
**Ruby Version**: 1.8.7 (soon to be depreciated!!!), 1.9.2, 1.9.3, 2.0.0
|
27
27
|
|
28
28
|
**JRuby Version**: 1.6.7 1.8 and 1.9 modes
|
29
29
|
|
30
30
|
**Rubinius Version**: rubinius 2.0.0dev * lower versions may run, this gem always tests against head.
|
31
31
|
|
32
|
-
**Release Date**:
|
32
|
+
**Release Date**: April 24th 2013
|
33
33
|
|
34
34
|
If you are working in rails, or with active record see:
|
35
|
-
|
35
|
+
[acts_as_xlsx](http://github.com/randym/acts_as_xlsx)
|
36
|
+
|
36
37
|
acts_as_xlsx is a simple ActiveRecord mixin that lets you generate a workbook with:
|
37
38
|
|
38
39
|
```ruby
|
39
40
|
Posts.where(created_at > Time.now-30.days).to_xlsx
|
40
41
|
```
|
41
42
|
|
43
|
+
|
42
44
|
** and **
|
43
45
|
|
44
46
|
* http://github.com/straydogstudio/axlsx_rails
|
@@ -47,6 +49,12 @@ Axlsx_Rails provides an Axlsx renderer so you can move all your spreadsheet code
|
|
47
49
|
There are guides for using axlsx and acts_as_xlsx here:
|
48
50
|
[http://axlsx.blog.randym.net](http://axlsx.blog.randym.net)
|
49
51
|
|
52
|
+
If you are working with ActiveAdmin see:
|
53
|
+
|
54
|
+
[activeadmin_axlsx](http://github.com/randym/activeadmin_axlsx)
|
55
|
+
|
56
|
+
It provies a plugin and dsl for generating downloadable reports.
|
57
|
+
|
50
58
|
The examples directory contains a number of more specific examples as
|
51
59
|
well.
|
52
60
|
|
@@ -152,6 +160,13 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
|
|
152
160
|
|
153
161
|
#Change log
|
154
162
|
---------
|
163
|
+
- **April.24.13**:1.3.6
|
164
|
+
- Fixed LibreOffice/OpenOffice issue to properly apply colors to lines
|
165
|
+
in charts.
|
166
|
+
- Added support for specifying between/notBetween formula in an array.
|
167
|
+
*thanks* straydogstudio!
|
168
|
+
- Added standard line chart support. *thanks* scambra
|
169
|
+
- Fixed straydogstudio's link in the README. *thanks* nogara!
|
155
170
|
- **February.4.13**:1.3.5
|
156
171
|
- converted vary_colors for chart data to instance variable with appropriate defulats for the various charts.
|
157
172
|
- Added trust_input method on Axlsx to instruct the serializer to skip HTML escaping. This will give you a tremendous performance boost,
|
@@ -172,14 +187,6 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
|
|
172
187
|
- Improvements in autowidth calculation.
|
173
188
|
- **November.8.12**:1.3.3
|
174
189
|
- Patched cell run styles for u and validation for family
|
175
|
-
- **November.5.12**:1.3.2
|
176
|
-
- MASSIVE REFACTORING
|
177
|
-
- Patch for apostrophes in worksheet names
|
178
|
-
- added sheet_by_name for workbook so you can now find your worksheets
|
179
|
-
by name
|
180
|
-
- added insert_worksheet so you can now add a worksheet to an
|
181
|
-
arbitrary position in the worksheets list.
|
182
|
-
- reduced memory consumption for package parts post serialization
|
183
190
|
|
184
191
|
Please see the {file:CHANGELOG.md} document for past release information.
|
185
192
|
|
@@ -247,7 +254,7 @@ done without the help of the people below.
|
|
247
254
|
|
248
255
|
[rfc2616](https://github.com/rfc2616) - for FINALLY working out the interop issues with google docs.
|
249
256
|
|
250
|
-
[straydogstudio](https://github.com/
|
257
|
+
[straydogstudio](https://github.com/straydogstudio) - For making an AWESOME axlsx templating gem for rails.
|
251
258
|
|
252
259
|
[MitchellAJ](https://github.com/MitchellAJ) - For catching a bug in font_size calculations, finding some old code in an example and above all for reporting all of that brilliantly
|
253
260
|
|
@@ -262,11 +269,13 @@ air and our feet on the ground.
|
|
262
269
|
|
263
270
|
[ball-hayden](https://github.com/ball-hayden) - For making sure we only get the right characters in our sheet names.
|
264
271
|
|
265
|
-
[nibus](https://github.com/nibus) - For patching sheet name
|
272
|
+
[nibus](https://github.com/nibus) - For patching sheet name uniqueness.
|
273
|
+
|
274
|
+
[scambra](https://github.com/scambra) - for keeping our lines in line!
|
266
275
|
|
267
276
|
#Copyright and License
|
268
277
|
----------
|
269
278
|
|
270
|
-
Axlsx © 2011-
|
279
|
+
Axlsx © 2011-2013 by [Randy Morgan](mailto:digial.ipseity@gmail.com).
|
271
280
|
|
272
281
|
Axlsx is licensed under the MIT license. Please see the LICENSE document for more information.
|
@@ -11,8 +11,8 @@ percent = book.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE
|
|
11
11
|
money = book.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
12
12
|
|
13
13
|
# define the style for conditional formatting
|
14
|
-
profitable = book.styles.add_style( :fg_color=>"FF428751",
|
15
|
-
|
14
|
+
profitable = book.styles.add_style( :fg_color => "FF428751", :type => :dxf )
|
15
|
+
unprofitable = wb.styles.add_style( :fg_color => "FF0000", :type => :dxf )
|
16
16
|
|
17
17
|
book.add_worksheet(:name => "Cell Is") do |ws|
|
18
18
|
|
@@ -27,6 +27,8 @@ book.add_worksheet(:name => "Cell Is") do |ws|
|
|
27
27
|
|
28
28
|
# Apply conditional formatting to range B3:B100 in the worksheet
|
29
29
|
ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
|
30
|
+
# Apply conditional using the between operator; NOTE: supply an array to :formula for between/notBetween
|
31
|
+
sheet.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
|
30
32
|
end
|
31
33
|
|
32
34
|
book.add_worksheet(:name => "Color Scale") do |ws|
|
data/examples/example.rb
CHANGED
@@ -408,7 +408,7 @@ if examples.include? :bar_chart
|
|
408
408
|
sheet.add_row ["A Simple Bar Chart"]
|
409
409
|
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
410
410
|
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
411
|
-
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :title => sheet["A1"]
|
411
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :title => sheet["A1"], :colors => ["00FF00", "0000FF"]
|
412
412
|
end
|
413
413
|
end
|
414
414
|
end
|
@@ -423,7 +423,7 @@ if examples.include? :chart_gridlines
|
|
423
423
|
sheet.add_row ["Bar Chart without gridlines"]
|
424
424
|
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
425
425
|
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
426
|
-
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"]
|
426
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ["00FF00", "FF0000"]
|
427
427
|
chart.valAxis.gridlines = false
|
428
428
|
chart.catAxis.gridlines = false
|
429
429
|
end
|
@@ -455,14 +455,23 @@ if examples.include? :line_chart
|
|
455
455
|
4.times do
|
456
456
|
sheet.add_row [ rand(24)+1, rand(24)+1]
|
457
457
|
end
|
458
|
-
sheet.add_chart(Axlsx::Line3DChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
458
|
+
sheet.add_chart(Axlsx::Line3DChart, :title => "Simple 3D Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
459
459
|
chart.start_at 0, 5
|
460
460
|
chart.end_at 10, 20
|
461
|
-
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"]
|
462
|
-
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"]
|
461
|
+
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "0000FF"
|
462
|
+
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "FF0000"
|
463
463
|
chart.catAxis.title = 'X Axis'
|
464
464
|
chart.valAxis.title = 'Y Axis'
|
465
465
|
end
|
466
|
+
sheet.add_chart(Axlsx::LineChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
467
|
+
chart.start_at 0, 21
|
468
|
+
chart.end_at 10, 41
|
469
|
+
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000"
|
470
|
+
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "00FF00"
|
471
|
+
chart.catAxis.title = 'X Axis'
|
472
|
+
chart.valAxis.title = 'Y Axis'
|
473
|
+
end
|
474
|
+
|
466
475
|
end
|
467
476
|
end
|
468
477
|
#```
|
@@ -479,8 +488,8 @@ if examples.include? :scatter_chart
|
|
479
488
|
sheet.add_chart(Axlsx::ScatterChart, :title => "example 7: Scatter Chart") do |chart|
|
480
489
|
chart.start_at 0, 4
|
481
490
|
chart.end_at 10, 19
|
482
|
-
chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"]
|
483
|
-
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"]
|
491
|
+
chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"], :color => "FF0000"
|
492
|
+
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"], :color => "00FF00"
|
484
493
|
end
|
485
494
|
end
|
486
495
|
end
|
@@ -583,6 +592,8 @@ if examples.include? :comments
|
|
583
592
|
wb.add_worksheet(:name => 'comments') do |sheet|
|
584
593
|
sheet.add_row ['Can we build it?']
|
585
594
|
sheet.add_comment :ref => 'A1', :author => 'Bob', :text => 'Yes We Can!'
|
595
|
+
sheet.add_comment :ref => 'A2', :author => 'Bob', :text => 'Yes We Can! - but I dont think you need to know about it!', :visible => false
|
596
|
+
|
586
597
|
end
|
587
598
|
end
|
588
599
|
|
@@ -636,8 +647,8 @@ if examples.include? :conditional_formatting
|
|
636
647
|
money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
637
648
|
|
638
649
|
# define the style for conditional formatting
|
639
|
-
profitable = wb.styles.add_style( :fg_color=>"FF428751",
|
640
|
-
|
650
|
+
profitable = wb.styles.add_style( :fg_color => "FF428751", :type => :dxf )
|
651
|
+
unprofitable = wb.styles.add_style( :fg_color => "FF0000", :type => :dxf )
|
641
652
|
|
642
653
|
wb.add_worksheet(:name => "Conditional Cell Is") do |sheet|
|
643
654
|
|
@@ -652,6 +663,8 @@ if examples.include? :conditional_formatting
|
|
652
663
|
|
653
664
|
# Apply conditional formatting to range B3:B100 in the worksheet
|
654
665
|
sheet.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
|
666
|
+
# Apply conditional using the between operator; NOTE: supply an array to :formula for between/notBetween
|
667
|
+
sheet.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
|
655
668
|
end
|
656
669
|
|
657
670
|
wb.add_worksheet(:name => "Conditional Color Scale") do |sheet|
|
data/examples/pivot_table.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
module Axlsx
|
2
|
+
|
3
|
+
# The Axes class creates and manages axis information and
|
4
|
+
# serialization for charts.
|
5
|
+
class Axes
|
6
|
+
|
7
|
+
# @param [Hash] options options used to generate axis each key
|
8
|
+
# should be an axis name like :val_axix and its value should be the
|
9
|
+
# class of the axis type to construct.
|
10
|
+
def initialize(options={})
|
11
|
+
options.each do |name, axis_class|
|
12
|
+
add_axis(name, axis_class)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# [] provides assiciative access to a specic axis store in an axes
|
17
|
+
# instance.
|
18
|
+
# @return [Axis]
|
19
|
+
def [](name)
|
20
|
+
axes.assoc(name)[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
# Serializes the object
|
24
|
+
# @param [String] str
|
25
|
+
# @param [Hash] options
|
26
|
+
# @option options ids
|
27
|
+
# If the ids option is specified only the axis identifier is
|
28
|
+
# serialized. Otherwise, each axis is serialized in full.
|
29
|
+
def to_xml_string(str = '', options = {})
|
30
|
+
if options[:ids]
|
31
|
+
axes.inject(str) { |string, axis| string << '<c:axId val="' << axis[1].id.to_s << '"/>' }
|
32
|
+
else
|
33
|
+
axes.each { |axis| axis[1].to_xml_string(str) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Adds an axis to the collection
|
38
|
+
# @param [Symbol] name The name of the axis
|
39
|
+
# @param [Axis] axis_class The axis class to generate
|
40
|
+
def add_axis(name, axis_class)
|
41
|
+
axis = axis_class.new
|
42
|
+
set_cross_axis(axis)
|
43
|
+
axes << [name, axis]
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def axes
|
49
|
+
@axes ||= []
|
50
|
+
end
|
51
|
+
|
52
|
+
def set_cross_axis(axis)
|
53
|
+
axes.first[1].cross_axis = axis if axes.size == 1
|
54
|
+
axis.cross_axis = axes.first[1] unless axes.empty?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/axlsx/drawing/axis.rb
CHANGED
@@ -7,17 +7,13 @@ module Axlsx
|
|
7
7
|
include Axlsx::OptionsParser
|
8
8
|
|
9
9
|
# Creates an Axis object
|
10
|
-
# @
|
11
|
-
# @param [Integer] cross_ax the id of the perpendicular axis
|
10
|
+
# @option options [Axis] cross_axis the perpendicular axis
|
12
11
|
# @option options [Symbol] ax_pos
|
13
12
|
# @option options [Symbol] crosses
|
14
13
|
# @option options [Symbol] tick_lbl_pos
|
15
14
|
# @raise [ArgumentError] If axi_id or cross_ax are not unsigned integers
|
16
|
-
def initialize(
|
17
|
-
|
18
|
-
Axlsx::validate_unsigned_int(cross_ax)
|
19
|
-
@ax_id = ax_id
|
20
|
-
@cross_ax = cross_ax
|
15
|
+
def initialize(options={})
|
16
|
+
@id = rand(8 ** 8)
|
21
17
|
@format_code = "General"
|
22
18
|
@delete = @label_rotation = 0
|
23
19
|
@scaling = Scaling.new(:orientation=>:minMax)
|
@@ -37,13 +33,13 @@ module Axlsx
|
|
37
33
|
|
38
34
|
# the id of the axis.
|
39
35
|
# @return [Integer]
|
40
|
-
attr_reader :
|
41
|
-
alias :axID :
|
36
|
+
attr_reader :id
|
37
|
+
alias :axID :id
|
42
38
|
|
43
39
|
# The perpendicular axis
|
44
40
|
# @return [Integer]
|
45
|
-
attr_reader :
|
46
|
-
alias :crossAx :
|
41
|
+
attr_reader :cross_axis
|
42
|
+
alias :crossAx :cross_axis
|
47
43
|
|
48
44
|
# The scaling of the axis
|
49
45
|
# @see Scaling
|
@@ -94,6 +90,13 @@ module Axlsx
|
|
94
90
|
def color=(color_rgb)
|
95
91
|
@color = color_rgb
|
96
92
|
end
|
93
|
+
|
94
|
+
# The crossing axis for this axis
|
95
|
+
# @param [Axis] axis
|
96
|
+
def cross_axis=(axis)
|
97
|
+
DataTypeValidator.validate "#{self.class}.cross_axis", [Axis], axis
|
98
|
+
@cross_axis = axis
|
99
|
+
end
|
97
100
|
|
98
101
|
# The position of the axis
|
99
102
|
# must be one of [:l, :r, :t, :b]
|
@@ -147,7 +150,7 @@ module Axlsx
|
|
147
150
|
# @param [String] str
|
148
151
|
# @return [String]
|
149
152
|
def to_xml_string(str = '')
|
150
|
-
str << '<c:axId val="' << @
|
153
|
+
str << '<c:axId val="' << @id.to_s << '"/>'
|
151
154
|
@scaling.to_xml_string str
|
152
155
|
str << '<c:delete val="'<< @delete.to_s << '"/>'
|
153
156
|
str << '<c:axPos val="' << @ax_pos.to_s << '"/>'
|
@@ -175,7 +178,7 @@ module Axlsx
|
|
175
178
|
end
|
176
179
|
# some potential value in implementing this in full. Very detailed!
|
177
180
|
str << '<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>'
|
178
|
-
str << '<c:crossAx val="' << @
|
181
|
+
str << '<c:crossAx val="' << @cross_axis.id.to_s << '"/>'
|
179
182
|
str << '<c:crosses val="' << @crosses.to_s << '"/>'
|
180
183
|
end
|
181
184
|
|
@@ -10,12 +10,16 @@ module Axlsx
|
|
10
10
|
|
11
11
|
# the category axis
|
12
12
|
# @return [CatAxis]
|
13
|
-
|
13
|
+
def cat_axis
|
14
|
+
axes[:cat_axis]
|
15
|
+
end
|
14
16
|
alias :catAxis :cat_axis
|
15
17
|
|
16
18
|
# the value axis
|
17
19
|
# @return [ValAxis]
|
18
|
-
|
20
|
+
def val_axis
|
21
|
+
axes[:val_axis]
|
22
|
+
end
|
19
23
|
alias :valAxis :val_axis
|
20
24
|
|
21
25
|
# The direction of the bars in the chart
|
@@ -75,10 +79,6 @@ module Axlsx
|
|
75
79
|
def initialize(frame, options={})
|
76
80
|
@vary_colors = true
|
77
81
|
@gap_width, @gap_depth, @shape = nil, nil, nil
|
78
|
-
@cat_ax_id = rand(8 ** 8)
|
79
|
-
@val_ax_id = rand(8 ** 8)
|
80
|
-
@cat_axis = CatAxis.new(@cat_ax_id, @val_ax_id)
|
81
|
-
@val_axis = ValAxis.new(@val_ax_id, @cat_ax_id, :tick_lbl_pos => :low, :ax_pos => :l)
|
82
82
|
super(frame, options)
|
83
83
|
@series_type = BarSeries
|
84
84
|
@view_3D = View3D.new({:r_ang_ax=>1}.merge(options))
|
@@ -131,17 +131,21 @@ module Axlsx
|
|
131
131
|
str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
|
132
132
|
str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
|
133
133
|
@series.each { |ser| ser.to_xml_string(str_inner) }
|
134
|
-
@d_lbls.to_xml_string(
|
134
|
+
@d_lbls.to_xml_string(str_inner) if @d_lbls
|
135
135
|
str_inner << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
|
136
136
|
str_inner << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
|
137
137
|
str_inner << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
|
138
|
-
str_inner
|
139
|
-
str_inner << '<c:axId val="' << @val_ax_id.to_s << '"/>'
|
140
|
-
str_inner << '<c:axId val="0"/>'
|
138
|
+
axes.to_xml_string(str_inner, :ids => true)
|
141
139
|
str_inner << '</c:bar3DChart>'
|
142
|
-
|
143
|
-
@val_axis.to_xml_string str_inner
|
140
|
+
axes.to_xml_string(str_inner)
|
144
141
|
end
|
145
142
|
end
|
143
|
+
|
144
|
+
# A hash of axes used by this chart. Bar charts have a value and
|
145
|
+
# category axes specified via axex[:val_axes] and axes[:cat_axis]
|
146
|
+
# @return [Axes]
|
147
|
+
def axes
|
148
|
+
@axes ||= Axes.new(:val_axis => ValAxis, :cat_axis => CatAxis)
|
149
|
+
end
|
146
150
|
end
|
147
151
|
end
|
@@ -4,23 +4,15 @@ module Axlsx
|
|
4
4
|
class CatAxis < Axis
|
5
5
|
|
6
6
|
# Creates a new CatAxis object
|
7
|
-
# @param [Integer] ax_id the id of this axis. Inherited
|
8
|
-
# @param [Integer] cross_ax the id of the perpendicular axis. Inherited
|
9
|
-
# @option options [Symbol] ax_pos. Inherited
|
10
|
-
# @option options [Symbol] tick_lbl_pos. Inherited
|
11
|
-
# @option options [Symbol] crosses. Inherited
|
12
|
-
# @option options [Boolean] auto
|
13
|
-
# @option options [Symbol] lbl_algn
|
14
|
-
# @option options [Integer] lbl_offset
|
15
7
|
# @option options [Integer] tick_lbl_skip
|
16
8
|
# @option options [Integer] tick_mark_skip
|
17
|
-
def initialize(
|
9
|
+
def initialize(options={})
|
18
10
|
@tick_lbl_skip = 1
|
19
11
|
@tick_mark_skip = 1
|
20
12
|
self.auto = 1
|
21
13
|
self.lbl_algn = :ctr
|
22
14
|
self.lbl_offset = "100"
|
23
|
-
super(
|
15
|
+
super(options)
|
24
16
|
end
|
25
17
|
|
26
18
|
# From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
|