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.
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