Class: Axlsx::Drawing
- Inherits:
-
Object
- Object
- Axlsx::Drawing
- Defined in:
- lib/axlsx/drawing/drawing.rb
Overview
The recommended way to manage drawings is to use the Worksheet.add_chart and Worksheet.add_image methods.
A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors. The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note. see examples/example.rb for an example of how to create a chart.
Instance Attribute Summary collapse
-
#anchors ⇒ SimpleTypedList
readonly
A collection of anchors for this drawing only TwoCellAnchors are supported in this version.
-
#worksheet ⇒ Worksheet
readonly
The worksheet that owns the drawing.
Instance Method Summary collapse
-
#add_chart(chart_type, options = {}) ⇒ Object
Adds a chart to the drawing.
-
#add_image(options = {}) ⇒ Pic
Adds an image to the chart If th end_at option is specified we create a two cell anchor.
-
#charts ⇒ Array
An array of charts that are associated with this drawing's anchors.
-
#child_objects ⇒ Array
A list of objects this drawing holds.
-
#hyperlinks ⇒ Array
An array of hyperlink objects associated with this drawings images.
-
#images ⇒ Array
An array of image objects that are associated with this drawing's anchors.
-
#index ⇒ Integer
The index of this drawing in the owning workbooks's drawings collection.
-
#initialize(worksheet) ⇒ Drawing
constructor
Creates a new Drawing object.
-
#pn ⇒ String
The part name for this drawing.
-
#relationships ⇒ Relationships
The drawing's relationships.
-
#rels_pn ⇒ String
The relational part name for this drawing #NOTE This should be rewritten to return an Axlsx::Relationship object.
-
#to_xml_string(str = +'')) ⇒ String
Serializes the object.
Constructor Details
#initialize(worksheet) ⇒ Drawing
Creates a new Drawing object
74 75 76 77 78 79 |
# File 'lib/axlsx/drawing/drawing.rb', line 74 def initialize(worksheet) DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet @worksheet = worksheet @worksheet.workbook.drawings << self @anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor] end |
Instance Attribute Details
#anchors ⇒ SimpleTypedList (readonly)
A collection of anchors for this drawing only TwoCellAnchors are supported in this version
70 71 72 |
# File 'lib/axlsx/drawing/drawing.rb', line 70 def anchors @anchors end |
#worksheet ⇒ Worksheet (readonly)
The worksheet that owns the drawing
65 66 67 |
# File 'lib/axlsx/drawing/drawing.rb', line 65 def worksheet @worksheet end |
Instance Method Details
#add_chart(chart_type, options = {}) ⇒ Object
The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
Adds a chart to the drawing.
97 98 99 100 |
# File 'lib/axlsx/drawing/drawing.rb', line 97 def add_chart(chart_type, = {}) TwoCellAnchor.new(self, ) @anchors.last.add_chart(chart_type, ) end |
#add_image(options = {}) ⇒ Pic
The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
Adds an image to the chart If th end_at option is specified we create a two cell anchor. By default we use a one cell anchor.
85 86 87 88 89 90 91 92 |
# File 'lib/axlsx/drawing/drawing.rb', line 85 def add_image( = {}) if [:end_at] TwoCellAnchor.new(self, ).add_pic() else OneCellAnchor.new(self, ) end @anchors.last.object end |
#charts ⇒ Array
An array of charts that are associated with this drawing's anchors
104 105 106 107 |
# File 'lib/axlsx/drawing/drawing.rb', line 104 def charts charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) } charts.map { |a| a.object.chart } end |
#child_objects ⇒ Array
A list of objects this drawing holds.
144 145 146 |
# File 'lib/axlsx/drawing/drawing.rb', line 144 def child_objects charts + images + hyperlinks end |
#hyperlinks ⇒ Array
An array of hyperlink objects associated with this drawings images
111 112 113 114 |
# File 'lib/axlsx/drawing/drawing.rb', line 111 def hyperlinks links = images.select { |a| a.hyperlink.is_a?(Hyperlink) } links.map(&:hyperlink) end |
#images ⇒ Array
An array of image objects that are associated with this drawing's anchors
118 119 120 121 |
# File 'lib/axlsx/drawing/drawing.rb', line 118 def images images = @anchors.select { |a| a.object.is_a?(Pic) } images.map(&:object) end |
#index ⇒ Integer
The index of this drawing in the owning workbooks's drawings collection.
125 126 127 |
# File 'lib/axlsx/drawing/drawing.rb', line 125 def index @worksheet.workbook.drawings.index(self) end |
#pn ⇒ String
The part name for this drawing
131 132 133 |
# File 'lib/axlsx/drawing/drawing.rb', line 131 def pn format(DRAWING_PN, index + 1) end |
#relationships ⇒ Relationships
The drawing's relationships.
150 151 152 153 154 |
# File 'lib/axlsx/drawing/drawing.rb', line 150 def relationships r = Relationships.new child_objects.each { |child| r << child.relationship } r end |
#rels_pn ⇒ String
The relational part name for this drawing
NOTE This should be rewritten to return an Axlsx::Relationship object.
138 139 140 |
# File 'lib/axlsx/drawing/drawing.rb', line 138 def rels_pn format(DRAWING_RELS_PN, index + 1) end |
#to_xml_string(str = +'')) ⇒ String
Serializes the object
159 160 161 162 163 164 |
# File 'lib/axlsx/drawing/drawing.rb', line 159 def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">' anchors.each { |anchor| anchor.to_xml_string(str) } str << '</xdr:wsDr>' end |