axlsx 1.0.7 → 1.0.8
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.
- data/README.md +21 -3
- data/doc/Axlsx.html +150 -6
- data/doc/Axlsx/App.html +1 -1
- data/doc/Axlsx/Axis.html +1 -1
- data/doc/Axlsx/Bar3DChart.html +1 -1
- data/doc/Axlsx/BarSeries.html +1 -1
- data/doc/Axlsx/Border.html +1 -1
- data/doc/Axlsx/BorderPr.html +1 -1
- data/doc/Axlsx/CatAxis.html +1 -1
- data/doc/Axlsx/CatAxisData.html +7 -5
- data/doc/Axlsx/Cell.html +1 -1
- data/doc/Axlsx/CellAlignment.html +1 -1
- data/doc/Axlsx/CellProtection.html +1 -1
- data/doc/Axlsx/CellStyle.html +1 -1
- data/doc/Axlsx/Chart.html +16 -16
- data/doc/Axlsx/Color.html +1 -1
- data/doc/Axlsx/ContentType.html +1 -1
- data/doc/Axlsx/Core.html +1 -1
- data/doc/Axlsx/DataTypeValidator.html +1 -1
- data/doc/Axlsx/Default.html +1 -1
- data/doc/Axlsx/Drawing.html +243 -65
- data/doc/Axlsx/Fill.html +1 -1
- data/doc/Axlsx/Font.html +1 -1
- data/doc/Axlsx/GradientFill.html +1 -1
- data/doc/Axlsx/GradientStop.html +1 -1
- data/doc/Axlsx/GraphicFrame.html +21 -21
- data/doc/Axlsx/Line3DChart.html +1 -1
- data/doc/Axlsx/LineSeries.html +6 -8
- data/doc/Axlsx/Marker.html +1 -1
- data/doc/Axlsx/NumFmt.html +1 -1
- data/doc/Axlsx/OneCellAnchor.html +988 -0
- data/doc/Axlsx/Override.html +1 -1
- data/doc/Axlsx/Package.html +127 -75
- data/doc/Axlsx/PatternFill.html +1 -1
- data/doc/Axlsx/Pic.html +1532 -0
- data/doc/Axlsx/Pie3DChart.html +5 -7
- data/doc/Axlsx/PieSeries.html +1 -1
- data/doc/Axlsx/RegexValidator.html +1 -1
- data/doc/Axlsx/Relationship.html +6 -6
- data/doc/Axlsx/Relationships.html +1 -1
- data/doc/Axlsx/RestrictionValidator.html +1 -1
- data/doc/Axlsx/Row.html +1 -1
- data/doc/Axlsx/Scaling.html +1 -1
- data/doc/Axlsx/SerAxis.html +1 -1
- data/doc/Axlsx/Series.html +1 -1
- data/doc/Axlsx/SeriesTitle.html +1 -1
- data/doc/Axlsx/SimpleTypedList.html +1 -1
- data/doc/Axlsx/Styles.html +1 -1
- data/doc/Axlsx/TableStyle.html +1 -1
- data/doc/Axlsx/TableStyleElement.html +1 -1
- data/doc/Axlsx/TableStyles.html +1 -1
- data/doc/Axlsx/Title.html +1 -1
- data/doc/Axlsx/TwoCellAnchor.html +165 -61
- data/doc/Axlsx/ValAxis.html +1 -1
- data/doc/Axlsx/ValAxisData.html +1 -1
- data/doc/Axlsx/View3D.html +1 -1
- data/doc/Axlsx/Workbook.html +151 -47
- data/doc/Axlsx/Worksheet.html +172 -35
- data/doc/Axlsx/Xf.html +1 -1
- data/doc/_index.html +15 -1
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +29 -4
- data/doc/index.html +29 -4
- data/doc/method_list.html +571 -363
- data/doc/top-level-namespace.html +1 -1
- data/examples/example.rb +13 -0
- data/examples/image1.gif +0 -0
- data/examples/image1.jpeg +0 -0
- data/examples/image1.jpg +0 -0
- data/examples/image1.png +0 -0
- data/lib/axlsx/drawing/bar_series.rb +0 -1
- data/lib/axlsx/drawing/cat_axis_data.rb +1 -0
- data/lib/axlsx/drawing/chart.rb +0 -1
- data/lib/axlsx/drawing/drawing.rb +31 -7
- data/lib/axlsx/drawing/graphic_frame.rb +0 -2
- data/lib/axlsx/drawing/line_series.rb +0 -1
- data/lib/axlsx/drawing/one_cell_anchor.rb +89 -0
- data/lib/axlsx/drawing/pic.rb +158 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +0 -1
- data/lib/axlsx/drawing/two_cell_anchor.rb +17 -4
- data/lib/axlsx/package.rb +31 -5
- data/lib/axlsx/rels/relationship.rb +1 -2
- data/lib/axlsx/util/constants.rb +24 -0
- data/lib/axlsx/util/validators.rb +2 -2
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/workbook.rb +8 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +10 -1
- data/test/drawing/tc_drawing.rb +10 -1
- data/test/drawing/tc_one_cell_anchor.rb +67 -0
- data/test/drawing/tc_pic.rb +71 -0
- data/test/tc_package.rb +0 -2
- metadata +13 -118
- data/examples/#example.rb# +0 -87
- data/examples/example.rb~ +0 -79
- data/examples/multi_chart.xlsx +0 -0
- data/lib/axlsx.rb~ +0 -67
- data/lib/axlsx/content_type/content_type.rb~ +0 -20
- data/lib/axlsx/content_type/default.rb~ +0 -32
- data/lib/axlsx/content_type/override.rb~ +0 -30
- data/lib/axlsx/doc_props/app.rb~ +0 -127
- data/lib/axlsx/doc_props/core.rb~ +0 -25
- data/lib/axlsx/drawing/#bar_series.rb# +0 -62
- data/lib/axlsx/drawing/axis.rb~ +0 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb~ +0 -64
- data/lib/axlsx/drawing/bar_series.rb~ +0 -92
- data/lib/axlsx/drawing/cat_axis.rb~ +0 -32
- data/lib/axlsx/drawing/cat_axis_data.rb~ +0 -28
- data/lib/axlsx/drawing/chart.rb~ +0 -0
- data/lib/axlsx/drawing/drawing.rb~ +0 -102
- data/lib/axlsx/drawing/graphic_frame.rb~ +0 -40
- data/lib/axlsx/drawing/line_3D_chart.rb~ +0 -138
- data/lib/axlsx/drawing/line_series.rb~ +0 -91
- data/lib/axlsx/drawing/marker.rb~ +0 -50
- data/lib/axlsx/drawing/pie_3D_chart.rb~ +0 -132
- data/lib/axlsx/drawing/pie_series.rb~ +0 -0
- data/lib/axlsx/drawing/scaling.rb~ +0 -0
- data/lib/axlsx/drawing/ser_axis.rb~ +0 -48
- data/lib/axlsx/drawing/series.rb~ +0 -114
- data/lib/axlsx/drawing/series_title.rb~ +0 -18
- data/lib/axlsx/drawing/title.rb~ +0 -69
- data/lib/axlsx/drawing/two_cell_anchor.rb~ +0 -70
- data/lib/axlsx/drawing/val_axis.rb~ +0 -34
- data/lib/axlsx/drawing/val_axis_data.rb~ +0 -29
- data/lib/axlsx/drawing/view_3D.rb~ +0 -21
- data/lib/axlsx/package.rb~ +0 -181
- data/lib/axlsx/rels/relationship.rb~ +0 -18
- data/lib/axlsx/rels/relationships.rb~ +0 -23
- data/lib/axlsx/stylesheet/border.rb~ +0 -24
- data/lib/axlsx/stylesheet/border_pr.rb~ +0 -64
- data/lib/axlsx/stylesheet/cell_alignment.rb~ +0 -93
- data/lib/axlsx/stylesheet/cell_protection.rb~ +0 -16
- data/lib/axlsx/stylesheet/cell_style.rb~ +0 -61
- data/lib/axlsx/stylesheet/color.rb~ +0 -56
- data/lib/axlsx/stylesheet/fill.rb~ +0 -31
- data/lib/axlsx/stylesheet/font.rb~ +0 -33
- data/lib/axlsx/stylesheet/gradient_fill.rb~ +0 -70
- data/lib/axlsx/stylesheet/gradient_stop.rb~ +0 -15
- data/lib/axlsx/stylesheet/num_fmt.rb~ +0 -60
- data/lib/axlsx/stylesheet/pattern_fill.rb~ +0 -63
- data/lib/axlsx/stylesheet/styles.rb~ +0 -279
- data/lib/axlsx/stylesheet/table_style.rb~ +0 -43
- data/lib/axlsx/stylesheet/table_style_element.rb~ +0 -66
- data/lib/axlsx/stylesheet/table_styles.rb~ +0 -36
- data/lib/axlsx/stylesheet/xf.rb~ +0 -37
- data/lib/axlsx/util/constants.rb~ +0 -187
- data/lib/axlsx/util/monkey_patches_for_true_zip_stream.rb~ +0 -61
- data/lib/axlsx/util/simple_typed_list.rb~ +0 -79
- data/lib/axlsx/util/validators.rb~ +0 -132
- data/lib/axlsx/util/xml_escape.rb~ +0 -6
- data/lib/axlsx/workbook/workbook.rb~ +0 -130
- data/lib/axlsx/workbook/worksheet/cell.rb~ +0 -185
- data/lib/axlsx/workbook/worksheet/row.rb~ +0 -92
- data/lib/axlsx/workbook/worksheet/worksheet.rb~ +0 -194
- data/test/content_type/tc_content_type.rb~ +0 -81
- data/test/content_type/tc_default.rb~ +0 -40
- data/test/content_type/tc_override.rb~ +0 -40
- data/test/doc_props/tc_app.rb~ +0 -19
- data/test/drawing/tc_axis.rb~ +0 -0
- data/test/drawing/tc_bar_3D_chart.rb~ +0 -66
- data/test/drawing/tc_bar_series.rb~ +0 -31
- data/test/drawing/tc_cat_axis.rb~ +0 -39
- data/test/drawing/tc_cat_axis_data.rb~ +0 -32
- data/test/drawing/tc_chart.rb~ +0 -59
- data/test/drawing/tc_graphic_frame.rb~ +0 -21
- data/test/drawing/tc_line_3d_chart.rb~ +0 -48
- data/test/drawing/tc_line_series.rb~ +0 -34
- data/test/drawing/tc_marker.rb~ +0 -26
- data/test/drawing/tc_pie_3D_chart.rb~ +0 -33
- data/test/drawing/tc_pie_series.rb~ +0 -26
- data/test/drawing/tc_scaling.rb~ +0 -45
- data/test/drawing/tc_ser_axis.rb~ +0 -20
- data/test/drawing/tc_series.rb~ +0 -31
- data/test/drawing/tc_series_title.rb~ +0 -34
- data/test/drawing/tc_title.rb~ +0 -34
- data/test/drawing/tc_two_cell_anchor.rb~ +0 -37
- data/test/drawing/tc_val_axis.rb~ +0 -32
- data/test/drawing/tc_val_axis_data.rb~ +0 -18
- data/test/drawing/tc_view_3D.rb~ +0 -37
- data/test/rels/tc_relationship.rb~ +0 -39
- data/test/rels/tc_relationships.rb~ +0 -37
- data/test/stylesheet/tc_border.rb~ +0 -31
- data/test/stylesheet/tc_border_pr.rb~ +0 -31
- data/test/stylesheet/tc_cell_alignment.rb~ +0 -38
- data/test/stylesheet/tc_cell_protection.rb~ +0 -77
- data/test/stylesheet/tc_cell_style.rb~ +0 -30
- data/test/stylesheet/tc_color.rb~ +0 -38
- data/test/stylesheet/tc_fill.rb~ +0 -19
- data/test/stylesheet/tc_font.rb~ +0 -19
- data/test/stylesheet/tc_gradient_fill.rb~ +0 -114
- data/test/stylesheet/tc_gradient_stop.rb~ +0 -65
- data/test/stylesheet/tc_num_fmt.rb~ +0 -32
- data/test/stylesheet/tc_pattern_fill.rb~ +0 -31
- data/test/stylesheet/tc_table_style.rb~ +0 -38
- data/test/stylesheet/tc_table_style_element.rb~ +0 -37
- data/test/stylesheet/tc_table_styles.rb~ +0 -37
- data/test/stylesheet/tc_xf.rb~ +0 -30
- data/test/tc_app.rb~ +0 -19
- data/test/tc_border_pr.rb~ +0 -21
- data/test/tc_package.rb~ +0 -64
- data/test/tc_pie_3D_chart.rb~ +0 -66
- data/test/tc_relationships.rb~ +0 -37
- data/test/tc_series.rb~ +0 -31
- data/test/tc_styles.rb~ +0 -64
- data/test/tc_validators.rb~ +0 -77
- data/test/tc_worksheet.rb~ +0 -85
- data/test/workbook/worksheet/tc_row.rb~ +0 -30
- data/test/workbook/worksheet/tc_worksheet.rb~ +0 -85
data/examples/example.rb
CHANGED
|
@@ -82,5 +82,18 @@
|
|
|
82
82
|
chart.add_series :data=>sheet.rows.first.cells[(1..-1)], :title=> sheet.rows.first.cells.first
|
|
83
83
|
chart.add_series :data=>sheet.rows.last.cells[(1..-1)], :title=> sheet.rows.last.cells.first
|
|
84
84
|
end
|
|
85
|
+
|
|
85
86
|
end
|
|
86
87
|
p.serialize("example6.xlsx")
|
|
88
|
+
|
|
89
|
+
#Add an Image
|
|
90
|
+
|
|
91
|
+
p = Axlsx::Package.new
|
|
92
|
+
p.workbook.add_worksheet do |sheet|
|
|
93
|
+
sheet.add_image(:image_src => (File.dirname(__FILE__) + "/image1.png")) do |image|
|
|
94
|
+
image.width=720
|
|
95
|
+
image.height=666
|
|
96
|
+
image.start_at 2, 2
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
p.serialize("example7.xlsx")
|
data/examples/image1.gif
ADDED
|
Binary file
|
|
Binary file
|
data/examples/image1.jpg
ADDED
|
Binary file
|
data/examples/image1.png
ADDED
|
Binary file
|
data/lib/axlsx/drawing/chart.rb
CHANGED
|
@@ -16,6 +16,8 @@ module Axlsx
|
|
|
16
16
|
require 'axlsx/drawing/val_axis_data.rb'
|
|
17
17
|
|
|
18
18
|
require 'axlsx/drawing/marker.rb'
|
|
19
|
+
|
|
20
|
+
require 'axlsx/drawing/one_cell_anchor.rb'
|
|
19
21
|
require 'axlsx/drawing/two_cell_anchor.rb'
|
|
20
22
|
require 'axlsx/drawing/graphic_frame.rb'
|
|
21
23
|
|
|
@@ -25,6 +27,9 @@ module Axlsx
|
|
|
25
27
|
require 'axlsx/drawing/bar_3D_chart.rb'
|
|
26
28
|
require 'axlsx/drawing/line_3D_chart.rb'
|
|
27
29
|
|
|
30
|
+
|
|
31
|
+
require 'axlsx/drawing/pic.rb'
|
|
32
|
+
|
|
28
33
|
# A Drawing is a canvas for charts. Each worksheet has a single drawing that manages anchors.
|
|
29
34
|
# The anchors reference the charts via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
|
|
30
35
|
# @note The recommended way to manage drawings is to use the Worksheet.add_chart method.
|
|
@@ -46,6 +51,10 @@ module Axlsx
|
|
|
46
51
|
# @return [Array]
|
|
47
52
|
attr_reader :charts
|
|
48
53
|
|
|
54
|
+
# An array of image objects that are associated with this drawing's anchors
|
|
55
|
+
# @return [Array]
|
|
56
|
+
attr_reader :images
|
|
57
|
+
|
|
49
58
|
# The index of this drawing in the owning workbooks's drawings collection.
|
|
50
59
|
# @return [Integer]
|
|
51
60
|
attr_reader :index
|
|
@@ -72,20 +81,33 @@ module Axlsx
|
|
|
72
81
|
DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
|
|
73
82
|
@worksheet = worksheet
|
|
74
83
|
@worksheet.workbook.drawings << self
|
|
75
|
-
@anchors = SimpleTypedList.new TwoCellAnchor
|
|
84
|
+
@anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Adds an image to the chart
|
|
88
|
+
# @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
|
|
89
|
+
# @see Worksheet#add_image
|
|
90
|
+
def add_image(options={})
|
|
91
|
+
OneCellAnchor.new(self, options)
|
|
92
|
+
@anchors.last.object
|
|
76
93
|
end
|
|
77
|
-
|
|
78
94
|
|
|
79
95
|
# Adds a chart to the drawing.
|
|
80
96
|
# @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
|
|
81
97
|
# @see Worksheet#add_chart
|
|
82
98
|
def add_chart(chart_type, options={})
|
|
83
|
-
TwoCellAnchor.new(self,
|
|
84
|
-
@anchors.last.
|
|
99
|
+
TwoCellAnchor.new(self, options)
|
|
100
|
+
@anchors.last.add_chart(chart_type, options)
|
|
85
101
|
end
|
|
86
102
|
|
|
87
103
|
def charts
|
|
88
|
-
@anchors.
|
|
104
|
+
charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
|
|
105
|
+
charts.map { |a| a.object.chart }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def images
|
|
109
|
+
images = @anchors.select { |a| a.object.is_a?(Pic) }
|
|
110
|
+
images.map { |a| a.object }
|
|
89
111
|
end
|
|
90
112
|
|
|
91
113
|
def index
|
|
@@ -106,10 +128,12 @@ module Axlsx
|
|
|
106
128
|
|
|
107
129
|
def relationships
|
|
108
130
|
r = Relationships.new
|
|
109
|
-
|
|
110
|
-
chart = anchor.graphic_frame.chart
|
|
131
|
+
charts.each do |chart|
|
|
111
132
|
r << Relationship.new(CHART_R, "../#{chart.pn}")
|
|
112
133
|
end
|
|
134
|
+
images.each do |image|
|
|
135
|
+
r << Relationship.new(IMAGE_R, "../#{image.pn}")
|
|
136
|
+
end
|
|
113
137
|
r
|
|
114
138
|
end
|
|
115
139
|
|
|
@@ -26,7 +26,6 @@ module Axlsx
|
|
|
26
26
|
# Serializes the series
|
|
27
27
|
# @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
|
|
28
28
|
# @return [String]
|
|
29
|
-
# TODO create series_cat and series_val classes as this serialization is duplicated
|
|
30
29
|
def to_xml(xml)
|
|
31
30
|
super(xml) do |xml|
|
|
32
31
|
@labels.to_xml(xml) unless @labels.nil?
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
# This class details a single cell anchor for drawings.
|
|
3
|
+
# @note The recommended way to manage drawings, images and charts is Worksheet#add_chart or Worksheet#add_image.
|
|
4
|
+
# @see Worksheet#add_chart
|
|
5
|
+
# @see Worksheet#add_image
|
|
6
|
+
class OneCellAnchor
|
|
7
|
+
|
|
8
|
+
# A marker that defines the from cell anchor. The default from column and row are 0 and 0 respectively
|
|
9
|
+
# @return [Marker]
|
|
10
|
+
attr_reader :from
|
|
11
|
+
|
|
12
|
+
# The object this anchor hosts
|
|
13
|
+
# @return [Pic]
|
|
14
|
+
attr_reader :object
|
|
15
|
+
|
|
16
|
+
# The drawing that holds this anchor
|
|
17
|
+
# @return [Drawing]
|
|
18
|
+
attr_reader :drawing
|
|
19
|
+
|
|
20
|
+
# The index of this anchor in the drawing
|
|
21
|
+
# @return [Integer]
|
|
22
|
+
attr_reader :index
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# the width of the graphic object in pixels.
|
|
26
|
+
# this is converted to EMU at a 92 ppi resolution
|
|
27
|
+
# @return [Integer]
|
|
28
|
+
attr_accessor :width
|
|
29
|
+
|
|
30
|
+
# the height of the graphic object in pixels
|
|
31
|
+
# this is converted to EMU at a 92 ppi resolution
|
|
32
|
+
# @return [Integer]
|
|
33
|
+
attr_accessor :height
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Creates a new OneCellAnchor object and an Pic associated with it.
|
|
37
|
+
# @param [Drawing] drawing
|
|
38
|
+
# @option options [Array] start_at the col, row to start at
|
|
39
|
+
# @option options [Integer] width
|
|
40
|
+
# @option options [Integer] height
|
|
41
|
+
# @option options [String] image_src the file location of the image you will render
|
|
42
|
+
# @option options [String] name the name attribute for the rendered image
|
|
43
|
+
# @option options [String] descr the description of the image rendered
|
|
44
|
+
def initialize(drawing, options={})
|
|
45
|
+
@drawing = drawing
|
|
46
|
+
@width = 0
|
|
47
|
+
@height = 0
|
|
48
|
+
drawing.anchors << self
|
|
49
|
+
@from = Marker.new
|
|
50
|
+
options.each do |o|
|
|
51
|
+
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
52
|
+
end
|
|
53
|
+
@object = Pic.new(self, options)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def height=(v) Axlsx::validate_unsigned_int(v); @height = v; end
|
|
57
|
+
def width=(v) Axlsx::validate_unsigned_int(v); @width = v; end
|
|
58
|
+
|
|
59
|
+
def index
|
|
60
|
+
@drawing.anchors.index(self)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Serializes the anchor
|
|
64
|
+
# @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
|
|
65
|
+
# @return [String]
|
|
66
|
+
def to_xml(xml)
|
|
67
|
+
xml.send('xdr:oneCellAnchor') {
|
|
68
|
+
xml.send('xdr:from') {
|
|
69
|
+
from.to_xml(xml)
|
|
70
|
+
}
|
|
71
|
+
xml.send('xdr:ext', ext)
|
|
72
|
+
@object.to_xml(xml)
|
|
73
|
+
xml.send('xdr:clientData')
|
|
74
|
+
}
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
# converts the pixel width and height to EMU units and returns a hash of
|
|
80
|
+
# !{:cx=>[Integer], :cy=>[Integer]
|
|
81
|
+
# @return [Hash]
|
|
82
|
+
def ext
|
|
83
|
+
cy = @height * 914400 / 96
|
|
84
|
+
cx = @width * 914400 / 96
|
|
85
|
+
{:cy=>cy, :cx=>cx}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
module Axlsx
|
|
3
|
+
# a Pic object represents an image in your worksheet
|
|
4
|
+
# Worksheet#add_image is the recommended way to manage images in your sheets
|
|
5
|
+
# @see Worksheet#add_image
|
|
6
|
+
class Pic
|
|
7
|
+
|
|
8
|
+
# allowed file extenstions
|
|
9
|
+
ALLOWED_EXTENSIONS = ['gif', 'jpeg', 'png', 'jpg']
|
|
10
|
+
|
|
11
|
+
# The name to use for this picture
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_accessor :name
|
|
14
|
+
|
|
15
|
+
# providing access to the anchor's width attribute
|
|
16
|
+
# @param [Integer] v
|
|
17
|
+
# @see OneCellAnchor.width
|
|
18
|
+
attr_accessor :width
|
|
19
|
+
|
|
20
|
+
# providing access to update the anchor's height attribute
|
|
21
|
+
# @param [Integer] v
|
|
22
|
+
# @see OneCellAnchor.width
|
|
23
|
+
attr_accessor :height
|
|
24
|
+
|
|
25
|
+
# A description of the picture
|
|
26
|
+
# @return [String]
|
|
27
|
+
attr_accessor :descr
|
|
28
|
+
|
|
29
|
+
# The path to the image you want to include
|
|
30
|
+
# Only local images are supported at this time and only jpg support
|
|
31
|
+
# @return [String]
|
|
32
|
+
attr_accessor :image_src
|
|
33
|
+
|
|
34
|
+
# The anchor for this image
|
|
35
|
+
# @return [OneCellAnchor]
|
|
36
|
+
attr_reader :anchor
|
|
37
|
+
|
|
38
|
+
# returns the extension of image_src without the preceeding '.'
|
|
39
|
+
# @return [String]
|
|
40
|
+
attr_reader :extname
|
|
41
|
+
|
|
42
|
+
# The file name of image_src without any path information
|
|
43
|
+
# @return [String]
|
|
44
|
+
attr_reader :file_name
|
|
45
|
+
|
|
46
|
+
# The part name for this image used in serialization and relationship building
|
|
47
|
+
# @return [String]
|
|
48
|
+
attr_reader :pn
|
|
49
|
+
|
|
50
|
+
# The index of this image in the workbooks images collections
|
|
51
|
+
# @return [Index]
|
|
52
|
+
attr_reader :index
|
|
53
|
+
|
|
54
|
+
# The name of the image file, sans directory info
|
|
55
|
+
# @return [String]
|
|
56
|
+
attr_reader :file_name
|
|
57
|
+
|
|
58
|
+
# Creates a new Pic(ture) object
|
|
59
|
+
# @param [Anchor] anchor the anchor that holds this image
|
|
60
|
+
# @option options [String] name
|
|
61
|
+
# @option options [String] descr
|
|
62
|
+
# @option options [String] image_src
|
|
63
|
+
# @option options [Array] start_at
|
|
64
|
+
# @option options [Intger] width
|
|
65
|
+
# @option options [Intger] height
|
|
66
|
+
def initialize(anchor, options={})
|
|
67
|
+
@anchor = anchor
|
|
68
|
+
@anchor.drawing.worksheet.workbook.images << self
|
|
69
|
+
options.each do |o|
|
|
70
|
+
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
71
|
+
end
|
|
72
|
+
start_at *options[:start_at] if options[:start_at]
|
|
73
|
+
yield self if block_given?
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def image_src=(v)
|
|
77
|
+
Axlsx::validate_string(v)
|
|
78
|
+
RestrictionValidator.validate 'Pic.image_src', ALLOWED_EXTENSIONS, File.extname(v).delete('.')
|
|
79
|
+
raise ArgumentError, "File does not exist" unless File.exist?(v)
|
|
80
|
+
@image_src = v
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def name=(v) Axlsx::validate_string(v); @name = v; end
|
|
84
|
+
def descr=(v) Axlsx::validate_string(v); @descr = v; end
|
|
85
|
+
|
|
86
|
+
def file_name
|
|
87
|
+
File.basename(image_src) unless image_src.nil?
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def extname
|
|
91
|
+
File.extname(image_src).delete('.') unless image_src.nil?
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def index
|
|
95
|
+
@anchor.drawing.worksheet.workbook.images.index(self)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def pn
|
|
99
|
+
"#{IMAGE_PN % [(index+1), extname]}"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def width
|
|
103
|
+
@anchor.width
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def width=(v)
|
|
107
|
+
@anchor.width = v
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def height=(v)
|
|
111
|
+
@anchor.height = v
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def height
|
|
115
|
+
@anchor.height
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# This is a short cut method to set the start anchor position
|
|
119
|
+
# If you need finer granularity in positioning use
|
|
120
|
+
# graphic_frame.anchor.from.colOff / rowOff
|
|
121
|
+
# @param [Integer] x The column
|
|
122
|
+
# @param [Integer] y The row
|
|
123
|
+
# @return [Marker]
|
|
124
|
+
def start_at(x, y)
|
|
125
|
+
@anchor.from.col = x
|
|
126
|
+
@anchor.from.row = y
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Serializes the picture
|
|
130
|
+
# @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
|
|
131
|
+
# @return [String]
|
|
132
|
+
def to_xml(xml)
|
|
133
|
+
xml.send('xdr:pic') {
|
|
134
|
+
xml.send('xdr:nvPicPr') {
|
|
135
|
+
xml.send('xdr:cNvPr', :id=>"2", :name=>name, :descr=>descr)
|
|
136
|
+
xml.send('xdr:cNvPicPr') {
|
|
137
|
+
xml.send('a:picLocks', :noChangeAspect=>1)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
xml.send('xdr:blipFill') {
|
|
141
|
+
xml.send('a:blip', :'xmlns:r' => XML_NS_R, :'r:embed'=>"rId1")
|
|
142
|
+
xml.send('a:stretch') {
|
|
143
|
+
xml.send('a:fillRect')
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
xml.send('xdr:spPr') {
|
|
147
|
+
xml.send('a:xfrm') {
|
|
148
|
+
xml.send('a:off', :x=>0, :y=>0)
|
|
149
|
+
xml.send('a:ext', :cx=>2336800, :cy=>2161540)
|
|
150
|
+
}
|
|
151
|
+
xml.send('a:prstGeom', :prst=>:rect) {
|
|
152
|
+
xml.send('a:avLst')
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -12,8 +12,13 @@ module Axlsx
|
|
|
12
12
|
attr_reader :to
|
|
13
13
|
|
|
14
14
|
# The frame for your chart
|
|
15
|
+
# @note this will be discontinued in version 2.0 please use object
|
|
15
16
|
# @return [GraphicFrame]
|
|
16
|
-
attr_reader :graphic_frame
|
|
17
|
+
# attr_reader :graphic_frame
|
|
18
|
+
|
|
19
|
+
# The object this anchor hosts
|
|
20
|
+
# @return [Pic, GraphicFrame]
|
|
21
|
+
attr_reader :object
|
|
17
22
|
|
|
18
23
|
# The drawing that holds this anchor
|
|
19
24
|
# @return [Drawing]
|
|
@@ -27,15 +32,23 @@ module Axlsx
|
|
|
27
32
|
# graphic_frame's chart. That means that you can do stuff like
|
|
28
33
|
# c = worksheet.add_chart Axlsx::Chart
|
|
29
34
|
# c.start_at 5, 9
|
|
35
|
+
# @note the chart_type parameter will be replaced with object in v. 2.0.0
|
|
30
36
|
# @param [Drawing] drawing
|
|
31
37
|
# @param [Class] chart_type This is passed to the graphic frame for instantiation. must be Chart or a subclass of Chart
|
|
38
|
+
# @param object The object this anchor holds.
|
|
32
39
|
# @option options [Array] start_at the col, row to start at
|
|
33
40
|
# @option options [Array] end_at the col, row to end at
|
|
34
|
-
def initialize(drawing,
|
|
41
|
+
def initialize(drawing, options={})
|
|
35
42
|
@drawing = drawing
|
|
36
43
|
drawing.anchors << self
|
|
37
44
|
@from, @to = Marker.new, Marker.new(:col => 5, :row=>10)
|
|
38
|
-
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Creates a graphic frame and chart object associated with this anchor
|
|
48
|
+
# @return [Chart]
|
|
49
|
+
def add_chart(chart_type, options)
|
|
50
|
+
@object = GraphicFrame.new(self, chart_type, options)
|
|
51
|
+
@object.chart
|
|
39
52
|
end
|
|
40
53
|
|
|
41
54
|
def index
|
|
@@ -53,7 +66,7 @@ module Axlsx
|
|
|
53
66
|
xml.send('xdr:to') {
|
|
54
67
|
to.to_xml(xml)
|
|
55
68
|
}
|
|
56
|
-
@
|
|
69
|
+
@object.to_xml(xml)
|
|
57
70
|
xml.send('xdr:clientData')
|
|
58
71
|
}
|
|
59
72
|
end
|