axlsx 1.1.3 → 1.1.4
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/CHANGELOG.md +21 -0
- data/LICENSE +1 -1
- data/README.md +38 -415
- data/examples/#extractive.csv# +0 -0
- data/examples/#extractive.rb# +45 -0
- data/examples/chart_colors.rb +73 -0
- data/examples/chart_colors.rb~ +0 -0
- data/examples/chart_colors.xlsx +0 -0
- data/examples/colored_series_data.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/example.rb +174 -113
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.csv +1 -0
- data/examples/extractive.csv~ +1 -0
- data/examples/extractive.rb +42 -0
- data/examples/extractive.rb~ +3 -0
- data/examples/extractive.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/stack.rb +21 -0
- data/examples/stack.rb~ +27 -0
- data/examples/stack.xlsx +0 -0
- data/examples/~$chart_colors.xlsx +0 -0
- data/examples/~$extractive.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb +25 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +55 -0
- data/lib/axlsx/drawing/axis.rb +12 -3
- data/lib/axlsx/drawing/bar_series.rb +23 -6
- data/lib/axlsx/drawing/cat_axis.rb +24 -0
- data/lib/axlsx/drawing/chart.rb +7 -5
- data/lib/axlsx/drawing/data_source.rb~ +51 -0
- data/lib/axlsx/drawing/drawing.rb +8 -4
- data/lib/axlsx/drawing/line_series.rb +20 -4
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data.rb~ +51 -0
- data/lib/axlsx/drawing/num_data_source.rb +58 -0
- data/lib/axlsx/drawing/num_data_source.rb~ +54 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/num_val.rb~ +40 -0
- data/lib/axlsx/drawing/pie_series.rb +18 -4
- data/lib/axlsx/drawing/ref.rb~ +41 -0
- data/lib/axlsx/drawing/scatter_series.rb +28 -2
- data/lib/axlsx/drawing/ser_axis.rb +1 -1
- data/lib/axlsx/drawing/series.rb +1 -1
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_data.rb~ +58 -0
- data/lib/axlsx/drawing/str_val.rb +33 -0
- data/lib/axlsx/drawing/str_val.rb~ +35 -0
- data/lib/axlsx/drawing/view_3D.rb +6 -3
- data/lib/axlsx/util/validators.rb +1 -1
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/worksheet/col.rb +2 -1
- data/lib/axlsx/workbook/worksheet/row.rb +44 -5
- data/lib/axlsx/workbook/worksheet/table.rb +1 -1
- data/test/drawing/tc_bar_series.rb +18 -13
- data/test/drawing/tc_cat_axis_data.rb +23 -13
- data/test/drawing/tc_chart.rb +0 -2
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_data_source.rb~ +30 -0
- data/test/drawing/tc_line_series.rb +3 -9
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +27 -0
- data/test/drawing/tc_num_data.rb~ +35 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_num_val.rb~ +29 -0
- data/test/drawing/tc_pie_series.rb +4 -11
- data/test/drawing/tc_scatter_series.rb +6 -5
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_data.rb~ +30 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_str_val.rb~ +26 -0
- data/test/drawing/tc_two_cell_anchor.rb +1 -1
- data/test/workbook/worksheet/tc_row.rb +6 -0
- metadata +65 -13
- data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
- data/lib/axlsx/drawing/named_axis_data.rb +0 -36
- data/lib/axlsx/drawing/val_axis_data.rb +0 -27
- data/test/drawing/tc_val_axis_data.rb +0 -17
File without changes
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby -w -s
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
5
|
+
require 'axlsx'
|
6
|
+
|
7
|
+
data = [ ['oil-bbl',9591.411671,8860.714604,8237.936509,7700.523067,7231.831842,6819.307902,6453.297235,6126.251755,5832.182748,5566.276532,5324.618706,5103.992757,4901.730597,4715.600022,4543.718862,4384.488699,4236.543136,4098.707009,3969.963937,3849.430276,3736.33405,3629.997786,3529.824424,3435.28568,3345.912388,3261.286414,3181.033882,3104.819438,3032.341401,2963.327615,2897.531915,2834.731083,2774.722219,2717.320479,2662.357097,2609.677666,2559.140642,2510.616021,2463.984182,2419.134871,2375.966292,2334.384311,2294.301748,2255.637735,2218.317165,2182.270173,2147.431696,2113.741056,2081.141602,2049.580377,2019.007821,1989.377502,1960.645871,1932.772042,1905.71759,1879.446367,1853.924338,1829.119424,1805.001366,1781.541597,1758.713122,1736.490414,1714.849315,1693.766943,1673.22161,1653.192744,1633.660817,1614.607284,1596.014514,1577.865741,1560.145009,1542.837121,1525.927597,1509.402632,1493.249056,1477.454298,1462.006352,1446.893746,1432.105512,1417.631159,1403.460647,1389.584361,1375.993094,1362.678018,1349.630672,1336.842938,1324.307026,1312.015455,1299.961043,1288.136885,1276.536347,1265.153047,1253.980847,1243.013838,1232.246332,1221.672852,1211.288119,1201.087047,1191.064732,1181.216443,1171.537618,1162.023853,1152.670896,1143.474642,1134.431125,1125.536513,1116.787101,1108.179309,1099.709672,1091.37484,1083.171571,1075.096725,1067.147265,1059.320247,1051.612821,1044.022223,1036.545778,1029.180889,1021.92504,1014.775789],
|
8
|
+
|
9
|
+
['gas-mcf', 940970.153,836556.732,748476.939,673307.64,608520.158,552204.935,502892.3,459432.263,420911.806,386596.658,355889.491,328299.357,303418.988,280907.679,260478.232,241886.857,224925.287,209414.552,195200.029,182147.455,170139.707,159074.174,148860.596,139419.282,130679.626,122578.864,115061.035,108076.1,101579.19,95529.972,89892.104,84632.762,79722.24,75133.597,70842.349,66826.213,63064.865,59539.742,56233.86,53131.662,50218.869,47482.365,44910.082,42490.907,40214.588,38071.662,36053.382,34151.656,32358.989,30668.434,29073.545,27568.334,26147.237,24805.079,23537.041,22338.633,21205.67,20134.246,19120.717,18161.677,17253.941,16394.533,15580.663,14809.724,14079.269,13387.006,12730.786,12108.59,11518.524,10958.809,10427.774,9923.847,9445.55,8991.492,8560.364,8150.934,7762.041,7392.59,7041.551,6707.951,6390.874,6089.452,5802.871,5530.358,5271.185,5024.664,4790.145,4567.013,4354.687,4152.618,3960.286,3777.198,3602.889,3436.919,3278.87,3128.347,2984.976,2848.401,2718.287,2594.316,2476.184,2363.606,2256.309,2154.037,2056.545,1963.599,1874.982,1790.482,1709.903,1633.054,1559.758,1489.844,1423.151,1359.525,1298.821,1240.899,1185.628,1132.883,1082.544,1034.499],
|
10
|
+
|
11
|
+
['water-bbl',940.97,836.557,748.477,673.308,608.52,552.205,502.892,459.432,420.912,386.597,355.889,328.299,303.419,280.908,260.478,241.887,224.925,209.415,195.2,182.147,170.14,159.074,148.861,139.419,130.68,122.579,115.061,108.076,101.579,95.53,89.892,84.633,79.722,75.134,70.842,66.826,63.065,59.54,56.234,53.132,50.219,47.482,44.91,42.491,40.215,38.072,36.053,34.152,32.359,30.668,29.074,27.568,26.147,24.805,23.537,22.339,21.206,20.134,19.121,18.162,17.254,16.395,15.581,14.81,14.079,13.387,12.731,12.109,11.519,10.959,10.428,9.924,9.446,8.991,8.56,8.151,7.762,7.393,7.042,6.708,6.391,6.089,5.803,5.53,5.271,5.025,4.79,4.567,4.355,4.153,3.96,3.777,3.603,3.437,3.279,3.128,2.985,2.848,2.718,2.594,2.476,2.364,2.256,2.154,2.057,1.964,1.875,1.79,1.71,1.633,1.56,1.49,1.423,1.36,1.299,1.241,1.186,1.133,1.083,1.034] ]
|
12
|
+
|
13
|
+
p = Axlsx::Package.new
|
14
|
+
wb = p.workbook
|
15
|
+
wb.add_worksheet(:name => 'volumes') do |ws|
|
16
|
+
|
17
|
+
# perspective, rotX and rotY flatten the 3D chart
|
18
|
+
# hPercent sets the chart height to 100%
|
19
|
+
chart = ws.add_chart(Axlsx::Line3DChart, :perspective => 0, :hPercent => 100, :rotX => 0, :rotY => 0, :start_at => "A4", :end_at => 'M44', :title => 'Monthly forcast for Type Curve Gas secondary - gross ngl')
|
20
|
+
|
21
|
+
# Set up log based scaling and appropriate min/max values for Y axis
|
22
|
+
chart.valAxis.scaling.logBase = 10
|
23
|
+
chart.valAxis.scaling.min = 0.1
|
24
|
+
chart.valAxis.scaling.max = 10000000.0
|
25
|
+
|
26
|
+
# No poing in showing the series axis labels as the chart is flattened!
|
27
|
+
chart.serAxis.delete = true
|
28
|
+
|
29
|
+
# Knock the catAxis labels down to the forced min.
|
30
|
+
chart.catAxis.crosses = :min
|
31
|
+
|
32
|
+
# set up cat labels / markes to show every 12th item
|
33
|
+
chart.catAxis.tickLblSkip = 12
|
34
|
+
chart.catAxis.tickMarkSkip = 12
|
35
|
+
|
36
|
+
#rgb colors for our data series
|
37
|
+
colors = ['00FF00', 'FF0000', '0000FF']
|
38
|
+
|
39
|
+
data.each_with_index do |value, index|
|
40
|
+
ws.add_row value
|
41
|
+
chart.add_series :data => ws.rows.last.cells[(1..value.size-1)], :labels => (0..value.size).map{ |i| i }, :title => ws.rows.last.cells.first, :color => colors[index]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
p.serialize 'extractive.xlsx'
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby -w -s
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
4
|
+
require 'axlsx'
|
5
|
+
|
6
|
+
p = Axlsx::Package.new
|
7
|
+
wb = p.workbook
|
8
|
+
|
9
|
+
##Generating A Bar Chart
|
10
|
+
|
11
|
+
wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
12
|
+
sheet.add_row ["A Simple Bar Chart"]
|
13
|
+
sheet.add_row ["First", "Second", "Third"]
|
14
|
+
sheet.add_row [1,2,3.5]
|
15
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17", :title => sheet["A1"]) do |chart|
|
16
|
+
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :colors => ['FF0000', '00FF00', '0000FF'], :color => "000000"
|
17
|
+
chart.valAxis.label_rotation = -45
|
18
|
+
chart.catAxis.label_rotation = 45
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
##Generating A Bar Chart without data in the sheet
|
23
|
+
|
24
|
+
wb.add_worksheet(:name => "Hard Bar Chart") do |sheet|
|
25
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17", :title => "hard code chart") do |chart|
|
26
|
+
chart.add_series :data => [1,3,5], :labels => ['a', 'b', 'c'], :colors => ['FF0000', '00FF00', '0000FF']
|
27
|
+
chart.valAxis.label_rotation = -45
|
28
|
+
chart.catAxis.label_rotation = 45
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
##Generating A Pie Chart
|
34
|
+
|
35
|
+
wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
36
|
+
sheet.add_row ["First", "Second", "Third", "Fourth"]
|
37
|
+
sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
|
38
|
+
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
|
39
|
+
chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF']
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Line Chart
|
44
|
+
|
45
|
+
wb.add_worksheet(:name => "Line Chart") do |sheet|
|
46
|
+
sheet.add_row ["First", 1, 5, 7, 9]
|
47
|
+
sheet.add_row ["Second", 5, 2, 14, 9]
|
48
|
+
sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
49
|
+
chart.start_at 0, 2
|
50
|
+
chart.end_at 10, 15
|
51
|
+
chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"], :color => "FF0000"
|
52
|
+
chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"], :color => "00FF00"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
##Generating A Scatter Chart
|
57
|
+
|
58
|
+
wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
59
|
+
sheet.add_row ["First", 1, 5, 7, 9]
|
60
|
+
sheet.add_row ["", 1, 25, 49, 81]
|
61
|
+
sheet.add_row ["Second", 5, 2, 14, 9]
|
62
|
+
sheet.add_row ["", 5, 10, 15, 20]
|
63
|
+
sheet.add_chart(Axlsx::ScatterChart, :title => "example 7: Scatter Chart") do |chart|
|
64
|
+
chart.start_at 0, 4
|
65
|
+
chart.end_at 10, 19
|
66
|
+
chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"], :color => '00FF00'
|
67
|
+
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"], :color => 'FF0000'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
p.validate.each { |e| puts e.message }
|
73
|
+
p.serialize 'chart_colors.xlsx'
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/examples/example.rb
CHANGED
@@ -1,71 +1,142 @@
|
|
1
1
|
#!/usr/bin/env ruby -w -s
|
2
2
|
# -*- coding: utf-8 -*-
|
3
|
-
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
3
|
+
# $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
4
|
+
|
5
|
+
#```ruby
|
4
6
|
require 'axlsx'
|
5
7
|
|
6
8
|
p = Axlsx::Package.new
|
7
9
|
wb = p.workbook
|
10
|
+
#```
|
8
11
|
|
9
12
|
#A Simple Workbook
|
10
13
|
|
14
|
+
#```ruby
|
11
15
|
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
12
16
|
sheet.add_row ["First Column", "Second", "Third"]
|
13
17
|
sheet.add_row [1, 2, 3]
|
14
18
|
end
|
19
|
+
#```
|
15
20
|
|
16
21
|
#Using Custom Styles
|
17
22
|
|
23
|
+
#```ruby
|
24
|
+
# Each cell allows a single, predified style.
|
25
|
+
# When using add_row, the value in the :style array at the same index as the cell's column will be applied to that cell.
|
26
|
+
# Alternatively, you can apply a style to an entire row by using an integer value for :style.
|
27
|
+
|
18
28
|
wb.styles do |s|
|
19
29
|
black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
|
20
30
|
blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
|
21
31
|
wb.add_worksheet(:name => "Custom Styles") do |sheet|
|
32
|
+
|
33
|
+
# Applies the black_cell style to the first and third cell, and the blue_cell style to the second.
|
22
34
|
sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
|
35
|
+
|
36
|
+
# Applies the thin border to all three cells
|
23
37
|
sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
|
24
38
|
end
|
25
39
|
end
|
40
|
+
#```
|
41
|
+
|
42
|
+
##Styling Cell Overrides
|
43
|
+
|
44
|
+
#```ruby
|
45
|
+
#Some of the style attributes can also be set at the cell level. Cell level styles take precedence over Custom Styles shown in the previous example.
|
46
|
+
|
47
|
+
wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
|
48
|
+
|
49
|
+
# this will set the font size for each cell.
|
50
|
+
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
|
51
|
+
|
52
|
+
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
53
|
+
|
54
|
+
# You can also apply cell style overrides to a range of cells
|
55
|
+
sheet["A1:D1"].each { |c| c.color = "FF0000" }
|
56
|
+
sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
57
|
+
end
|
58
|
+
#```
|
26
59
|
|
27
60
|
#Using Custom Border Styles
|
28
61
|
|
62
|
+
#```ruby
|
63
|
+
#Axlsx defines a thin border style, but you can easily create and use your own.
|
29
64
|
wb.styles do |s|
|
30
|
-
red_border = s.add_style :border => {:style
|
31
|
-
blue_border = s.add_style :border => {:style
|
65
|
+
red_border = s.add_style :border => { :style => :thick, :color =>"FFFF0000" }
|
66
|
+
blue_border = s.add_style :border => { :style => :thick, :color =>"FF0000FF" }
|
32
67
|
|
33
68
|
wb.add_worksheet(:name => "Custom Borders") do |sheet|
|
34
69
|
sheet.add_row ["wrap", "me", "Up in Red"], :style => red_border
|
35
70
|
sheet.add_row [1, 2, 3], :style => blue_border
|
36
71
|
end
|
37
72
|
end
|
73
|
+
#```
|
38
74
|
|
39
75
|
|
40
|
-
##
|
41
|
-
|
76
|
+
##Styling Rows and Columns
|
77
|
+
|
78
|
+
#```ruby
|
42
79
|
wb.styles do |s|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
sheet.add_row [
|
49
|
-
sheet.add_row [
|
80
|
+
head = s.add_style :bg_color => "00", :fg_color => "FF"
|
81
|
+
percent = s.add_style :num_fmt => 9
|
82
|
+
wb.add_worksheet(:name => "Columns and Rows") do |sheet|
|
83
|
+
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4', 'col5']
|
84
|
+
sheet.add_row [1, 2, 0.3, 4, 5.0]
|
85
|
+
sheet.add_row [1, 2, 0.2, 4, 5.0]
|
86
|
+
sheet.add_row [1, 2, 0.1, 4, 5.0]
|
87
|
+
|
88
|
+
#apply the percent style to the column at index 2 skipping the first row.
|
89
|
+
sheet.col_style 2, percent, :row_offset => 1
|
90
|
+
|
91
|
+
# apply the head style to the first row.
|
92
|
+
sheet.row_style 0, head
|
93
|
+
|
94
|
+
#Hide the 5th column
|
95
|
+
sheet.column_info[4].hidden = true
|
96
|
+
|
97
|
+
#Set the second column outline level
|
98
|
+
sheet.column_info[1].outlineLevel = 2
|
99
|
+
|
100
|
+
#TODO rows hidden, outline etc.
|
101
|
+
sheet.rows[3].hidden = true
|
102
|
+
sheet.rows[1].outlineLevel = 2
|
50
103
|
end
|
51
104
|
end
|
105
|
+
#```
|
52
106
|
|
53
107
|
|
54
|
-
##
|
108
|
+
##Specifying Column Widths
|
55
109
|
|
56
|
-
|
57
|
-
|
58
|
-
sheet.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
110
|
+
#```ruby
|
111
|
+
wb.add_worksheet(:name => "custom column widths") do |sheet|
|
112
|
+
sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
|
113
|
+
sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
|
114
|
+
sheet.column_widths nil, 3, 5, nil
|
115
|
+
end
|
116
|
+
#```
|
117
|
+
|
118
|
+
##Merging Cells.
|
119
|
+
|
120
|
+
#```ruby
|
121
|
+
wb.add_worksheet(:name => 'Merging Cells') do |sheet|
|
122
|
+
# cell level style overides when adding cells
|
123
|
+
sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
|
124
|
+
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
125
|
+
sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
|
126
|
+
sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
|
127
|
+
sheet.merge_cells("A4:C4")
|
128
|
+
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
129
|
+
sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
63
130
|
end
|
131
|
+
#```
|
64
132
|
|
65
133
|
##Add an Image with a hyperlink
|
66
134
|
|
135
|
+
#```ruby
|
67
136
|
wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
68
137
|
img = File.expand_path('../image1.jpeg', __FILE__)
|
138
|
+
# specifying the :hyperlink option will add a hyper link to your image.
|
139
|
+
# @note - Numbers does not support this part of the specification.
|
69
140
|
sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
70
141
|
image.width=720
|
71
142
|
image.height=666
|
@@ -73,99 +144,71 @@ wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
|
73
144
|
image.start_at 2, 2
|
74
145
|
end
|
75
146
|
end
|
147
|
+
#```
|
76
148
|
|
77
|
-
##
|
78
|
-
|
79
|
-
wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
|
80
|
-
sheet.add_row ["日本語"]
|
81
|
-
sheet.add_row ["华语/華語"]
|
82
|
-
sheet.add_row ["한국어/조선말"]
|
83
|
-
end
|
84
|
-
|
85
|
-
##Styling Columns
|
86
|
-
|
87
|
-
wb.styles do |s|
|
88
|
-
percent = s.add_style :num_fmt => 9
|
89
|
-
wb.add_worksheet(:name => "Styling Columns") do |sheet|
|
90
|
-
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
91
|
-
sheet.add_row [1, 2, 0.3, 4]
|
92
|
-
sheet.add_row [1, 2, 0.2, 4]
|
93
|
-
sheet.add_row [1, 2, 0.1, 4]
|
94
|
-
sheet.col_style 2, percent, :row_offset => 1
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
##Hiding Columns
|
99
|
-
|
100
|
-
wb.styles do |s|
|
101
|
-
percent = s.add_style :num_fmt => 9
|
102
|
-
wb.add_worksheet(:name => "Hidden Column") do |sheet|
|
103
|
-
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
104
|
-
sheet.add_row [1, 2, 0.3, 4]
|
105
|
-
sheet.add_row [1, 2, 0.2, 4]
|
106
|
-
sheet.add_row [1, 2, 0.1, 4]
|
107
|
-
sheet.col_style 2, percent, :row_offset => 1
|
108
|
-
sheet.column_info[1].hidden = true
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
##Styling Rows
|
149
|
+
##Using Custom Formatting and date1904
|
113
150
|
|
151
|
+
#```ruby
|
152
|
+
require 'date'
|
114
153
|
wb.styles do |s|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
sheet.add_row [
|
121
|
-
sheet.add_row [
|
122
|
-
sheet.col_style 2, percent, :row_offset => 1
|
123
|
-
sheet.row_style 0, head
|
154
|
+
date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
|
155
|
+
padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
|
156
|
+
percent = s.add_style(:format_code => "0000%", :border => Axlsx::STYLE_THIN_BORDER)
|
157
|
+
# wb.date1904 = true # Use the 1904 date system (Used by Excel for Mac < 2011)
|
158
|
+
wb.add_worksheet(:name => "Formatting Data") do |sheet|
|
159
|
+
sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
|
160
|
+
sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
|
124
161
|
end
|
125
162
|
end
|
163
|
+
#```
|
126
164
|
|
127
|
-
##
|
165
|
+
##Asian Language Support
|
128
166
|
|
129
|
-
|
130
|
-
|
131
|
-
sheet.add_row [
|
132
|
-
sheet.add_row [
|
133
|
-
|
134
|
-
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
135
|
-
sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
167
|
+
#```ruby
|
168
|
+
wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
|
169
|
+
sheet.add_row ["日本語"]
|
170
|
+
sheet.add_row ["华语/華語"]
|
171
|
+
sheet.add_row ["한국어/조선말"]
|
136
172
|
end
|
173
|
+
#```
|
137
174
|
|
138
175
|
##Using formula
|
139
176
|
|
177
|
+
#```ruby
|
140
178
|
wb.add_worksheet(:name => "Using Formulas") do |sheet|
|
141
179
|
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
142
180
|
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
143
181
|
end
|
182
|
+
#```
|
183
|
+
|
184
|
+
##Auto Filter
|
185
|
+
|
186
|
+
#```ruby
|
187
|
+
wb.add_worksheet(:name => "Auto Filter") do |sheet|
|
188
|
+
sheet.add_row ["Build Matrix"]
|
189
|
+
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
190
|
+
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
191
|
+
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
192
|
+
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
193
|
+
sheet.auto_filter = "A2:D5"
|
194
|
+
end
|
195
|
+
#```
|
144
196
|
|
145
197
|
##Automatic cell types
|
146
198
|
|
199
|
+
#```ruby
|
147
200
|
wb.add_worksheet(:name => "Automatic cell types") do |sheet|
|
201
|
+
date_format = wb.styles.add_style :format_code => 'YYYY-MM-DD'
|
202
|
+
time_format = wb.styles.add_style :format_code => 'hh:mm:ss'
|
148
203
|
sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
|
149
|
-
date_format = wb.styles.add_style :format_code => 'YYYY-MMM-DD'
|
150
|
-
time_format = wb.styles.add_style :format_code => 'HH:MM:SS'
|
151
204
|
sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1], :style => [date_format, time_format]
|
152
205
|
end
|
206
|
+
#```
|
153
207
|
|
154
|
-
##Merging Cells.
|
155
|
-
|
156
|
-
wb.add_worksheet(:name => 'Merging Cells') do |sheet|
|
157
|
-
# cell level style overides when adding cells
|
158
|
-
sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
|
159
|
-
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
160
|
-
sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
|
161
|
-
sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
|
162
|
-
sheet.merge_cells("A4:C4")
|
163
|
-
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
164
|
-
sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
165
|
-
end
|
166
208
|
|
167
209
|
##Generating A Bar Chart
|
168
210
|
|
211
|
+
#```ruby
|
169
212
|
wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
170
213
|
sheet.add_row ["A Simple Bar Chart"]
|
171
214
|
sheet.add_row ["First", "Second", "Third"]
|
@@ -176,8 +219,11 @@ wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
|
176
219
|
chart.catAxis.label_rotation = 45
|
177
220
|
end
|
178
221
|
end
|
222
|
+
#```
|
179
223
|
|
180
224
|
##Hide Gridlines in chart
|
225
|
+
|
226
|
+
#```ruby
|
181
227
|
wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
|
182
228
|
sheet.add_row ["A Simple Bar Chart"]
|
183
229
|
sheet.add_row ["First", "Second", "Third"]
|
@@ -188,9 +234,11 @@ wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
|
|
188
234
|
chart.catAxis.gridlines = false
|
189
235
|
end
|
190
236
|
end
|
237
|
+
#```
|
191
238
|
|
192
239
|
##Generating A Pie Chart
|
193
240
|
|
241
|
+
#```ruby
|
194
242
|
wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
195
243
|
sheet.add_row ["First", "Second", "Third", "Fourth"]
|
196
244
|
sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
|
@@ -198,9 +246,11 @@ wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
|
198
246
|
chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
|
199
247
|
end
|
200
248
|
end
|
249
|
+
#```
|
201
250
|
|
202
251
|
##Data over time
|
203
252
|
|
253
|
+
#```ruby
|
204
254
|
wb.add_worksheet(:name=>'Charting Dates') do |sheet|
|
205
255
|
# cell level style overides when adding cells
|
206
256
|
sheet.add_row ['Date', 'Value'], :sz => 16
|
@@ -214,9 +264,11 @@ wb.add_worksheet(:name=>'Charting Dates') do |sheet|
|
|
214
264
|
chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
|
215
265
|
end
|
216
266
|
end
|
267
|
+
#```
|
217
268
|
|
218
269
|
##Generating A Line Chart
|
219
270
|
|
271
|
+
#```ruby
|
220
272
|
wb.add_worksheet(:name => "Line Chart") do |sheet|
|
221
273
|
sheet.add_row ["First", 1, 5, 7, 9]
|
222
274
|
sheet.add_row ["Second", 5, 2, 14, 9]
|
@@ -227,9 +279,11 @@ wb.add_worksheet(:name => "Line Chart") do |sheet|
|
|
227
279
|
chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
|
228
280
|
end
|
229
281
|
end
|
282
|
+
#```
|
230
283
|
|
231
284
|
##Generating A Scatter Chart
|
232
285
|
|
286
|
+
#```ruby
|
233
287
|
wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
234
288
|
sheet.add_row ["First", 1, 5, 7, 9]
|
235
289
|
sheet.add_row ["", 1, 25, 49, 81]
|
@@ -242,81 +296,88 @@ wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
|
242
296
|
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"]
|
243
297
|
end
|
244
298
|
end
|
299
|
+
#```
|
245
300
|
|
246
|
-
##Auto Filter
|
247
301
|
|
248
|
-
|
302
|
+
##Tables
|
303
|
+
|
304
|
+
#```ruby
|
305
|
+
wb.add_worksheet(:name => "Table") do |sheet|
|
249
306
|
sheet.add_row ["Build Matrix"]
|
250
307
|
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
251
308
|
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
252
309
|
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
253
310
|
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
254
|
-
sheet.
|
311
|
+
sheet.add_table "A2:D5", :name => 'Build Matrix'
|
255
312
|
end
|
313
|
+
#```
|
256
314
|
|
257
|
-
##Tables
|
258
|
-
|
259
|
-
wb.add_worksheet(:name => "Table") do |sheet|
|
260
|
-
sheet.add_row ["Build Matrix"]
|
261
|
-
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
262
|
-
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
263
|
-
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
264
|
-
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
265
|
-
sheet.add_table "A2:D5", :name => 'Build Matrix'
|
266
|
-
end
|
267
|
-
|
268
|
-
|
269
|
-
##Specifying Column Widths
|
270
|
-
|
271
|
-
wb.add_worksheet(:name => "custom column widths") do |sheet|
|
272
|
-
sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
|
273
|
-
sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
|
274
|
-
sheet.column_widths nil, 3, 5, nil
|
275
|
-
end
|
276
315
|
|
277
316
|
##Fit to page printing
|
278
317
|
|
318
|
+
#```ruby
|
279
319
|
wb.add_worksheet(:name => "fit to page") do |sheet|
|
280
320
|
sheet.add_row ['this all goes on one page']
|
281
321
|
sheet.fit_to_page = true
|
282
322
|
end
|
323
|
+
#```
|
283
324
|
|
284
325
|
|
285
326
|
##Hide Gridlines in worksheet
|
327
|
+
|
328
|
+
#```ruby
|
286
329
|
wb.add_worksheet(:name => "No Gridlines") do |sheet|
|
287
330
|
sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
|
288
331
|
sheet.show_gridlines = false
|
289
332
|
end
|
333
|
+
#```
|
334
|
+
|
290
335
|
|
291
336
|
##Specify Page Margins for printing
|
337
|
+
|
338
|
+
#```ruby
|
292
339
|
margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
|
293
340
|
wb.add_worksheet(:name => "print margins", :page_margins => margins) do |sheet|
|
294
341
|
sheet.add_row ["this sheet uses customized page margins for printing"]
|
295
342
|
end
|
343
|
+
#```
|
344
|
+
|
296
345
|
|
297
346
|
##Validate and Serialize
|
298
347
|
|
299
|
-
|
348
|
+
#```ruby
|
349
|
+
# Serialize directly to file
|
300
350
|
p.serialize("example.xlsx")
|
301
351
|
|
352
|
+
# or
|
353
|
+
|
354
|
+
#Serialize to a stream
|
302
355
|
s = p.to_stream()
|
303
356
|
File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
|
304
|
-
|
357
|
+
#```
|
305
358
|
|
306
359
|
##Using Shared Strings
|
360
|
+
|
361
|
+
#```ruby
|
362
|
+
# This is required by Numbers
|
307
363
|
p.use_shared_strings = true
|
308
364
|
p.serialize("shared_strings_example.xlsx")
|
365
|
+
#```
|
309
366
|
|
310
367
|
|
311
368
|
##Disabling Autowidth
|
369
|
+
|
370
|
+
#```ruby
|
312
371
|
p = Axlsx::Package.new
|
313
372
|
p.use_autowidth = false
|
314
373
|
wb = p.workbook
|
315
|
-
wb.add_worksheet(:name => "
|
316
|
-
sheet.add_row ['oh look! no autowidth
|
374
|
+
wb.add_worksheet(:name => "Manual Widths") do | sheet |
|
375
|
+
sheet.add_row ['oh look! no autowidth']
|
317
376
|
end
|
318
377
|
p.validate.each { |e| puts e.message }
|
319
378
|
p.serialize("no-use_autowidth.xlsx")
|
379
|
+
#```
|
380
|
+
|
320
381
|
|
321
382
|
|
322
383
|
|