axlsx 1.1.0 → 1.2.0
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/.yardopts +5 -2
- data/CHANGELOG.md +78 -0
- data/LICENSE +1 -1
- data/README.md +132 -331
- data/Rakefile +17 -5
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +72 -0
- data/examples/conditional_formatting/getting_barred.rb +37 -0
- data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
- data/examples/conditional_formatting/scaled_colors.rb +39 -0
- data/examples/conditional_formatting/stop_and_go.rb +37 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +300 -152
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +45 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/sheet_view.rb +34 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/two_cell_anchor_image.rb +11 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +30 -15
- data/lib/axlsx/content_type/override.rb +29 -14
- data/lib/axlsx/doc_props/app.rb +161 -104
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axis.rb +106 -35
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +25 -7
- data/lib/axlsx/drawing/cat_axis.rb +50 -22
- data/lib/axlsx/drawing/chart.rb +69 -56
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +28 -12
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/line_series.rb +20 -4
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +61 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/pie_series.rb +18 -4
- data/lib/axlsx/drawing/scatter_chart.rb +12 -18
- 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_val.rb +33 -0
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
- data/lib/axlsx/drawing/view_3D.rb +44 -31
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +44 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/color.rb +0 -1
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/font.rb +2 -1
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +143 -50
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/stylesheet/xf.rb +2 -0
- data/lib/axlsx/util/constants.rb +36 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -21
- data/lib/axlsx/util/validators.rb +122 -5
- data/lib/axlsx/version.rb +2 -7
- data/lib/axlsx/workbook/defined_name.rb +174 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/shared_strings_table.rb +12 -13
- data/lib/axlsx/workbook/workbook.rb +71 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +45 -36
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/col.rb +17 -1
- data/lib/axlsx/workbook/worksheet/color_scale.rb +76 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +97 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +113 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +69 -12
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/table.rb +3 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +379 -233
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +31 -16
- data/test/benchmark.rb +30 -38
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_app.rb +31 -1
- data/test/doc_props/tc_core.rb +3 -1
- data/test/drawing/tc_axis.rb +46 -3
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +17 -13
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_cat_axis_data.rb +23 -13
- data/test/drawing/tc_chart.rb +29 -11
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +9 -11
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_pic.rb +22 -2
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +11 -13
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +6 -5
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +2 -3
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +100 -0
- data/test/profile.rb +2 -1
- data/test/rels/tc_relationship.rb +1 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_gradient_fill.rb +8 -0
- data/test/stylesheet/tc_pattern_fill.rb +7 -1
- data/test/stylesheet/tc_styles.rb +163 -3
- data/test/stylesheet/tc_table_style.rb +8 -0
- data/test/stylesheet/tc_table_style_element.rb +10 -1
- data/test/tc_helper.rb +1 -0
- data/test/tc_package.rb +93 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +95 -9
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/table/tc_table.rb +3 -11
- data/test/workbook/worksheet/tc_cell.rb +52 -18
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +9 -0
- data/test/workbook/worksheet/tc_color_scale.rb +29 -0
- data/test/workbook/worksheet/tc_comment.rb +57 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +217 -0
- data/test/workbook/worksheet/tc_data_bar.rb +39 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +11 -5
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_setup.rb +138 -0
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +44 -13
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +147 -50
- metadata +216 -148
- data/examples/example.csv +0 -1000
- data/examples/example.rb~ +0 -112
- data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/named_axis_data.rb +0 -36
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/val_axis_data.rb +0 -27
- data/lib/axlsx/stylesheet/#num_fmt.rb# +0 -69
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/ms_off_crypto.rb +0 -189
- data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
- data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
- data/lib/axlsx/util/parser.rb~ +0 -6
- data/lib/axlsx/util/storage.rb~ +0 -0
- data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
- data/lib/schema/dc.xsd~ +0 -118
- data/lib/schema/dcterms.xsd~ +0 -331
- data/lib/schema/opc-coreProperties.xsd~ +0 -50
- data/test/#benchmark.txt# +0 -7
- data/test/#tc_helper.rb# +0 -3
- data/test/benchmark.rb~ +0 -0
- data/test/benchmark.txt +0 -6
- data/test/benchmark.txt~ +0 -6
- data/test/drawing/tc_val_axis_data.rb +0 -17
- data/test/example.csv +0 -1000
- data/test/example.xlsx +0 -0
- data/test/example_streamed.xlsx +0 -0
- data/test/tc_axlsx.rb~ +0 -0
- data/test/tc_helper.rb~ +0 -3
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
data/examples/example.rb
CHANGED
|
@@ -1,71 +1,141 @@
|
|
|
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
|
+
sheet.rows[3].hidden = true
|
|
101
|
+
sheet.rows[1].outlineLevel = 2
|
|
50
102
|
end
|
|
51
103
|
end
|
|
104
|
+
#```
|
|
52
105
|
|
|
53
106
|
|
|
54
|
-
##
|
|
107
|
+
##Specifying Column Widths
|
|
55
108
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
sheet.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
image.start_at 2, 2
|
|
62
|
-
end
|
|
109
|
+
#```ruby
|
|
110
|
+
wb.add_worksheet(:name => "custom column widths") do |sheet|
|
|
111
|
+
sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
|
|
112
|
+
sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
|
|
113
|
+
sheet.column_widths nil, 3, 5, nil
|
|
63
114
|
end
|
|
115
|
+
#```
|
|
116
|
+
|
|
117
|
+
##Merging Cells.
|
|
118
|
+
|
|
119
|
+
#```ruby
|
|
120
|
+
wb.add_worksheet(:name => 'Merging Cells') do |sheet|
|
|
121
|
+
# cell level style overides when adding cells
|
|
122
|
+
sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
|
|
123
|
+
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
|
124
|
+
sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
|
|
125
|
+
sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
|
|
126
|
+
sheet.merge_cells("A4:C4")
|
|
127
|
+
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
|
128
|
+
sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
|
129
|
+
end
|
|
130
|
+
#```
|
|
64
131
|
|
|
65
132
|
##Add an Image with a hyperlink
|
|
66
133
|
|
|
134
|
+
#```ruby
|
|
67
135
|
wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
|
68
136
|
img = File.expand_path('../image1.jpeg', __FILE__)
|
|
137
|
+
# specifying the :hyperlink option will add a hyper link to your image.
|
|
138
|
+
# @note - Numbers does not support this part of the specification.
|
|
69
139
|
sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
|
70
140
|
image.width=720
|
|
71
141
|
image.height=666
|
|
@@ -73,159 +143,129 @@ wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
|
|
73
143
|
image.start_at 2, 2
|
|
74
144
|
end
|
|
75
145
|
end
|
|
146
|
+
#```
|
|
76
147
|
|
|
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
|
|
148
|
+
##Using Custom Formatting and date1904
|
|
113
149
|
|
|
150
|
+
#```ruby
|
|
151
|
+
require 'date'
|
|
114
152
|
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
|
|
153
|
+
date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
|
|
154
|
+
padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
|
|
155
|
+
percent = s.add_style(:format_code => "0000%", :border => Axlsx::STYLE_THIN_BORDER)
|
|
156
|
+
# wb.date1904 = true # Use the 1904 date system (Used by Excel for Mac < 2011)
|
|
157
|
+
wb.add_worksheet(:name => "Formatting Data") do |sheet|
|
|
158
|
+
sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
|
|
159
|
+
sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
|
|
124
160
|
end
|
|
125
161
|
end
|
|
162
|
+
#```
|
|
126
163
|
|
|
127
|
-
##
|
|
164
|
+
##Asian Language Support
|
|
128
165
|
|
|
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 }
|
|
166
|
+
#```ruby
|
|
167
|
+
wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
|
|
168
|
+
sheet.add_row ["日本語"]
|
|
169
|
+
sheet.add_row ["华语/華語"]
|
|
170
|
+
sheet.add_row ["한국어/조선말"]
|
|
136
171
|
end
|
|
172
|
+
#```
|
|
137
173
|
|
|
138
174
|
##Using formula
|
|
139
175
|
|
|
176
|
+
#```ruby
|
|
140
177
|
wb.add_worksheet(:name => "Using Formulas") do |sheet|
|
|
141
178
|
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
|
142
179
|
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
|
143
180
|
end
|
|
181
|
+
#```
|
|
182
|
+
|
|
183
|
+
##Auto Filter
|
|
184
|
+
|
|
185
|
+
#```ruby
|
|
186
|
+
wb.add_worksheet(:name => "Auto Filter") do |sheet|
|
|
187
|
+
sheet.add_row ["Build Matrix"]
|
|
188
|
+
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
|
189
|
+
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
|
190
|
+
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
191
|
+
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
192
|
+
sheet.auto_filter = "A2:D5"
|
|
193
|
+
end
|
|
194
|
+
#```
|
|
144
195
|
|
|
145
196
|
##Automatic cell types
|
|
146
197
|
|
|
198
|
+
#```ruby
|
|
147
199
|
wb.add_worksheet(:name => "Automatic cell types") do |sheet|
|
|
200
|
+
date_format = wb.styles.add_style :format_code => 'YYYY-MM-DD'
|
|
201
|
+
time_format = wb.styles.add_style :format_code => 'hh:mm:ss'
|
|
148
202
|
sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
|
|
149
|
-
sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1]
|
|
203
|
+
sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1], :style => [date_format, time_format]
|
|
150
204
|
end
|
|
205
|
+
#```
|
|
151
206
|
|
|
152
|
-
##Merging Cells.
|
|
153
|
-
|
|
154
|
-
wb.add_worksheet(:name => 'Merging Cells') do |sheet|
|
|
155
|
-
# cell level style overides when adding cells
|
|
156
|
-
sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
|
|
157
|
-
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
|
158
|
-
sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
|
|
159
|
-
sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
|
|
160
|
-
sheet.merge_cells("A4:C4")
|
|
161
|
-
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
|
162
|
-
sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
|
163
|
-
end
|
|
164
207
|
|
|
165
208
|
##Generating A Bar Chart
|
|
166
209
|
|
|
210
|
+
#```ruby
|
|
167
211
|
wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
|
168
212
|
sheet.add_row ["A Simple Bar Chart"]
|
|
169
|
-
sheet.add_row [
|
|
170
|
-
sheet.
|
|
171
|
-
|
|
172
|
-
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
213
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
214
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
|
215
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :title => sheet["A1"]
|
|
173
216
|
end
|
|
174
217
|
end
|
|
218
|
+
#```
|
|
175
219
|
|
|
176
220
|
##Hide Gridlines in chart
|
|
221
|
+
|
|
222
|
+
#```ruby
|
|
177
223
|
wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
|
|
178
|
-
sheet.add_row ["
|
|
179
|
-
sheet.add_row [
|
|
180
|
-
sheet.
|
|
181
|
-
|
|
182
|
-
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
224
|
+
sheet.add_row ["Bar Chart without gridlines"]
|
|
225
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
226
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
|
227
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"]
|
|
183
228
|
chart.valAxis.gridlines = false
|
|
184
229
|
chart.catAxis.gridlines = false
|
|
185
230
|
end
|
|
186
231
|
end
|
|
232
|
+
#```
|
|
187
233
|
|
|
188
234
|
##Generating A Pie Chart
|
|
189
235
|
|
|
236
|
+
#```ruby
|
|
190
237
|
wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
|
191
|
-
sheet.add_row ["
|
|
192
|
-
sheet.add_row [
|
|
193
|
-
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,
|
|
194
|
-
chart.add_series :data => sheet["
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
##Data over time
|
|
199
|
-
|
|
200
|
-
wb.add_worksheet(:name=>'Charting Dates') do |sheet|
|
|
201
|
-
# cell level style overides when adding cells
|
|
202
|
-
sheet.add_row ['Date', 'Value'], :sz => 16
|
|
203
|
-
sheet.add_row [Time.now - (7*60*60*24), 3]
|
|
204
|
-
sheet.add_row [Time.now - (6*60*60*24), 7]
|
|
205
|
-
sheet.add_row [Time.now - (5*60*60*24), 18]
|
|
206
|
-
sheet.add_row [Time.now - (4*60*60*24), 1]
|
|
207
|
-
sheet.add_chart(Axlsx::Bar3DChart) do |chart|
|
|
208
|
-
chart.start_at "B7"
|
|
209
|
-
chart.end_at "H27"
|
|
210
|
-
chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
|
|
238
|
+
sheet.add_row ["Simple Pie Chart"]
|
|
239
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
240
|
+
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
|
|
241
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
|
|
211
242
|
end
|
|
212
243
|
end
|
|
244
|
+
#```
|
|
213
245
|
|
|
214
246
|
##Generating A Line Chart
|
|
215
247
|
|
|
248
|
+
#```ruby
|
|
216
249
|
wb.add_worksheet(:name => "Line Chart") do |sheet|
|
|
217
|
-
sheet.add_row ["
|
|
218
|
-
sheet.add_row
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
chart.
|
|
250
|
+
sheet.add_row ["Simple Line Chart"]
|
|
251
|
+
sheet.add_row %w(first second)
|
|
252
|
+
4.times do
|
|
253
|
+
sheet.add_row [ rand(24)+1, rand(24)+1]
|
|
254
|
+
end
|
|
255
|
+
sheet.add_chart(Axlsx::Line3DChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
|
256
|
+
chart.start_at 0, 5
|
|
257
|
+
chart.end_at 10, 20
|
|
258
|
+
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"]
|
|
259
|
+
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"]
|
|
260
|
+
chart.catAxis.title = 'X Axis'
|
|
261
|
+
chart.valAxis.title = 'Y Axis'
|
|
224
262
|
end
|
|
225
263
|
end
|
|
264
|
+
#```
|
|
226
265
|
|
|
227
266
|
##Generating A Scatter Chart
|
|
228
267
|
|
|
268
|
+
#```ruby
|
|
229
269
|
wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
|
230
270
|
sheet.add_row ["First", 1, 5, 7, 9]
|
|
231
271
|
sheet.add_row ["", 1, 25, 49, 81]
|
|
@@ -238,81 +278,189 @@ wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
|
|
238
278
|
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"]
|
|
239
279
|
end
|
|
240
280
|
end
|
|
281
|
+
#```
|
|
241
282
|
|
|
242
|
-
##Auto Filter
|
|
243
283
|
|
|
244
|
-
|
|
284
|
+
##Tables
|
|
285
|
+
|
|
286
|
+
#```ruby
|
|
287
|
+
wb.add_worksheet(:name => "Table") do |sheet|
|
|
245
288
|
sheet.add_row ["Build Matrix"]
|
|
246
289
|
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
|
247
290
|
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
|
248
291
|
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
249
292
|
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
250
|
-
sheet.
|
|
293
|
+
sheet.add_table "A2:D5", :name => 'Build Matrix'
|
|
251
294
|
end
|
|
295
|
+
#```
|
|
252
296
|
|
|
253
|
-
##Tables
|
|
254
|
-
|
|
255
|
-
wb.add_worksheet(:name => "Table") do |sheet|
|
|
256
|
-
sheet.add_row ["Build Matrix"]
|
|
257
|
-
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
|
258
|
-
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
|
259
|
-
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
260
|
-
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
261
|
-
sheet.add_table "A2:D5", :name => 'Build Matrix'
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
##Specifying Column Widths
|
|
266
|
-
|
|
267
|
-
wb.add_worksheet(:name => "custom column widths") do |sheet|
|
|
268
|
-
sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
|
|
269
|
-
sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
|
|
270
|
-
sheet.column_widths nil, 3, 5, nil
|
|
271
|
-
end
|
|
272
297
|
|
|
273
298
|
##Fit to page printing
|
|
274
299
|
|
|
300
|
+
#```ruby
|
|
275
301
|
wb.add_worksheet(:name => "fit to page") do |sheet|
|
|
276
302
|
sheet.add_row ['this all goes on one page']
|
|
277
303
|
sheet.fit_to_page = true
|
|
278
304
|
end
|
|
305
|
+
##```
|
|
279
306
|
|
|
280
307
|
|
|
281
308
|
##Hide Gridlines in worksheet
|
|
309
|
+
|
|
310
|
+
#```ruby
|
|
282
311
|
wb.add_worksheet(:name => "No Gridlines") do |sheet|
|
|
283
312
|
sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
|
|
284
313
|
sheet.show_gridlines = false
|
|
285
314
|
end
|
|
315
|
+
##```
|
|
316
|
+
|
|
317
|
+
#```ruby
|
|
318
|
+
wb.add_worksheet(:name => "repeated header") do |sheet|
|
|
319
|
+
sheet.add_row %w(These Column Header Will Render On Every Printed Sheet)
|
|
320
|
+
200.times { sheet.add_row %w(1 2 3 4 5 6 7 8) }
|
|
321
|
+
wb.add_defined_name("'repeated header'!$1:$1", :local_sheet_id => sheet.index, :name => '_xlnm.Print_Titles')
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Sheet Protection and excluding cells from locking.
|
|
325
|
+
unlocked = wb.styles.add_style :locked => false
|
|
326
|
+
wb.add_worksheet(:name => 'Sheet Protection') do |sheet|
|
|
327
|
+
sheet.sheet_protection.password = 'fish'
|
|
328
|
+
sheet.add_row [1, 2 ,3] # These cells will be locked
|
|
329
|
+
sheet.add_row [4, 5, 6], :style => unlocked # these cells will not!
|
|
330
|
+
end
|
|
331
|
+
|
|
286
332
|
|
|
287
|
-
##Specify
|
|
333
|
+
##Specify page margins and other options for printing
|
|
334
|
+
|
|
335
|
+
#```ruby
|
|
288
336
|
margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
|
|
289
|
-
|
|
290
|
-
|
|
337
|
+
setup = {:fit_to_width => 1, :orientation => :landscape, :paper_width => "297mm", :paper_height => "210mm"}
|
|
338
|
+
options = {:grid_lines => true, :headings => true, :horizontal_centered => true}
|
|
339
|
+
wb.add_worksheet(:name => "print margins", :page_margins => margins, :page_setup => setup, :print_options => options) do |sheet|
|
|
340
|
+
sheet.add_row ["this sheet uses customized print settings"]
|
|
341
|
+
end
|
|
342
|
+
#```
|
|
343
|
+
|
|
344
|
+
## Add Comments to your spreadsheet
|
|
345
|
+
#``` ruby
|
|
346
|
+
wb.add_worksheet(:name => 'comments') do |sheet|
|
|
347
|
+
sheet.add_row ['Can we build it?']
|
|
348
|
+
sheet.add_comment :ref => 'A1', :author => 'Bob', :text => 'Yes We Can!'
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
## Frozen/Split panes
|
|
352
|
+
## ``` ruby
|
|
353
|
+
wb.add_worksheet(:name => 'fixed headers') do |sheet|
|
|
354
|
+
sheet.add_row(['', (0..99).map { |i| "column header #{i}" }].flatten )
|
|
355
|
+
100.times.with_index { |index| sheet << ["row header", (0..index).to_a].flatten }
|
|
356
|
+
sheet.sheet_view.pane do |pane|
|
|
357
|
+
pane.top_left_cell = "B2"
|
|
358
|
+
pane.state = :frozen_split
|
|
359
|
+
pane.y_split = 1
|
|
360
|
+
pane.x_split = 1
|
|
361
|
+
pane.active_pane = :bottom_right
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# conditional formatting
|
|
366
|
+
#
|
|
367
|
+
percent = wb.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
|
|
368
|
+
money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
|
369
|
+
|
|
370
|
+
# define the style for conditional formatting
|
|
371
|
+
profitable = wb.styles.add_style( :fg_color=>"FF428751",
|
|
372
|
+
:type => :dxf)
|
|
373
|
+
|
|
374
|
+
wb.add_worksheet(:name => "Conditional Cell Is") do |ws|
|
|
375
|
+
|
|
376
|
+
# Generate 20 rows of data
|
|
377
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
378
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
379
|
+
offset = 3
|
|
380
|
+
rows = 20
|
|
381
|
+
offset.upto(rows + offset) do |i|
|
|
382
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
386
|
+
ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
wb.add_worksheet(:name => "Conditional Color Scale") do |ws|
|
|
390
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
391
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
392
|
+
offset = 3
|
|
393
|
+
rows = 20
|
|
394
|
+
offset.upto(rows + offset) do |i|
|
|
395
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
396
|
+
end
|
|
397
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
398
|
+
color_scale = Axlsx::ColorScale.new
|
|
399
|
+
ws.add_conditional_formatting("B3:B100", { :type => :colorScale, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1, :color_scale => color_scale })
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
wb.add_worksheet(:name => "Conditional Data Bar") do |ws|
|
|
404
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
405
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
406
|
+
offset = 3
|
|
407
|
+
rows = 20
|
|
408
|
+
offset.upto(rows + offset) do |i|
|
|
409
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
410
|
+
end
|
|
411
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
412
|
+
data_bar = Axlsx::DataBar.new
|
|
413
|
+
ws.add_conditional_formatting("B3:B100", { :type => :dataBar, :dxfId => profitable, :priority => 1, :data_bar => data_bar })
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
wb.add_worksheet(:name => "Conditional Format Icon Set") do |ws|
|
|
417
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
418
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
419
|
+
offset = 3
|
|
420
|
+
rows = 20
|
|
421
|
+
offset.upto(rows + offset) do |i|
|
|
422
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
423
|
+
end
|
|
424
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
425
|
+
icon_set = Axlsx::IconSet.new
|
|
426
|
+
ws.add_conditional_formatting("B3:B100", { :type => :iconSet, :dxfId => profitable, :priority => 1, :icon_set => icon_set })
|
|
291
427
|
end
|
|
292
428
|
|
|
293
429
|
##Validate and Serialize
|
|
294
430
|
|
|
295
|
-
|
|
431
|
+
#```ruby
|
|
432
|
+
# Serialize directly to file
|
|
296
433
|
p.serialize("example.xlsx")
|
|
297
434
|
|
|
435
|
+
# or
|
|
436
|
+
|
|
437
|
+
#Serialize to a stream
|
|
298
438
|
s = p.to_stream()
|
|
299
439
|
File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
|
|
300
|
-
|
|
440
|
+
#```
|
|
301
441
|
|
|
302
442
|
##Using Shared Strings
|
|
443
|
+
|
|
444
|
+
#```ruby
|
|
445
|
+
# This is required by Numbers
|
|
303
446
|
p.use_shared_strings = true
|
|
304
447
|
p.serialize("shared_strings_example.xlsx")
|
|
448
|
+
#```
|
|
305
449
|
|
|
306
450
|
|
|
307
451
|
##Disabling Autowidth
|
|
452
|
+
|
|
453
|
+
#```ruby
|
|
308
454
|
p = Axlsx::Package.new
|
|
309
455
|
p.use_autowidth = false
|
|
310
456
|
wb = p.workbook
|
|
311
|
-
wb.add_worksheet(:name => "
|
|
312
|
-
sheet.add_row ['oh look! no autowidth
|
|
457
|
+
wb.add_worksheet(:name => "Manual Widths") do | sheet |
|
|
458
|
+
sheet.add_row ['oh look! no autowidth']
|
|
313
459
|
end
|
|
314
460
|
p.validate.each { |e| puts e.message }
|
|
315
461
|
p.serialize("no-use_autowidth.xlsx")
|
|
462
|
+
#```
|
|
463
|
+
|
|
316
464
|
|
|
317
465
|
|
|
318
466
|
|
data/examples/example.xlsx
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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'
|