axlsx 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/CHANGELOG.md +21 -0
  2. data/LICENSE +1 -1
  3. data/README.md +38 -415
  4. data/examples/#extractive.csv# +0 -0
  5. data/examples/#extractive.rb# +45 -0
  6. data/examples/chart_colors.rb +73 -0
  7. data/examples/chart_colors.rb~ +0 -0
  8. data/examples/chart_colors.xlsx +0 -0
  9. data/examples/colored_series_data.xlsx +0 -0
  10. data/examples/conditional_formatting/getting_barred.xlsx +0 -0
  11. data/examples/example.rb +174 -113
  12. data/examples/example.xlsx +0 -0
  13. data/examples/example_streamed.xlsx +0 -0
  14. data/examples/extractive.csv +1 -0
  15. data/examples/extractive.csv~ +1 -0
  16. data/examples/extractive.rb +42 -0
  17. data/examples/extractive.rb~ +3 -0
  18. data/examples/extractive.xlsx +0 -0
  19. data/examples/no-use_autowidth.xlsx +0 -0
  20. data/examples/shared_strings_example.xlsx +0 -0
  21. data/examples/stack.rb +21 -0
  22. data/examples/stack.rb~ +27 -0
  23. data/examples/stack.xlsx +0 -0
  24. data/examples/~$chart_colors.xlsx +0 -0
  25. data/examples/~$extractive.xlsx +0 -0
  26. data/lib/axlsx/drawing/ax_data_source.rb +25 -0
  27. data/lib/axlsx/drawing/ax_data_source.rb~ +55 -0
  28. data/lib/axlsx/drawing/axis.rb +12 -3
  29. data/lib/axlsx/drawing/bar_series.rb +23 -6
  30. data/lib/axlsx/drawing/cat_axis.rb +24 -0
  31. data/lib/axlsx/drawing/chart.rb +7 -5
  32. data/lib/axlsx/drawing/data_source.rb~ +51 -0
  33. data/lib/axlsx/drawing/drawing.rb +8 -4
  34. data/lib/axlsx/drawing/line_series.rb +20 -4
  35. data/lib/axlsx/drawing/num_data.rb +52 -0
  36. data/lib/axlsx/drawing/num_data.rb~ +51 -0
  37. data/lib/axlsx/drawing/num_data_source.rb +58 -0
  38. data/lib/axlsx/drawing/num_data_source.rb~ +54 -0
  39. data/lib/axlsx/drawing/num_val.rb +32 -0
  40. data/lib/axlsx/drawing/num_val.rb~ +40 -0
  41. data/lib/axlsx/drawing/pie_series.rb +18 -4
  42. data/lib/axlsx/drawing/ref.rb~ +41 -0
  43. data/lib/axlsx/drawing/scatter_series.rb +28 -2
  44. data/lib/axlsx/drawing/ser_axis.rb +1 -1
  45. data/lib/axlsx/drawing/series.rb +1 -1
  46. data/lib/axlsx/drawing/str_data.rb +42 -0
  47. data/lib/axlsx/drawing/str_data.rb~ +58 -0
  48. data/lib/axlsx/drawing/str_val.rb +33 -0
  49. data/lib/axlsx/drawing/str_val.rb~ +35 -0
  50. data/lib/axlsx/drawing/view_3D.rb +6 -3
  51. data/lib/axlsx/util/validators.rb +1 -1
  52. data/lib/axlsx/version.rb +1 -1
  53. data/lib/axlsx/workbook/worksheet/col.rb +2 -1
  54. data/lib/axlsx/workbook/worksheet/row.rb +44 -5
  55. data/lib/axlsx/workbook/worksheet/table.rb +1 -1
  56. data/test/drawing/tc_bar_series.rb +18 -13
  57. data/test/drawing/tc_cat_axis_data.rb +23 -13
  58. data/test/drawing/tc_chart.rb +0 -2
  59. data/test/drawing/tc_data_source.rb +17 -0
  60. data/test/drawing/tc_data_source.rb~ +30 -0
  61. data/test/drawing/tc_line_series.rb +3 -9
  62. data/test/drawing/tc_named_axis_data.rb +27 -0
  63. data/test/drawing/tc_num_data.rb +27 -0
  64. data/test/drawing/tc_num_data.rb~ +35 -0
  65. data/test/drawing/tc_num_val.rb +29 -0
  66. data/test/drawing/tc_num_val.rb~ +29 -0
  67. data/test/drawing/tc_pie_series.rb +4 -11
  68. data/test/drawing/tc_scatter_series.rb +6 -5
  69. data/test/drawing/tc_str_data.rb +18 -0
  70. data/test/drawing/tc_str_data.rb~ +30 -0
  71. data/test/drawing/tc_str_val.rb +21 -0
  72. data/test/drawing/tc_str_val.rb~ +26 -0
  73. data/test/drawing/tc_two_cell_anchor.rb +1 -1
  74. data/test/workbook/worksheet/tc_row.rb +6 -0
  75. metadata +65 -13
  76. data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
  77. data/lib/axlsx/drawing/named_axis_data.rb +0 -36
  78. data/lib/axlsx/drawing/val_axis_data.rb +0 -27
  79. 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
@@ -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=>:thin, :color =>"FFFF0000"}
31
- blue_border = s.add_style :border => {:style=>:thin, :color =>"FF0000FF"}
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
- ##Using Custom Formatting and date1904
41
- require 'date'
76
+ ##Styling Rows and Columns
77
+
78
+ #```ruby
42
79
  wb.styles do |s|
43
- date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
44
- padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
45
- percent = s.add_style(:format_code => "###0%", :border => Axlsx::STYLE_THIN_BORDER)
46
- # wb.date1904 = true # Use the 1904 date system (Used by Excel for Mac < 2011)
47
- wb.add_worksheet(:name => "Formatting Data") do |sheet|
48
- sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
49
- sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
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
- ##Add an Image
108
+ ##Specifying Column Widths
55
109
 
56
- wb.add_worksheet(:name => "Images") do |sheet|
57
- img = File.expand_path('../image1.jpeg', __FILE__)
58
- sheet.add_image(:image_src => img, :noSelect => true, :noMove => true) do |image|
59
- image.width=720
60
- image.height=666
61
- image.start_at 2, 2
62
- end
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
- ##Asian Language Support
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
- head = s.add_style :bg_color => "00", :fg_color => "FF"
116
- percent = s.add_style :num_fmt => 9
117
- wb.add_worksheet(:name => "Styling Rows") do |sheet|
118
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
119
- sheet.add_row [1, 2, 0.3, 4]
120
- sheet.add_row [1, 2, 0.2, 4]
121
- sheet.add_row [1, 2, 0.1, 4]
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
- ##Styling Cell Overrides
165
+ ##Asian Language Support
128
166
 
129
- wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
130
- # cell level style overides when adding cells
131
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
132
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
133
- # cell level style overrides via sheet range
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
- wb.add_worksheet(:name => "Auto Filter") do |sheet|
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.auto_filter = "A2:D5"
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
- #p.validate.each { |e| puts e.message }
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 => "No Magick") do | sheet |
316
- sheet.add_row ['oh look! no autowidth - and no magick loaded in your process']
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