axlsx 1.0.17 → 1.1.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/CHANGELOG.md +11 -3
- data/README.md +159 -51
- data/examples/example.csv +1000 -0
- data/examples/example.rb +255 -150
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/lib/axlsx/content_type/content_type.rb +12 -12
- data/lib/axlsx/content_type/default.rb +9 -6
- data/lib/axlsx/content_type/override.rb +12 -8
- data/lib/axlsx/doc_props/app.rb +37 -40
- data/lib/axlsx/doc_props/core.rb +12 -17
- data/lib/axlsx/drawing/axis.rb +38 -19
- data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
- data/lib/axlsx/drawing/bar_series.rb +13 -14
- data/lib/axlsx/drawing/cat_axis.rb +15 -14
- data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
- data/lib/axlsx/drawing/chart.rb +39 -40
- data/lib/axlsx/drawing/drawing.rb +15 -12
- data/lib/axlsx/drawing/graphic_frame.rb +21 -21
- data/lib/axlsx/drawing/hyperlink.rb +12 -11
- data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
- data/lib/axlsx/drawing/line_series.rb +11 -11
- data/lib/axlsx/drawing/marker.rb +10 -8
- data/lib/axlsx/drawing/named_axis_data.rb +36 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
- data/lib/axlsx/drawing/pic.rb +25 -37
- data/lib/axlsx/drawing/picture_locking.rb +21 -18
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
- data/lib/axlsx/drawing/pie_series.rb +15 -12
- data/lib/axlsx/drawing/scaling.rb +10 -10
- data/lib/axlsx/drawing/scatter_chart.rb +69 -0
- data/lib/axlsx/drawing/scatter_series.rb +39 -0
- data/lib/axlsx/drawing/ser_axis.rb +10 -10
- data/lib/axlsx/drawing/series.rb +15 -15
- data/lib/axlsx/drawing/series_title.rb +14 -14
- data/lib/axlsx/drawing/title.rb +26 -26
- data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
- data/lib/axlsx/drawing/val_axis.rb +8 -7
- data/lib/axlsx/drawing/val_axis_data.rb +17 -17
- data/lib/axlsx/drawing/view_3D.rb +22 -20
- data/lib/axlsx/package.rb +60 -43
- data/lib/axlsx/rels/relationship.rb +11 -8
- data/lib/axlsx/rels/relationships.rb +7 -1
- data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
- data/lib/axlsx/stylesheet/border.rb +27 -23
- data/lib/axlsx/stylesheet/border_pr.rb +16 -15
- data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
- data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
- data/lib/axlsx/stylesheet/cell_style.rb +8 -5
- data/lib/axlsx/stylesheet/color.rb +20 -14
- data/lib/axlsx/stylesheet/fill.rb +7 -5
- data/lib/axlsx/stylesheet/font.rb +21 -14
- data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
- data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
- data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
- data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
- data/lib/axlsx/stylesheet/styles.rb +47 -35
- data/lib/axlsx/stylesheet/table_style.rb +9 -4
- data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
- data/lib/axlsx/stylesheet/table_styles.rb +11 -8
- data/lib/axlsx/stylesheet/xf.rb +29 -25
- data/lib/axlsx/util/constants.rb +20 -14
- data/lib/axlsx/util/simple_typed_list.rb +18 -9
- data/lib/axlsx/util/validators.rb +13 -6
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
- data/lib/axlsx/workbook/workbook.rb +58 -34
- data/lib/axlsx/workbook/worksheet/cell.rb +149 -132
- data/lib/axlsx/workbook/worksheet/col.rb +114 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
- data/lib/axlsx/workbook/worksheet/row.rb +40 -23
- data/lib/axlsx/workbook/worksheet/table.rb +96 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +243 -127
- data/lib/axlsx.rb +30 -9
- data/lib/schema/dc.xsd +5 -5
- data/lib/schema/dcmitype.xsd +5 -3
- data/lib/schema/dcterms.xsd +15 -15
- data/lib/schema/opc-coreProperties.xsd +6 -2
- data/lib/schema/xml.xsd +7 -8
- data/test/#benchmark.txt# +7 -0
- data/test/#tc_helper.rb# +3 -0
- data/test/benchmark.rb +81 -0
- data/test/benchmark.rb~ +0 -0
- data/test/benchmark.txt +6 -0
- data/test/benchmark.txt~ +6 -0
- data/test/content_type/tc_content_type.rb +30 -32
- data/test/content_type/tc_default.rb +8 -23
- data/test/content_type/tc_override.rb +7 -21
- data/test/doc_props/tc_app.rb +2 -8
- data/test/doc_props/tc_core.rb +6 -7
- data/test/drawing/tc_axis.rb +7 -3
- data/test/drawing/tc_bar_3D_chart.rb +6 -7
- data/test/drawing/tc_bar_series.rb +4 -5
- data/test/drawing/tc_cat_axis.rb +2 -3
- data/test/drawing/tc_cat_axis_data.rb +2 -3
- data/test/drawing/tc_chart.rb +13 -14
- data/test/drawing/tc_drawing.rb +7 -8
- data/test/drawing/tc_graphic_frame.rb +3 -4
- data/test/drawing/tc_hyperlink.rb +2 -3
- data/test/drawing/tc_line_3d_chart.rb +5 -6
- data/test/drawing/tc_line_series.rb +3 -4
- data/test/drawing/tc_marker.rb +3 -4
- data/test/drawing/tc_one_cell_anchor.rb +6 -7
- data/test/drawing/tc_pic.rb +8 -9
- data/test/drawing/tc_picture_locking.rb +2 -3
- data/test/drawing/tc_pie_3D_chart.rb +5 -6
- data/test/drawing/tc_pie_series.rb +4 -5
- data/test/drawing/tc_scaling.rb +3 -4
- data/test/drawing/tc_scatter_chart.rb +43 -0
- data/test/drawing/tc_scatter_series.rb +20 -0
- data/test/drawing/tc_ser_axis.rb +2 -3
- data/test/drawing/tc_series.rb +4 -5
- data/test/drawing/tc_series_title.rb +4 -5
- data/test/drawing/tc_title.rb +4 -5
- data/test/drawing/tc_two_cell_anchor.rb +4 -5
- data/test/drawing/tc_val_axis.rb +2 -3
- data/test/drawing/tc_val_axis_data.rb +2 -3
- data/test/drawing/tc_view_3D.rb +6 -7
- data/test/example.csv +1000 -0
- data/test/example.xlsx +0 -0
- data/test/example_streamed.xlsx +0 -0
- data/test/profile.rb +33 -0
- data/test/rels/tc_relationship.rb +5 -6
- data/test/rels/tc_relationships.rb +4 -5
- data/test/stylesheet/tc_border.rb +3 -4
- data/test/stylesheet/tc_border_pr.rb +3 -4
- data/test/stylesheet/tc_cell_alignment.rb +10 -6
- data/test/stylesheet/tc_cell_protection.rb +2 -3
- data/test/stylesheet/tc_cell_style.rb +2 -3
- data/test/stylesheet/tc_color.rb +2 -3
- data/test/stylesheet/tc_fill.rb +1 -2
- data/test/stylesheet/tc_font.rb +12 -5
- data/test/stylesheet/tc_gradient_fill.rb +1 -2
- data/test/stylesheet/tc_gradient_stop.rb +1 -2
- data/test/stylesheet/tc_num_fmt.rb +1 -2
- data/test/stylesheet/tc_pattern_fill.rb +3 -4
- data/test/stylesheet/tc_styles.rb +16 -6
- data/test/stylesheet/tc_table_style.rb +2 -3
- data/test/stylesheet/tc_table_style_element.rb +2 -3
- data/test/stylesheet/tc_table_styles.rb +3 -4
- data/test/stylesheet/tc_xf.rb +16 -17
- data/test/tc_axlsx.rb +39 -0
- data/test/tc_axlsx.rb~ +0 -0
- data/test/tc_helper.rb +3 -0
- data/test/tc_helper.rb~ +3 -0
- data/test/tc_package.rb +13 -10
- data/test/util/tc_simple_typed_list.rb +8 -9
- data/test/util/tc_validators.rb +7 -8
- data/test/workbook/tc_shared_strings_table.rb +5 -6
- data/test/workbook/tc_workbook.rb +24 -6
- data/test/workbook/worksheet/table/tc_table.rb +71 -0
- data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
- data/test/workbook/worksheet/tc_cell.rb +62 -18
- data/test/workbook/worksheet/tc_col.rb +59 -0
- data/test/workbook/worksheet/tc_col.rb~ +10 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +126 -0
- data/test/workbook/worksheet/tc_page_margins.rb +97 -0
- data/test/workbook/worksheet/tc_row.rb +54 -4
- data/test/workbook/worksheet/tc_worksheet.rb +177 -34
- metadata +69 -41
- data/test/drawing/tc_hyperlink.rb~ +0 -71
- data/test/workbook/tc_shared_strings_table.rb~ +0 -8
data/examples/example.rb
CHANGED
|
@@ -1,213 +1,318 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
1
|
+
#!/usr/bin/env ruby -w -s
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
3
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
4
|
+
require 'axlsx'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
p = Axlsx::Package.new
|
|
7
|
+
wb = p.workbook
|
|
7
8
|
|
|
8
9
|
#A Simple Workbook
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
|
12
|
+
sheet.add_row ["First Column", "Second", "Third"]
|
|
13
|
+
sheet.add_row [1, 2, 3]
|
|
14
|
+
end
|
|
14
15
|
|
|
15
16
|
#Using Custom Styles
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
wb.styles do |s|
|
|
19
|
+
black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
|
|
20
|
+
blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
|
|
21
|
+
wb.add_worksheet(:name => "Custom Styles") do |sheet|
|
|
22
|
+
sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
|
|
23
|
+
sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#Using Custom Border Styles
|
|
28
|
+
|
|
29
|
+
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"}
|
|
32
|
+
|
|
33
|
+
wb.add_worksheet(:name => "Custom Borders") do |sheet|
|
|
34
|
+
sheet.add_row ["wrap", "me", "Up in Red"], :style => red_border
|
|
35
|
+
sheet.add_row [1, 2, 3], :style => blue_border
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
25
39
|
|
|
26
40
|
##Using Custom Formatting and date1904
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
require 'date'
|
|
42
|
+
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 => "0000%", :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]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
38
53
|
|
|
39
54
|
##Add an Image
|
|
40
55
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
63
|
+
end
|
|
49
64
|
|
|
50
65
|
##Add an Image with a hyperlink
|
|
51
66
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
|
68
|
+
img = File.expand_path('../image1.jpeg', __FILE__)
|
|
69
|
+
sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
|
70
|
+
image.width=720
|
|
71
|
+
image.height=666
|
|
72
|
+
image.hyperlink.tooltip = "Labeled Link"
|
|
73
|
+
image.start_at 2, 2
|
|
74
|
+
end
|
|
75
|
+
end
|
|
61
76
|
|
|
62
77
|
##Asian Language Support
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
|
|
80
|
+
sheet.add_row ["日本語"]
|
|
81
|
+
sheet.add_row ["华语/華語"]
|
|
82
|
+
sheet.add_row ["한국어/조선말"]
|
|
83
|
+
end
|
|
69
84
|
|
|
70
85
|
##Styling Columns
|
|
71
86
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
82
111
|
|
|
83
112
|
##Styling Rows
|
|
84
113
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
114
|
+
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
|
|
124
|
+
end
|
|
125
|
+
end
|
|
97
126
|
|
|
98
127
|
##Styling Cell Overrides
|
|
99
128
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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 }
|
|
136
|
+
end
|
|
108
137
|
|
|
109
138
|
##Using formula
|
|
110
139
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
140
|
+
wb.add_worksheet(:name => "Using Formulas") do |sheet|
|
|
141
|
+
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
|
142
|
+
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
##Automatic cell types
|
|
146
|
+
|
|
147
|
+
wb.add_worksheet(:name => "Automatic cell types") do |sheet|
|
|
148
|
+
sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
|
|
149
|
+
sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1]
|
|
150
|
+
end
|
|
115
151
|
|
|
116
152
|
##Merging Cells.
|
|
117
153
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
128
164
|
|
|
129
165
|
##Generating A Bar Chart
|
|
130
166
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
167
|
+
wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
|
168
|
+
sheet.add_row ["A Simple Bar Chart"]
|
|
169
|
+
sheet.add_row ["First", "Second", "Third"]
|
|
170
|
+
sheet.add_row [1, 2, 3]
|
|
171
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
|
|
172
|
+
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
##Hide Gridlines in chart
|
|
177
|
+
wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
|
|
178
|
+
sheet.add_row ["A Simple Bar Chart"]
|
|
179
|
+
sheet.add_row ["First", "Second", "Third"]
|
|
180
|
+
sheet.add_row [1, 2, 3]
|
|
181
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
|
|
182
|
+
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
183
|
+
chart.valAxis.gridlines = false
|
|
184
|
+
chart.catAxis.gridlines = false
|
|
185
|
+
end
|
|
186
|
+
end
|
|
139
187
|
|
|
140
188
|
##Generating A Pie Chart
|
|
141
189
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
190
|
+
wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
|
191
|
+
sheet.add_row ["First", "Second", "Third", "Fourth"]
|
|
192
|
+
sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
|
|
193
|
+
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
|
|
194
|
+
chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
|
|
195
|
+
end
|
|
196
|
+
end
|
|
149
197
|
|
|
150
198
|
##Data over time
|
|
151
199
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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"])
|
|
211
|
+
end
|
|
212
|
+
end
|
|
165
213
|
|
|
166
214
|
##Generating A Line Chart
|
|
167
215
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
216
|
+
wb.add_worksheet(:name => "Line Chart") do |sheet|
|
|
217
|
+
sheet.add_row ["First", 1, 5, 7, 9]
|
|
218
|
+
sheet.add_row ["Second", 5, 2, 14, 9]
|
|
219
|
+
sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
|
220
|
+
chart.start_at 0, 2
|
|
221
|
+
chart.end_at 10, 15
|
|
222
|
+
chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"]
|
|
223
|
+
chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
##Generating A Scatter Chart
|
|
228
|
+
|
|
229
|
+
wb.add_worksheet(:name => "Scatter Chart") do |sheet|
|
|
230
|
+
sheet.add_row ["First", 1, 5, 7, 9]
|
|
231
|
+
sheet.add_row ["", 1, 25, 49, 81]
|
|
232
|
+
sheet.add_row ["Second", 5, 2, 14, 9]
|
|
233
|
+
sheet.add_row ["", 5, 10, 15, 20]
|
|
234
|
+
sheet.add_chart(Axlsx::ScatterChart, :title => "example 7: Scatter Chart") do |chart|
|
|
235
|
+
chart.start_at 0, 4
|
|
236
|
+
chart.end_at 10, 19
|
|
237
|
+
chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"]
|
|
238
|
+
chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"]
|
|
239
|
+
end
|
|
240
|
+
end
|
|
178
241
|
|
|
179
242
|
##Auto Filter
|
|
180
243
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
244
|
+
wb.add_worksheet(:name => "Auto Filter") do |sheet|
|
|
245
|
+
sheet.add_row ["Build Matrix"]
|
|
246
|
+
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
|
247
|
+
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
|
248
|
+
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
249
|
+
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
250
|
+
sheet.auto_filter = "A2:D5"
|
|
251
|
+
end
|
|
252
|
+
|
|
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
|
+
|
|
189
264
|
|
|
190
265
|
##Specifying Column Widths
|
|
191
266
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
+
|
|
273
|
+
##Fit to page printing
|
|
274
|
+
|
|
275
|
+
wb.add_worksheet(:name => "fit to page") do |sheet|
|
|
276
|
+
sheet.add_row ['this all goes on one page']
|
|
277
|
+
sheet.fit_to_page = true
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
##Hide Gridlines in worksheet
|
|
282
|
+
wb.add_worksheet(:name => "No Gridlines") do |sheet|
|
|
283
|
+
sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
|
|
284
|
+
sheet.show_gridlines = false
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
##Specify Page Margins for printing
|
|
288
|
+
margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
|
|
289
|
+
wb.add_worksheet(:name => "print margins", :page_margins => margins) do |sheet|
|
|
290
|
+
sheet.add_row ["this sheet uses customized page margins for printing"]
|
|
291
|
+
end
|
|
196
292
|
|
|
197
293
|
##Validate and Serialize
|
|
198
294
|
|
|
199
|
-
|
|
200
|
-
|
|
295
|
+
#p.validate.each { |e| puts e.message }
|
|
296
|
+
p.serialize("example.xlsx")
|
|
201
297
|
|
|
202
|
-
|
|
203
|
-
|
|
298
|
+
s = p.to_stream()
|
|
299
|
+
File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
|
|
204
300
|
|
|
205
301
|
|
|
206
302
|
##Using Shared Strings
|
|
303
|
+
p.use_shared_strings = true
|
|
304
|
+
p.serialize("shared_strings_example.xlsx")
|
|
305
|
+
|
|
207
306
|
|
|
208
|
-
|
|
209
|
-
|
|
307
|
+
##Disabling Autowidth
|
|
308
|
+
p = Axlsx::Package.new
|
|
309
|
+
p.use_autowidth = false
|
|
310
|
+
wb = p.workbook
|
|
311
|
+
wb.add_worksheet(:name => "No Magick") do | sheet |
|
|
312
|
+
sheet.add_row ['oh look! no autowidth - and no magick loaded in your process']
|
|
313
|
+
end
|
|
314
|
+
p.validate.each { |e| puts e.message }
|
|
315
|
+
p.serialize("no-use_autowidth.xlsx")
|
|
210
316
|
|
|
211
317
|
|
|
212
|
-
|
|
213
318
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -3,22 +3,22 @@ module Axlsx
|
|
|
3
3
|
require 'axlsx/content_type/default.rb'
|
|
4
4
|
require 'axlsx/content_type/override.rb'
|
|
5
5
|
|
|
6
|
-
# ContentTypes used in the package. This is
|
|
6
|
+
# ContentTypes used in the package. This is automatically managed by the package package.
|
|
7
7
|
class ContentType < SimpleTypedList
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
def initialize
|
|
10
10
|
super [Override, Default]
|
|
11
11
|
end
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
# @
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
builder.to_xml(:save_with => 0)
|
|
12
|
+
|
|
13
|
+
# Serializes the object
|
|
14
|
+
# @param [String] str
|
|
15
|
+
# @return [String]
|
|
16
|
+
def to_xml_string(str = '')
|
|
17
|
+
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
18
|
+
str << '<Types xmlns="' << XML_NS_T << '">'
|
|
19
|
+
each { |type| type.to_xml_string(str) }
|
|
20
|
+
str << '</Types>'
|
|
22
21
|
end
|
|
22
|
+
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -8,7 +8,7 @@ module Axlsx
|
|
|
8
8
|
attr_reader :Extension
|
|
9
9
|
|
|
10
10
|
# The type of content.
|
|
11
|
-
# @return [String]
|
|
11
|
+
# @return [String]
|
|
12
12
|
attr_reader :ContentType
|
|
13
13
|
|
|
14
14
|
#Creates a new Default object
|
|
@@ -19,7 +19,7 @@ module Axlsx
|
|
|
19
19
|
raise ArgumentError, "Extension and ContentType are required" unless options[:Extension] && options[:ContentType]
|
|
20
20
|
options.each do |o|
|
|
21
21
|
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
22
|
-
end
|
|
22
|
+
end
|
|
23
23
|
end
|
|
24
24
|
# Sets the file extension for this content type.
|
|
25
25
|
def Extension=(v) Axlsx::validate_string v; @Extension = v end
|
|
@@ -28,11 +28,14 @@ module Axlsx
|
|
|
28
28
|
# @see Axlsx#validate_content_type
|
|
29
29
|
def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
|
|
30
30
|
|
|
31
|
-
# Serializes the object
|
|
32
|
-
# @param [
|
|
31
|
+
# Serializes the object
|
|
32
|
+
# @param [String] str
|
|
33
33
|
# @return [String]
|
|
34
|
-
def
|
|
35
|
-
|
|
34
|
+
def to_xml_string(str = '')
|
|
35
|
+
str << '<Default '
|
|
36
|
+
str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
|
|
37
|
+
str << '/>'
|
|
36
38
|
end
|
|
39
|
+
|
|
37
40
|
end
|
|
38
41
|
end
|
|
@@ -4,11 +4,11 @@ module Axlsx
|
|
|
4
4
|
class Override
|
|
5
5
|
|
|
6
6
|
# The type of content.
|
|
7
|
-
# @return [String]
|
|
7
|
+
# @return [String]
|
|
8
8
|
attr_reader :ContentType
|
|
9
9
|
|
|
10
10
|
# The name and location of the part.
|
|
11
|
-
# @return [String]
|
|
11
|
+
# @return [String]
|
|
12
12
|
attr_reader :PartName
|
|
13
13
|
|
|
14
14
|
#Creates a new Override object
|
|
@@ -19,20 +19,24 @@ module Axlsx
|
|
|
19
19
|
raise ArgumentError, "PartName and ContentType are required" unless options[:PartName] && options[:ContentType]
|
|
20
20
|
options.each do |o|
|
|
21
21
|
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
22
|
-
end
|
|
22
|
+
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# The name and location of the part.
|
|
26
26
|
def PartName=(v) Axlsx::validate_string v; @PartName = v end
|
|
27
27
|
|
|
28
|
-
# The content type.
|
|
28
|
+
# The content type.
|
|
29
29
|
# @see Axlsx#validate_content_type
|
|
30
30
|
def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
|
|
31
31
|
|
|
32
|
-
# Serializes the
|
|
33
|
-
# @param [
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
# Serializes the object
|
|
33
|
+
# @param [String] str
|
|
34
|
+
# @return [String]
|
|
35
|
+
def to_xml_string(str = '')
|
|
36
|
+
str << '<Override '
|
|
37
|
+
str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
|
|
38
|
+
str << '/>'
|
|
36
39
|
end
|
|
40
|
+
|
|
37
41
|
end
|
|
38
42
|
end
|