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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
|
|
2
|
+
|
|
3
|
+
require 'axlsx'
|
|
4
|
+
package = Axlsx::Package.new do |package|
|
|
5
|
+
package.workbook.add_worksheet(:name => "imagex") do |sheet|
|
|
6
|
+
img_path = File.expand_path('../../image1.jpeg', __FILE__)
|
|
7
|
+
sheet.add_image(:image_src => img_path, :width => 720, :height => 666, :start_at => [2,2])
|
|
8
|
+
end
|
|
9
|
+
end.serialize 'images.xlsx'
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
package = Axlsx::Package.new
|
|
14
|
+
package.workbook.add_worksheet(:name => 'volumes') do |ws|
|
|
15
|
+
|
|
16
|
+
# perspective, rotX and rotY flatten the 3D chart
|
|
17
|
+
# hPercent sets the chart height to 100%
|
|
18
|
+
chart_options = { :perspective => 0,
|
|
19
|
+
:hPercent => 100,
|
|
20
|
+
:rotX => 0,
|
|
21
|
+
:rotY => 0,
|
|
22
|
+
:start_at => "A4",
|
|
23
|
+
:end_at => 'M44',
|
|
24
|
+
:title => 'Monthly forcast for Type Curve Gas secondary - gross ngl' }
|
|
25
|
+
|
|
26
|
+
chart = ws.add_chart(Axlsx::Line3DChart, chart_options)
|
|
27
|
+
|
|
28
|
+
# Set up log based scaling and appropriate min/max values for Y axis
|
|
29
|
+
chart.valAxis.scaling.logBase = 10
|
|
30
|
+
chart.valAxis.scaling.min = 0.1
|
|
31
|
+
chart.valAxis.scaling.max = 10000000.0
|
|
32
|
+
|
|
33
|
+
# No poing in showing the series axis labels as the chart is flattened!
|
|
34
|
+
chart.serAxis.delete = true
|
|
35
|
+
|
|
36
|
+
# Knock the catAxis labels down to the forced min.
|
|
37
|
+
chart.catAxis.crosses = :min
|
|
38
|
+
|
|
39
|
+
# set up cat labels / markes to show every 12th item
|
|
40
|
+
chart.catAxis.tickLblSkip = 12
|
|
41
|
+
chart.catAxis.tickMarkSkip = 12
|
|
42
|
+
|
|
43
|
+
#rgb colors for our data series
|
|
44
|
+
colors = ['00FF00', 'FF0000', '0000FF']
|
|
45
|
+
|
|
46
|
+
data.each_with_index do |value, index|
|
|
47
|
+
ws.add_row value
|
|
48
|
+
chart.add_series :data => ws.rows.last.cells[(1..value.size-1)],
|
|
49
|
+
:labels => (0..value.size).map{ |i| i },
|
|
50
|
+
:title => ws.rows.last.cells.first,
|
|
51
|
+
:color => colors[index]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
package.serialize 'line_chart.xlsx'
|
|
56
|
+
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib"
|
|
2
|
+
|
|
3
|
+
require 'axlsx'
|
|
4
|
+
package = Axlsx::Package.new
|
|
5
|
+
package.workbook do |workbook|
|
|
6
|
+
workbook.styles do |s|
|
|
7
|
+
black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
|
|
8
|
+
blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
|
|
9
|
+
|
|
10
|
+
workbook.add_worksheet(:name => "Styles") do |sheet|
|
|
11
|
+
# Applies the black_cell style to the first and third cell, and the blue_cell style to the second.
|
|
12
|
+
sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
|
|
13
|
+
|
|
14
|
+
# Applies the thin border to all three cells
|
|
15
|
+
sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
package.serialize 'styles.xlsx'
|
|
20
|
+
|
|
Binary file
|
data/examples/styles.rb
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
2
|
+
require 'axlsx'
|
|
3
|
+
require 'date'
|
|
4
|
+
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
wb.styles do |style|
|
|
8
|
+
|
|
9
|
+
# Date/Time Styles
|
|
10
|
+
#
|
|
11
|
+
# The most important thing to remember about OOXML styles is that they are
|
|
12
|
+
# exclusive. This means that each style must define all the components it
|
|
13
|
+
# requires to render the cell the way you want. A good example of this is
|
|
14
|
+
# changing the font size for a date. You cannot specify just the font size,
|
|
15
|
+
# you must also specify the number format or format code so that renders
|
|
16
|
+
# know how to display the serialized date float value
|
|
17
|
+
#
|
|
18
|
+
# The parts that make up a custom styles are:
|
|
19
|
+
#
|
|
20
|
+
# fonts(Font), fills(Fill), borders(Border) and number formats(NumFmt).
|
|
21
|
+
# Getting to know those classes will help you make the most out of custom
|
|
22
|
+
# styling. However axlsx certainly does not expect you to create all those
|
|
23
|
+
# objects manually.
|
|
24
|
+
#
|
|
25
|
+
# workbook.styles.add_style provides a helper method 'add_style' for defining
|
|
26
|
+
# styles in one go. The docs for that method are definitely worth a read.
|
|
27
|
+
# @see Style#add_style
|
|
28
|
+
|
|
29
|
+
# When no style is applied to a cell, axlsx will automatically apply date/time
|
|
30
|
+
# formatting to Date and Time objects for you. However, if you are defining
|
|
31
|
+
# custom styles, you define all aspects of the style you want to apply.
|
|
32
|
+
#
|
|
33
|
+
# An aside on styling and auto-width. Auto-width calculations do not
|
|
34
|
+
# currently take into account any style or formatting you have applied to the
|
|
35
|
+
# data in your cells as it would require the creation of a rendering engine,
|
|
36
|
+
# and frankly kill performance. If you are doing a lot of custom formatting,
|
|
37
|
+
# you are going to be better served by specifying fixed column widths.
|
|
38
|
+
#
|
|
39
|
+
# Let's look at an example:
|
|
40
|
+
#
|
|
41
|
+
# A style that only applies a font size
|
|
42
|
+
large_font = wb.styles.add_style :sz => 20
|
|
43
|
+
|
|
44
|
+
# A style that applies both a font size and a predefined number format.
|
|
45
|
+
# @see NumFmt
|
|
46
|
+
predefined_format = wb.styles.add_style :sz => 20, :num_fmt => 14
|
|
47
|
+
|
|
48
|
+
# A style that a applies a font size and a custom formatting code
|
|
49
|
+
custom_format = wb.styles.add_style :sz => 20, :format_code => 'yyyy-mm-dd'
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
wb.add_worksheet do |sheet|
|
|
53
|
+
|
|
54
|
+
# We then apply those styles positionally
|
|
55
|
+
sheet.add_row [123, "123", Time.now], style: [nil, large_font, predefined_format]
|
|
56
|
+
sheet.add_row [123, "123", Date.new(2012, 9, 14)], style: [large_font, nil, custom_format]
|
|
57
|
+
sheet.add_row [123, "123", Date.new(2000, 9, 12)] # This uses the axlsx default format_code (14)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
p.serialize 'styles.xlsx'
|
|
62
|
+
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
src = "#{File.dirname(__FILE__)}/image1.png"
|
|
8
|
+
p.workbook.add_worksheet(:name => 'double_anchor') do |ws|
|
|
9
|
+
ws.add_image(:image_src => src, :start_at => [0,0], :end_at => [2,4])
|
|
10
|
+
end
|
|
11
|
+
p.serialize('two_cell_anchor_image.xlsx')
|
|
@@ -1,41 +1,56 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
module Axlsx
|
|
3
|
+
|
|
3
4
|
# An default content part. These parts are automatically created by for you based on the content of your package.
|
|
4
5
|
class Default
|
|
5
6
|
|
|
7
|
+
#Creates a new Default object
|
|
8
|
+
# @option options [String] extension
|
|
9
|
+
# @option options [String] content_type
|
|
10
|
+
# @raise [ArgumentError] An argument error is raised if both extension and content_type are not specified.
|
|
11
|
+
def initialize(options={})
|
|
12
|
+
raise ArgumentError, INVALID_ARGUMENTS unless validate_options(options)
|
|
13
|
+
options.each do |name, value|
|
|
14
|
+
self.send("#{name}=", value) if self.respond_to? "#{name}="
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Error string for option validation
|
|
19
|
+
INVALID_ARGUMENTS = "extension and content_type are required"
|
|
20
|
+
|
|
6
21
|
# The extension of the content type.
|
|
7
22
|
# @return [String]
|
|
8
|
-
attr_reader :
|
|
23
|
+
attr_reader :extension
|
|
24
|
+
alias :Extension :extension
|
|
9
25
|
|
|
10
26
|
# The type of content.
|
|
11
27
|
# @return [String]
|
|
12
|
-
attr_reader :
|
|
28
|
+
attr_reader :content_type
|
|
29
|
+
alias :ContentType :content_type
|
|
13
30
|
|
|
14
|
-
#Creates a new Default object
|
|
15
|
-
# @option options [String] Extension
|
|
16
|
-
# @option options [String] ContentType
|
|
17
|
-
# @raise [ArgumentError] An argument error is raised if both Extension and ContentType are not specified.
|
|
18
|
-
def initialize(options={})
|
|
19
|
-
raise ArgumentError, "Extension and ContentType are required" unless options[:Extension] && options[:ContentType]
|
|
20
|
-
options.each do |o|
|
|
21
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
31
|
# Sets the file extension for this content type.
|
|
25
|
-
def
|
|
32
|
+
def extension=(v) Axlsx::validate_string v; @extension = v end
|
|
33
|
+
alias :Extension= :extension=
|
|
26
34
|
|
|
27
35
|
# Sets the content type
|
|
28
36
|
# @see Axlsx#validate_content_type
|
|
29
|
-
def
|
|
37
|
+
def content_type=(v) Axlsx::validate_content_type v; @content_type = v end
|
|
38
|
+
alias :ContentType= :content_type=
|
|
30
39
|
|
|
31
40
|
# Serializes the object
|
|
32
41
|
# @param [String] str
|
|
33
42
|
# @return [String]
|
|
34
43
|
def to_xml_string(str = '')
|
|
35
44
|
str << '<Default '
|
|
36
|
-
str << instance_values.map { |key, value| '' << key
|
|
45
|
+
str << instance_values.map { |key, value| '' << Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ')
|
|
37
46
|
str << '/>'
|
|
38
47
|
end
|
|
39
48
|
|
|
49
|
+
private
|
|
50
|
+
def validate_options(options)
|
|
51
|
+
(options[:Extension] || options[:extension]) && (options[:content_type] || options[:ContentType])
|
|
52
|
+
end
|
|
53
|
+
|
|
40
54
|
end
|
|
55
|
+
|
|
41
56
|
end
|
|
@@ -1,42 +1,57 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
module Axlsx
|
|
3
|
+
|
|
3
4
|
# An override content part. These parts are automatically created by for you based on the content of your package.
|
|
4
5
|
class Override
|
|
5
6
|
|
|
6
|
-
# The type of content.
|
|
7
|
-
# @return [String]
|
|
8
|
-
attr_reader :ContentType
|
|
9
|
-
|
|
10
|
-
# The name and location of the part.
|
|
11
|
-
# @return [String]
|
|
12
|
-
attr_reader :PartName
|
|
13
|
-
|
|
14
7
|
#Creates a new Override object
|
|
15
8
|
# @option options [String] PartName
|
|
16
9
|
# @option options [String] ContentType
|
|
17
10
|
# @raise [ArgumentError] An argument error is raised if both PartName and ContentType are not specified.
|
|
18
11
|
def initialize(options={})
|
|
19
|
-
raise ArgumentError,
|
|
20
|
-
options.each do |
|
|
21
|
-
self.send("#{
|
|
12
|
+
raise ArgumentError, INVALID_ARGUMENTS unless validate_options(options)
|
|
13
|
+
options.each do |name, value|
|
|
14
|
+
self.send("#{name}=", value) if self.respond_to? "#{name}="
|
|
22
15
|
end
|
|
23
16
|
end
|
|
24
17
|
|
|
18
|
+
# Error message for invalid options
|
|
19
|
+
INVALID_ARGUMENTS = 'part_name and content_type are required'
|
|
20
|
+
|
|
21
|
+
# The type of content.
|
|
22
|
+
# @return [String]
|
|
23
|
+
attr_reader :content_type
|
|
24
|
+
alias :ContentType :content_type
|
|
25
|
+
|
|
26
|
+
# The name and location of the part.
|
|
27
|
+
# @return [String]
|
|
28
|
+
attr_reader :part_name
|
|
29
|
+
alias :PartName :part_name
|
|
30
|
+
|
|
25
31
|
# The name and location of the part.
|
|
26
|
-
def
|
|
32
|
+
def part_name=(v) Axlsx::validate_string v; @part_name = v end
|
|
33
|
+
alias :PartName= :part_name=
|
|
27
34
|
|
|
28
35
|
# The content type.
|
|
29
36
|
# @see Axlsx#validate_content_type
|
|
30
|
-
def
|
|
37
|
+
def content_type=(v) Axlsx::validate_content_type v; @content_type = v end
|
|
38
|
+
alias :ContentType= :content_type=
|
|
31
39
|
|
|
32
40
|
# Serializes the object
|
|
33
41
|
# @param [String] str
|
|
34
42
|
# @return [String]
|
|
35
43
|
def to_xml_string(str = '')
|
|
36
44
|
str << '<Override '
|
|
37
|
-
str << instance_values.map { |key, value| '' << key
|
|
45
|
+
str << instance_values.map { |key, value| '' << Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ')
|
|
38
46
|
str << '/>'
|
|
39
47
|
end
|
|
40
48
|
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def validate_options(options)
|
|
52
|
+
(options[:PartName] || options[:part_name]) && (options[:ContentType] || options[:content_type])
|
|
53
|
+
end
|
|
54
|
+
|
|
41
55
|
end
|
|
56
|
+
|
|
42
57
|
end
|