axlsx 1.1.4 → 1.3.1
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 +6 -2
- data/CHANGELOG.md +72 -0
- data/README.md +114 -31
- data/Rakefile +11 -3
- data/examples/auto_filter.rb +16 -0
- data/examples/auto_filter.xlsx +0 -0
- data/examples/basic_charts.rb +58 -0
- data/examples/chart_colors.rb +17 -2
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +171 -60
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +3 -0
- data/examples/extractive.xlsx +0 -0
- data/examples/hyperlinks.rb +23 -0
- data/examples/hyperlinks.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/page_setup.rb +11 -0
- data/examples/page_setup.xlsx +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/axlsx.csv +1 -0
- data/examples/skydrive/axlsx.xlsx +0 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
- data/examples/sprk2012/basics.rb +11 -0
- data/examples/sprk2012/basics.xlsx +0 -0
- data/examples/sprk2012/gravatar.jpeg +0 -0
- data/examples/sprk2012/hair_club.jpg +0 -0
- data/examples/sprk2012/images.rb +9 -0
- data/examples/sprk2012/images.xlsx +0 -0
- data/examples/sprk2012/line_chart.rb +56 -0
- data/examples/sprk2012/line_chart.xlsx +0 -0
- data/examples/sprk2012/sprk2012.key +0 -0
- data/examples/sprk2012/styles.rb +20 -0
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/styles.rb +62 -0
- data/examples/styles.xlsx +0 -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 +7 -6
- data/lib/axlsx/drawing/axis.rb +82 -36
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +2 -1
- data/lib/axlsx/drawing/cat_axis.rb +43 -39
- data/lib/axlsx/drawing/chart.rb +65 -54
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +20 -8
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/num_data.rb +2 -2
- data/lib/axlsx/drawing/num_data_source.rb +4 -1
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- 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 +42 -32
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +43 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +11 -2
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/util/constants.rb +131 -2
- data/lib/axlsx/util/simple_typed_list.rb +18 -22
- data/lib/axlsx/util/validators.rb +100 -9
- 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/workbook.rb +70 -13
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
- data/lib/axlsx/workbook/worksheet/col.rb +15 -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_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- 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/date_time_converter.rb +1 -1
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -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 +36 -20
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -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 +10 -3
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +38 -16
- 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 +38 -3
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +1 -2
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_chart.rb +29 -9
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +7 -3
- data/test/drawing/tc_num_data.rb +5 -1
- 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 +7 -2
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +1 -1
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +1 -2
- 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/rels/tc_relationship.rb +1 -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 +16 -4
- 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 +94 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +101 -8
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_cell.rb +53 -7
- data/test/workbook/worksheet/tc_col.rb +9 -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 +44 -0
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +143 -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 +32 -14
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -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/{table/tc_table.rb → tc_table.rb} +9 -12
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +155 -51
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
- metadata +194 -81
- data/examples/#extractive.csv# +0 -0
- data/examples/#extractive.rb# +0 -45
- data/examples/chart_colors.rb~ +0 -0
- data/examples/chart_colors.xlsx +0 -0
- data/examples/colored_series_data.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/example.csv +0 -1000
- data/examples/extractive.csv +0 -1
- data/examples/extractive.csv~ +0 -1
- data/examples/extractive.rb~ +0 -3
- data/examples/stack.rb +0 -21
- data/examples/stack.rb~ +0 -27
- data/examples/stack.xlsx +0 -0
- data/examples/~$chart_colors.xlsx +0 -0
- data/examples/~$extractive.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
- data/lib/axlsx/drawing/data_source.rb~ +0 -51
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/num_data.rb~ +0 -51
- data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
- data/lib/axlsx/drawing/num_val.rb~ +0 -40
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/ref.rb~ +0 -41
- data/lib/axlsx/drawing/str_data.rb~ +0 -58
- data/lib/axlsx/drawing/str_val.rb~ +0 -35
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/font_tables.rb~ +0 -0
- 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/cfvo.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
- data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
- 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/drawing/tc_data_source.rb~ +0 -30
- data/test/drawing/tc_num_data.rb~ +0 -35
- data/test/drawing/tc_num_val.rb~ +0 -29
- data/test/drawing/tc_str_data.rb~ +0 -30
- data/test/drawing/tc_str_val.rb~ +0 -26
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
- data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
- data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
- data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
data/examples/example.rb
CHANGED
|
@@ -55,22 +55,22 @@ wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
|
|
|
55
55
|
sheet["A1:D1"].each { |c| c.color = "FF0000" }
|
|
56
56
|
sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
|
57
57
|
end
|
|
58
|
-
|
|
58
|
+
##```
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
##Using Custom Border Styles
|
|
61
61
|
|
|
62
62
|
#```ruby
|
|
63
63
|
#Axlsx defines a thin border style, but you can easily create and use your own.
|
|
64
64
|
wb.styles do |s|
|
|
65
|
-
red_border = s.add_style :border => { :style => :thick, :color =>"FFFF0000" }
|
|
66
|
-
blue_border = s.add_style :border => { :style => :thick, :color =>"FF0000FF"
|
|
65
|
+
red_border = s.add_style :border => { :style => :thick, :color =>"FFFF0000", :edges => [:left, :right] }
|
|
66
|
+
blue_border = s.add_style :border => { :style => :thick, :color =>"FF0000FF"}
|
|
67
67
|
|
|
68
68
|
wb.add_worksheet(:name => "Custom Borders") do |sheet|
|
|
69
69
|
sheet.add_row ["wrap", "me", "Up in Red"], :style => red_border
|
|
70
70
|
sheet.add_row [1, 2, 3], :style => blue_border
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
##```
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
##Styling Rows and Columns
|
|
@@ -97,12 +97,11 @@ wb.styles do |s|
|
|
|
97
97
|
#Set the second column outline level
|
|
98
98
|
sheet.column_info[1].outlineLevel = 2
|
|
99
99
|
|
|
100
|
-
#TODO rows hidden, outline etc.
|
|
101
100
|
sheet.rows[3].hidden = true
|
|
102
101
|
sheet.rows[1].outlineLevel = 2
|
|
103
102
|
end
|
|
104
103
|
end
|
|
105
|
-
|
|
104
|
+
##```
|
|
106
105
|
|
|
107
106
|
|
|
108
107
|
##Specifying Column Widths
|
|
@@ -113,7 +112,7 @@ wb.add_worksheet(:name => "custom column widths") do |sheet|
|
|
|
113
112
|
sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
|
|
114
113
|
sheet.column_widths nil, 3, 5, nil
|
|
115
114
|
end
|
|
116
|
-
|
|
115
|
+
##```
|
|
117
116
|
|
|
118
117
|
##Merging Cells.
|
|
119
118
|
|
|
@@ -128,7 +127,7 @@ wb.add_worksheet(:name => 'Merging Cells') do |sheet|
|
|
|
128
127
|
sheet["A1:D1"].each { |c| c.color = "FF0000"}
|
|
129
128
|
sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
|
|
130
129
|
end
|
|
131
|
-
|
|
130
|
+
##```
|
|
132
131
|
|
|
133
132
|
##Add an Image with a hyperlink
|
|
134
133
|
|
|
@@ -170,7 +169,7 @@ wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
|
|
|
170
169
|
sheet.add_row ["华语/華語"]
|
|
171
170
|
sheet.add_row ["한국어/조선말"]
|
|
172
171
|
end
|
|
173
|
-
|
|
172
|
+
##```
|
|
174
173
|
|
|
175
174
|
##Using formula
|
|
176
175
|
|
|
@@ -179,7 +178,7 @@ wb.add_worksheet(:name => "Using Formulas") do |sheet|
|
|
|
179
178
|
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
|
|
180
179
|
sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
|
|
181
180
|
end
|
|
182
|
-
|
|
181
|
+
##```
|
|
183
182
|
|
|
184
183
|
##Auto Filter
|
|
185
184
|
|
|
@@ -191,11 +190,13 @@ wb.add_worksheet(:name => "Auto Filter") do |sheet|
|
|
|
191
190
|
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
192
191
|
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
193
192
|
sheet.auto_filter = "A2:D5"
|
|
193
|
+
sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2', '1.8.7']
|
|
194
194
|
end
|
|
195
195
|
#```
|
|
196
196
|
|
|
197
197
|
##Automatic cell types
|
|
198
198
|
|
|
199
|
+
|
|
199
200
|
#```ruby
|
|
200
201
|
wb.add_worksheet(:name => "Automatic cell types") do |sheet|
|
|
201
202
|
date_format = wb.styles.add_style :format_code => 'YYYY-MM-DD'
|
|
@@ -203,33 +204,53 @@ wb.add_worksheet(:name => "Automatic cell types") do |sheet|
|
|
|
203
204
|
sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
|
|
204
205
|
sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1], :style => [date_format, time_format]
|
|
205
206
|
end
|
|
206
|
-
#```
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
# Hyperlinks in worksheet
|
|
210
|
+
wb.add_worksheet(:name => 'hyperlinks') do |sheet|
|
|
211
|
+
# external references
|
|
212
|
+
sheet.add_row ['axlsx']
|
|
213
|
+
sheet.add_hyperlink :location => 'https://github.com/randym/axlsx', :ref => sheet.rows.first.cells.first
|
|
214
|
+
# internal references
|
|
215
|
+
sheet.add_hyperlink :location => "'Next Sheet'!A1", :ref => 'A2', :target => :sheet
|
|
216
|
+
sheet.add_row ['next sheet']
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
wb.add_worksheet(:name => 'Next Sheet') do |sheet|
|
|
220
|
+
sheet.add_row ['hello!']
|
|
221
|
+
end
|
|
222
|
+
###```
|
|
223
|
+
|
|
224
|
+
##Number formatting and currency
|
|
225
|
+
wb.add_worksheet(:name => "Formats and Currency") do |sheet|
|
|
226
|
+
currency = wb.styles.add_style :num_fmt => 5
|
|
227
|
+
red_negative = wb.styles.add_style :num_fmt => 8
|
|
228
|
+
comma = wb.styles.add_style :num_fmt => 3
|
|
229
|
+
super_funk = wb.styles.add_style :format_code => '[Green]#'
|
|
230
|
+
sheet.add_row %w(Currency RedNegative Comma Custom)
|
|
231
|
+
sheet.add_row [1500, -122.34, 123456789, 594829], :style=> [currency, red_negative, comma, super_funk]
|
|
232
|
+
end
|
|
233
|
+
|
|
209
234
|
##Generating A Bar Chart
|
|
210
235
|
|
|
211
236
|
#```ruby
|
|
212
237
|
wb.add_worksheet(:name => "Bar Chart") do |sheet|
|
|
213
238
|
sheet.add_row ["A Simple Bar Chart"]
|
|
214
|
-
sheet.add_row [
|
|
215
|
-
sheet.
|
|
216
|
-
|
|
217
|
-
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
218
|
-
chart.valAxis.label_rotation = -45
|
|
219
|
-
chart.catAxis.label_rotation = 45
|
|
239
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
240
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
|
241
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :title => sheet["A1"]
|
|
220
242
|
end
|
|
221
243
|
end
|
|
222
|
-
|
|
244
|
+
##```
|
|
223
245
|
|
|
224
246
|
##Hide Gridlines in chart
|
|
225
247
|
|
|
226
248
|
#```ruby
|
|
227
249
|
wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
|
|
228
|
-
sheet.add_row ["
|
|
229
|
-
sheet.add_row [
|
|
230
|
-
sheet.
|
|
231
|
-
|
|
232
|
-
chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
|
|
250
|
+
sheet.add_row ["Bar Chart without gridlines"]
|
|
251
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
252
|
+
sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
|
|
253
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"]
|
|
233
254
|
chart.valAxis.gridlines = false
|
|
234
255
|
chart.catAxis.gridlines = false
|
|
235
256
|
end
|
|
@@ -240,28 +261,10 @@ end
|
|
|
240
261
|
|
|
241
262
|
#```ruby
|
|
242
263
|
wb.add_worksheet(:name => "Pie Chart") do |sheet|
|
|
243
|
-
sheet.add_row ["
|
|
244
|
-
sheet.add_row [
|
|
245
|
-
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,
|
|
246
|
-
chart.add_series :data => sheet["
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
#```
|
|
250
|
-
|
|
251
|
-
##Data over time
|
|
252
|
-
|
|
253
|
-
#```ruby
|
|
254
|
-
wb.add_worksheet(:name=>'Charting Dates') do |sheet|
|
|
255
|
-
# cell level style overides when adding cells
|
|
256
|
-
sheet.add_row ['Date', 'Value'], :sz => 16
|
|
257
|
-
sheet.add_row [Time.now - (7*60*60*24), 3]
|
|
258
|
-
sheet.add_row [Time.now - (6*60*60*24), 7]
|
|
259
|
-
sheet.add_row [Time.now - (5*60*60*24), 18]
|
|
260
|
-
sheet.add_row [Time.now - (4*60*60*24), 1]
|
|
261
|
-
sheet.add_chart(Axlsx::Bar3DChart) do |chart|
|
|
262
|
-
chart.start_at "B7"
|
|
263
|
-
chart.end_at "H27"
|
|
264
|
-
chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
|
|
264
|
+
sheet.add_row ["Simple Pie Chart"]
|
|
265
|
+
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
|
|
266
|
+
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
|
|
267
|
+
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
|
|
265
268
|
end
|
|
266
269
|
end
|
|
267
270
|
#```
|
|
@@ -270,13 +273,18 @@ end
|
|
|
270
273
|
|
|
271
274
|
#```ruby
|
|
272
275
|
wb.add_worksheet(:name => "Line Chart") do |sheet|
|
|
273
|
-
sheet.add_row ["
|
|
274
|
-
sheet.add_row
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
chart.
|
|
276
|
+
sheet.add_row ["Simple Line Chart"]
|
|
277
|
+
sheet.add_row %w(first second)
|
|
278
|
+
4.times do
|
|
279
|
+
sheet.add_row [ rand(24)+1, rand(24)+1]
|
|
280
|
+
end
|
|
281
|
+
sheet.add_chart(Axlsx::Line3DChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
|
282
|
+
chart.start_at 0, 5
|
|
283
|
+
chart.end_at 10, 20
|
|
284
|
+
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"]
|
|
285
|
+
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"]
|
|
286
|
+
chart.catAxis.title = 'X Axis'
|
|
287
|
+
chart.valAxis.title = 'Y Axis'
|
|
280
288
|
end
|
|
281
289
|
end
|
|
282
290
|
#```
|
|
@@ -308,7 +316,7 @@ wb.add_worksheet(:name => "Table") do |sheet|
|
|
|
308
316
|
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
|
309
317
|
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
|
310
318
|
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
|
311
|
-
sheet.add_table "A2:D5", :name => 'Build Matrix'
|
|
319
|
+
sheet.add_table "A2:D5", :name => 'Build Matrix', :style_info => { :name => "TableStyleMedium23" }
|
|
312
320
|
end
|
|
313
321
|
#```
|
|
314
322
|
|
|
@@ -320,7 +328,7 @@ wb.add_worksheet(:name => "fit to page") do |sheet|
|
|
|
320
328
|
sheet.add_row ['this all goes on one page']
|
|
321
329
|
sheet.fit_to_page = true
|
|
322
330
|
end
|
|
323
|
-
|
|
331
|
+
##```
|
|
324
332
|
|
|
325
333
|
|
|
326
334
|
##Hide Gridlines in worksheet
|
|
@@ -330,18 +338,119 @@ wb.add_worksheet(:name => "No Gridlines") do |sheet|
|
|
|
330
338
|
sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
|
|
331
339
|
sheet.show_gridlines = false
|
|
332
340
|
end
|
|
333
|
-
|
|
341
|
+
##```
|
|
334
342
|
|
|
343
|
+
#```ruby
|
|
344
|
+
wb.add_worksheet(:name => "repeated header") do |sheet|
|
|
345
|
+
sheet.add_row %w(These Column Header Will Render On Every Printed Sheet)
|
|
346
|
+
200.times { sheet.add_row %w(1 2 3 4 5 6 7 8) }
|
|
347
|
+
wb.add_defined_name("'repeated header'!$1:$1", :local_sheet_id => sheet.index, :name => '_xlnm.Print_Titles')
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
# Sheet Protection and excluding cells from locking.
|
|
351
|
+
unlocked = wb.styles.add_style :locked => false
|
|
352
|
+
wb.add_worksheet(:name => 'Sheet Protection') do |sheet|
|
|
353
|
+
sheet.sheet_protection.password = 'fish'
|
|
354
|
+
sheet.add_row [1, 2 ,3] # These cells will be locked
|
|
355
|
+
sheet.add_row [4, 5, 6], :style => unlocked # these cells will not!
|
|
356
|
+
end
|
|
335
357
|
|
|
336
|
-
|
|
358
|
+
|
|
359
|
+
##Specify page margins and other options for printing
|
|
337
360
|
|
|
338
361
|
#```ruby
|
|
339
362
|
margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
|
|
340
|
-
|
|
341
|
-
|
|
363
|
+
setup = {:fit_to_width => 1, :orientation => :landscape, :paper_width => "297mm", :paper_height => "210mm"}
|
|
364
|
+
options = {:grid_lines => true, :headings => true, :horizontal_centered => true}
|
|
365
|
+
wb.add_worksheet(:name => "print margins", :page_margins => margins, :page_setup => setup, :print_options => options) do |sheet|
|
|
366
|
+
sheet.add_row ["this sheet uses customized print settings"]
|
|
342
367
|
end
|
|
343
368
|
#```
|
|
344
369
|
|
|
370
|
+
## Add Comments to your spreadsheet
|
|
371
|
+
#``` ruby
|
|
372
|
+
wb.add_worksheet(:name => 'comments') do |sheet|
|
|
373
|
+
sheet.add_row ['Can we build it?']
|
|
374
|
+
sheet.add_comment :ref => 'A1', :author => 'Bob', :text => 'Yes We Can!'
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
## Frozen/Split panes
|
|
378
|
+
## ``` ruby
|
|
379
|
+
wb.add_worksheet(:name => 'fixed headers') do |sheet|
|
|
380
|
+
sheet.add_row(['', (0..99).map { |i| "column header #{i}" }].flatten )
|
|
381
|
+
100.times.with_index { |index| sheet << ["row header", (0..index).to_a].flatten }
|
|
382
|
+
sheet.sheet_view.pane do |pane|
|
|
383
|
+
pane.top_left_cell = "B2"
|
|
384
|
+
pane.state = :frozen_split
|
|
385
|
+
pane.y_split = 1
|
|
386
|
+
pane.x_split = 1
|
|
387
|
+
pane.active_pane = :bottom_right
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
# conditional formatting
|
|
392
|
+
#
|
|
393
|
+
percent = wb.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
|
|
394
|
+
money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
|
395
|
+
|
|
396
|
+
# define the style for conditional formatting
|
|
397
|
+
profitable = wb.styles.add_style( :fg_color=>"FF428751",
|
|
398
|
+
:type => :dxf)
|
|
399
|
+
|
|
400
|
+
wb.add_worksheet(:name => "Conditional Cell Is") do |ws|
|
|
401
|
+
|
|
402
|
+
# Generate 20 rows of data
|
|
403
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
404
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
405
|
+
offset = 3
|
|
406
|
+
rows = 20
|
|
407
|
+
offset.upto(rows + offset) do |i|
|
|
408
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
412
|
+
ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
wb.add_worksheet(:name => "Conditional Color Scale") do |ws|
|
|
416
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
417
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
418
|
+
offset = 3
|
|
419
|
+
rows = 20
|
|
420
|
+
offset.upto(rows + offset) do |i|
|
|
421
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
422
|
+
end
|
|
423
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
424
|
+
color_scale = Axlsx::ColorScale.new
|
|
425
|
+
ws.add_conditional_formatting("B3:B100", { :type => :colorScale, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1, :color_scale => color_scale })
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
wb.add_worksheet(:name => "Conditional Data Bar") do |ws|
|
|
430
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
431
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
432
|
+
offset = 3
|
|
433
|
+
rows = 20
|
|
434
|
+
offset.upto(rows + offset) do |i|
|
|
435
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
436
|
+
end
|
|
437
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
438
|
+
data_bar = Axlsx::DataBar.new
|
|
439
|
+
ws.add_conditional_formatting("B3:B100", { :type => :dataBar, :dxfId => profitable, :priority => 1, :data_bar => data_bar })
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
wb.add_worksheet(:name => "Conditional Format Icon Set") do |ws|
|
|
443
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
|
444
|
+
ws.add_row ["Quarter", "Profit", "% of Total"]
|
|
445
|
+
offset = 3
|
|
446
|
+
rows = 20
|
|
447
|
+
offset.upto(rows + offset) do |i|
|
|
448
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
|
|
449
|
+
end
|
|
450
|
+
# Apply conditional formatting to range B3:B100 in the worksheet
|
|
451
|
+
icon_set = Axlsx::IconSet.new
|
|
452
|
+
ws.add_conditional_formatting("B3:B100", { :type => :iconSet, :dxfId => profitable, :priority => 1, :icon_set => icon_set })
|
|
453
|
+
end
|
|
345
454
|
|
|
346
455
|
##Validate and Serialize
|
|
347
456
|
|
|
@@ -364,7 +473,9 @@ p.use_shared_strings = true
|
|
|
364
473
|
p.serialize("shared_strings_example.xlsx")
|
|
365
474
|
#```
|
|
366
475
|
|
|
367
|
-
|
|
476
|
+
#p.validate do |er|
|
|
477
|
+
#puts er.inspect
|
|
478
|
+
#end
|
|
368
479
|
##Disabling Autowidth
|
|
369
480
|
|
|
370
481
|
#```ruby
|
data/examples/example.xlsx
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/examples/extractive.rb
CHANGED
|
@@ -13,6 +13,7 @@ data = [ ['oil-bbl',9591.411671,8860.714604,8237.936509,7700.523067,7231.831842,
|
|
|
13
13
|
p = Axlsx::Package.new
|
|
14
14
|
wb = p.workbook
|
|
15
15
|
wb.add_worksheet(:name => 'volumes') do |ws|
|
|
16
|
+
|
|
16
17
|
# perspective, rotX and rotY flatten the 3D chart
|
|
17
18
|
# hPercent sets the chart height to 100%
|
|
18
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')
|
|
@@ -27,12 +28,14 @@ wb.add_worksheet(:name => 'volumes') do |ws|
|
|
|
27
28
|
|
|
28
29
|
# Knock the catAxis labels down to the forced min.
|
|
29
30
|
chart.catAxis.crosses = :min
|
|
31
|
+
|
|
30
32
|
# set up cat labels / markes to show every 12th item
|
|
31
33
|
chart.catAxis.tickLblSkip = 12
|
|
32
34
|
chart.catAxis.tickMarkSkip = 12
|
|
33
35
|
|
|
34
36
|
#rgb colors for our data series
|
|
35
37
|
colors = ['00FF00', 'FF0000', '0000FF']
|
|
38
|
+
|
|
36
39
|
data.each_with_index do |value, index|
|
|
37
40
|
ws.add_row value
|
|
38
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]
|
data/examples/extractive.xlsx
CHANGED
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w -s
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
4
|
+
|
|
5
|
+
#```ruby
|
|
6
|
+
require 'axlsx'
|
|
7
|
+
|
|
8
|
+
p = Axlsx::Package.new
|
|
9
|
+
wb = p.workbook
|
|
10
|
+
wb.add_worksheet(:name => 'hyperlinks') do |sheet|
|
|
11
|
+
# external references
|
|
12
|
+
sheet.add_row ['axlsx']
|
|
13
|
+
sheet.add_hyperlink :location => 'https://github.com/randym/axlsx', :ref => sheet.rows.first.cells.first
|
|
14
|
+
# internal references
|
|
15
|
+
sheet.add_row ['next sheet']
|
|
16
|
+
sheet.add_hyperlink :location => "'Next Sheet'!A1", :target => :sheet, :ref => 'A2'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
wb.add_worksheet(:name => 'Next Sheet') do |sheet|
|
|
20
|
+
sheet.add_row ['hello!']
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
p.serialize 'hyperlinks.xlsx'
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
2
|
+
require 'axlsx'
|
|
3
|
+
xls = Axlsx::Package.new
|
|
4
|
+
wb = xls.workbook
|
|
5
|
+
wb.add_worksheet do |ws|
|
|
6
|
+
# Excel does not currently follow the specification and will ignore paper_width and paper_height so if you need
|
|
7
|
+
# to for a paper size, be sure to set :paper_size
|
|
8
|
+
ws.page_setup.set :paper_width => "210mm", :paper_size => 10, :paper_height => "297mm", :orientation => :landscape
|
|
9
|
+
ws.add_row %w(AXLSX is cool)
|
|
10
|
+
end
|
|
11
|
+
xls.serialize "page_setup.xlsx"
|
|
Binary file
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'nokogiri'
|
|
3
|
+
require 'open-uri'
|
|
4
|
+
require 'axlsx'
|
|
5
|
+
|
|
6
|
+
class Scraper
|
|
7
|
+
|
|
8
|
+
def initialize(url, selector)
|
|
9
|
+
@url = url
|
|
10
|
+
@selector = selector
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def hooks
|
|
14
|
+
@hooks ||= {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def add_hook(clue, p_roc)
|
|
18
|
+
hooks[clue] = p_roc
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def export(file_name)
|
|
22
|
+
Scraper.clues.each do |clue|
|
|
23
|
+
if detail = parse_clue(clue)
|
|
24
|
+
output << [clue, detail.pop]
|
|
25
|
+
detail.each { |datum| output << ['', datum] }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
serialize(file_name)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def self.clues
|
|
34
|
+
@clues ||= ['Operating system', 'Processors', 'Chipset', 'Memory type', 'Hard drive', 'Graphics',
|
|
35
|
+
'Ports', 'Webcam', 'Pointing device', 'Keyboard', 'Network interface', 'Chipset', 'Wireless',
|
|
36
|
+
'Power supply type', 'Energy efficiency', 'Weight', 'Minimum dimensions (W x D x H)',
|
|
37
|
+
'Warranty', 'Software included', 'Product color']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def doc
|
|
41
|
+
@doc ||= begin
|
|
42
|
+
Nokogiri::HTML(open(@url))
|
|
43
|
+
rescue
|
|
44
|
+
raise ArgumentError, 'Invalid URL - Nothing to parse'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def output
|
|
49
|
+
@output ||= []
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def selector_for_clue(clue)
|
|
53
|
+
@selector % clue
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def parse_clue(clue)
|
|
57
|
+
if element = doc.at(selector_for_clue(clue))
|
|
58
|
+
call_hook(clue, element) || element.inner_html.split('<br>').each(&:strip)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def call_hook(clue, element)
|
|
63
|
+
if hooks[clue].is_a? Proc
|
|
64
|
+
value = hooks[clue].call(element)
|
|
65
|
+
value.is_a?(Array) ? value : [value]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def package
|
|
70
|
+
@package ||= Axlsx::Package.new
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def serialize(file_name)
|
|
74
|
+
package.workbook.add_worksheet do |sheet|
|
|
75
|
+
output.each { |datum| sheet.add_row datum }
|
|
76
|
+
end
|
|
77
|
+
package.serialize(file_name)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
scraper = Scraper.new("http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1", "//td[text()='%s']/following-sibling::td")
|
|
82
|
+
|
|
83
|
+
# define a custom action to take against any elements found.
|
|
84
|
+
os_parse = Proc.new do |element|
|
|
85
|
+
element.inner_html.split('<br>').each(&:strip!).each(&:upcase!)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
scraper.add_hook('Operating system', os_parse)
|
|
89
|
+
|
|
90
|
+
scraper.export('foo.xlsx')
|
|
91
|
+
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
p.workbook.add_worksheet(:name => 'Open Office') { |ws| ws.sheet_protection.password = 'fish' }
|
|
8
|
+
p.serialize 'sheet_protection.xlsx'
|
|
9
|
+
|
|
10
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
ws = p.workbook.add_worksheet :name => "Sheetview - Split"
|
|
8
|
+
ws.sheet_view do |vs|
|
|
9
|
+
vs.pane do |p|
|
|
10
|
+
p.active_pane = :top_right
|
|
11
|
+
p.state = :split
|
|
12
|
+
p.x_split = 11080
|
|
13
|
+
p.y_split = 5000
|
|
14
|
+
p.top_left_cell = 'C44'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
|
|
18
|
+
vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
|
|
19
|
+
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
20
|
+
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
ws = p.workbook.add_worksheet :name => "Sheetview - Frozen"
|
|
25
|
+
ws.sheet_view do |vs|
|
|
26
|
+
vs.pane do |p|
|
|
27
|
+
p.state = :frozen
|
|
28
|
+
p.x_split = 3
|
|
29
|
+
p.y_split = 4
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
p.serialize 'sheet_view.xlsx'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
,,,,,
|
|
Binary file
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
|
|
2
2
|
|
|
3
3
|
require 'axlsx'
|
|
4
4
|
|
|
5
5
|
Axlsx::Package.new do |p|
|
|
6
6
|
p.workbook do |wb|
|
|
7
7
|
styles = wb.styles
|
|
8
|
-
header
|
|
8
|
+
header = styles.add_style :bg_color => "DD", :sz => 16, :b => true, :alignment => {:horizontal => :center}
|
|
9
9
|
tbl_header = styles.add_style :b => true, :alignment => { :horizontal => :center }
|
|
10
10
|
ind_header = styles.add_style :bg_color => "FFDFDEDF", :b => true, :alignment => {:indent => 1}
|
|
11
|
-
col_header
|
|
12
|
-
label
|
|
13
|
-
money
|
|
14
|
-
t_label
|
|
15
|
-
t_money
|
|
11
|
+
col_header = styles.add_style :bg_color => "FFDFDEDF", :b => true, :alignment => { :horizontal => :center }
|
|
12
|
+
label = styles.add_style :alignment => { :indent => 1 }
|
|
13
|
+
money = styles.add_style :num_fmt => 5
|
|
14
|
+
t_label = styles.add_style :b => true, :bg_color => "FFDFDEDF"
|
|
15
|
+
t_money = styles.add_style :b => true, :num_fmt => 5, :bg_color => "FFDFDEDF"
|
|
16
16
|
|
|
17
17
|
wb.add_worksheet do |sheet|
|
|
18
18
|
sheet.add_row
|
|
@@ -54,7 +54,7 @@ Axlsx::Package.new do |p|
|
|
|
54
54
|
chart.start_at 7, 16
|
|
55
55
|
chart.end_at 12, 31
|
|
56
56
|
end
|
|
57
|
-
|
|
57
|
+
%w(B4:C4 E4:F4 B11:C11 E11:F11 B2:F2).each { |range| sheet.merge_cells(range) }
|
|
58
58
|
sheet.column_widths 2, nil, nil, 2, nil, nil, 2
|
|
59
59
|
end
|
|
60
60
|
end
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
|
|
2
|
+
require 'axlsx'
|
|
3
|
+
|
|
4
|
+
package = Axlsx::Package.new
|
|
5
|
+
package.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
|
6
|
+
sheet.add_row ["First Column", "Second", "Third"]
|
|
7
|
+
sheet.add_row [1, 2, 3]
|
|
8
|
+
end
|
|
9
|
+
package.serialize 'basics.xlsx'
|
|
10
|
+
|
|
11
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|