axlsx 2.0.1 → 3.0.0.pre
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +23 -23
- data/Rakefile +9 -11
- data/examples/auto_filter.rb +10 -1
- data/examples/conditional_formatting/example_conditional_formatting.rb +18 -3
- data/examples/example.rb +102 -4
- data/examples/merge_cells.rb +17 -0
- data/examples/no_grid_with_borders.rb +18 -0
- data/examples/pivot_test.rb +63 -0
- data/examples/split.rb +16 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +1 -1
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/doc_props/app.rb +1 -1
- data/lib/axlsx/doc_props/core.rb +5 -5
- data/lib/axlsx/drawing/area_chart.rb +99 -0
- data/lib/axlsx/drawing/area_series.rb +110 -0
- data/lib/axlsx/drawing/axes.rb +1 -1
- data/lib/axlsx/drawing/axis.rb +12 -9
- data/lib/axlsx/drawing/bar_3D_chart.rb +13 -13
- data/lib/axlsx/drawing/bar_chart.rb +143 -0
- data/lib/axlsx/drawing/bar_series.rb +9 -9
- data/lib/axlsx/drawing/bubble_chart.rb +59 -0
- data/lib/axlsx/drawing/bubble_series.rb +63 -0
- data/lib/axlsx/drawing/cat_axis.rb +5 -5
- data/lib/axlsx/drawing/chart.rb +52 -8
- data/lib/axlsx/drawing/d_lbls.rb +3 -3
- data/lib/axlsx/drawing/drawing.rb +6 -1
- data/lib/axlsx/drawing/graphic_frame.rb +3 -3
- data/lib/axlsx/drawing/hyperlink.rb +1 -3
- data/lib/axlsx/drawing/line_3D_chart.rb +2 -2
- data/lib/axlsx/drawing/line_chart.rb +10 -10
- data/lib/axlsx/drawing/line_series.rb +32 -3
- data/lib/axlsx/drawing/marker.rb +1 -1
- data/lib/axlsx/drawing/num_data.rb +4 -4
- data/lib/axlsx/drawing/num_data_source.rb +6 -6
- data/lib/axlsx/drawing/num_val.rb +3 -1
- data/lib/axlsx/drawing/one_cell_anchor.rb +3 -2
- data/lib/axlsx/drawing/pic.rb +25 -19
- data/lib/axlsx/drawing/picture_locking.rb +1 -3
- data/lib/axlsx/drawing/pie_3D_chart.rb +5 -6
- data/lib/axlsx/drawing/pie_series.rb +6 -6
- data/lib/axlsx/drawing/scaling.rb +6 -6
- data/lib/axlsx/drawing/scatter_chart.rb +10 -10
- data/lib/axlsx/drawing/scatter_series.rb +40 -7
- data/lib/axlsx/drawing/ser_axis.rb +2 -2
- data/lib/axlsx/drawing/series.rb +3 -3
- data/lib/axlsx/drawing/series_title.rb +2 -2
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +3 -1
- data/lib/axlsx/drawing/title.rb +22 -4
- data/lib/axlsx/drawing/two_cell_anchor.rb +6 -1
- data/lib/axlsx/drawing/val_axis.rb +1 -1
- data/lib/axlsx/drawing/view_3D.rb +2 -2
- data/lib/axlsx/drawing/vml_drawing.rb +1 -1
- data/lib/axlsx/package.rb +34 -32
- data/lib/axlsx/rels/relationship.rb +1 -1
- data/lib/axlsx/rels/relationships.rb +7 -4
- data/lib/axlsx/stylesheet/border_pr.rb +2 -2
- data/lib/axlsx/stylesheet/cell_alignment.rb +1 -3
- data/lib/axlsx/stylesheet/cell_protection.rb +1 -3
- data/lib/axlsx/stylesheet/cell_style.rb +1 -3
- data/lib/axlsx/stylesheet/color.rb +1 -3
- data/lib/axlsx/stylesheet/font.rb +1 -1
- data/lib/axlsx/stylesheet/gradient_stop.rb +1 -1
- data/lib/axlsx/stylesheet/num_fmt.rb +10 -3
- data/lib/axlsx/stylesheet/pattern_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +7 -7
- data/lib/axlsx/stylesheet/table_style_element.rb +1 -3
- data/lib/axlsx/util/accessors.rb +6 -6
- data/lib/axlsx/util/constants.rb +107 -99
- data/lib/axlsx/util/mime_type_utils.rb +11 -0
- data/lib/axlsx/util/options_parser.rb +2 -1
- data/lib/axlsx/util/parser.rb +4 -4
- data/lib/axlsx/util/serialized_attributes.rb +16 -6
- data/lib/axlsx/util/simple_typed_list.rb +28 -52
- data/lib/axlsx/util/storage.rb +4 -4
- data/lib/axlsx/util/validators.rb +29 -17
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/defined_name.rb +11 -12
- data/lib/axlsx/workbook/defined_names.rb +2 -2
- data/lib/axlsx/workbook/shared_strings_table.rb +5 -5
- data/lib/axlsx/workbook/workbook.rb +36 -11
- data/lib/axlsx/workbook/workbook_view.rb +80 -0
- data/lib/axlsx/workbook/workbook_views.rb +22 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +2 -2
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +1 -3
- data/lib/axlsx/workbook/worksheet/break.rb +1 -3
- data/lib/axlsx/workbook/worksheet/cell.rb +136 -74
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +63 -43
- data/lib/axlsx/workbook/worksheet/cfvo.rb +1 -3
- data/lib/axlsx/workbook/worksheet/cfvos.rb +4 -1
- data/lib/axlsx/workbook/worksheet/col.rb +7 -10
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +2 -2
- data/lib/axlsx/workbook/worksheet/cols.rb +5 -2
- data/lib/axlsx/workbook/worksheet/comment.rb +5 -6
- data/lib/axlsx/workbook/worksheet/comments.rb +9 -12
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +1 -1
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
- data/lib/axlsx/workbook/worksheet/data_bar.rb +4 -6
- data/lib/axlsx/workbook/worksheet/data_validation.rb +6 -4
- data/lib/axlsx/workbook/worksheet/dimension.rb +2 -2
- data/lib/axlsx/workbook/worksheet/header_footer.rb +6 -8
- data/lib/axlsx/workbook/worksheet/icon_set.rb +3 -5
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +4 -2
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +1 -3
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -1
- data/lib/axlsx/workbook/worksheet/page_setup.rb +21 -23
- data/lib/axlsx/workbook/worksheet/pane.rb +1 -3
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +44 -28
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -4
- data/lib/axlsx/workbook/worksheet/print_options.rb +1 -3
- data/lib/axlsx/workbook/worksheet/protected_range.rb +1 -3
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -2
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
- data/lib/axlsx/workbook/worksheet/row.rb +40 -51
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +2 -2
- data/lib/axlsx/workbook/worksheet/selection.rb +1 -3
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +21 -3
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -3
- data/lib/axlsx/workbook/worksheet/table.rb +6 -6
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +1 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +4 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +64 -78
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +10 -10
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +3 -3
- data/lib/axlsx.rb +34 -15
- data/test/drawing/tc_area_chart.rb +39 -0
- data/test/drawing/tc_area_series.rb +71 -0
- data/test/drawing/tc_axis.rb +27 -0
- data/test/drawing/tc_bar_chart.rb +71 -0
- data/test/drawing/tc_bubble_chart.rb +44 -0
- data/test/drawing/tc_bubble_series.rb +21 -0
- data/test/drawing/tc_chart.rb +23 -10
- data/test/drawing/tc_data_source.rb +6 -0
- data/test/drawing/tc_drawing.rb +2 -2
- data/test/drawing/tc_line_chart.rb +5 -5
- data/test/drawing/tc_line_series.rb +47 -6
- data/test/drawing/tc_pic.rb +11 -15
- data/test/drawing/tc_scatter_series.rb +36 -1
- data/test/drawing/tc_str_val.rb +9 -0
- data/test/drawing/tc_title.rb +5 -0
- data/test/stylesheet/tc_styles.rb +2 -2
- data/test/tc_axlsx.rb +31 -0
- data/test/tc_helper.rb +2 -0
- data/test/tc_package.rb +19 -1
- data/test/util/tc_mime_type_utils.rb +13 -0
- data/test/util/tc_simple_typed_list.rb +2 -3
- data/test/util/tc_validators.rb +34 -10
- data/test/workbook/tc_defined_name.rb +12 -4
- data/test/workbook/tc_shared_strings_table.rb +16 -1
- data/test/workbook/tc_workbook.rb +38 -3
- data/test/workbook/tc_workbook_view.rb +50 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +1 -1
- data/test/workbook/worksheet/tc_break.rb +1 -1
- data/test/workbook/worksheet/tc_cell.rb +76 -8
- data/test/workbook/worksheet/tc_col.rb +2 -2
- data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +11 -11
- data/test/workbook/worksheet/tc_header_footer.rb +2 -2
- data/test/workbook/worksheet/tc_icon_set.rb +1 -1
- data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
- data/test/workbook/worksheet/tc_page_setup.rb +3 -3
- data/test/workbook/worksheet/tc_pivot_table.rb +21 -6
- data/test/workbook/worksheet/tc_print_options.rb +1 -1
- data/test/workbook/worksheet/tc_rich_text.rb +44 -0
- data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
- data/test/workbook/worksheet/tc_row.rb +7 -2
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +1 -1
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +4 -4
- data/test/workbook/worksheet/tc_sheet_pr.rb +26 -4
- data/test/workbook/worksheet/tc_sheet_protection.rb +5 -5
- data/test/workbook/worksheet/tc_sheet_view.rb +4 -4
- data/test/workbook/worksheet/tc_table.rb +2 -3
- data/test/workbook/worksheet/tc_worksheet.rb +99 -45
- metadata +142 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ace95e053d44bf7ebbd97250359660526f4672d
|
4
|
+
data.tar.gz: fbbcb63a35a7c7b39a15895e6c7d6478ea32a5a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cce5eb9c776949ceb488f48d6014eeff6090203b90ca80dc43a553c5439f847a4885f698772eed72096a82049048ba9a26e7013a5e0de5a984fe7c7f6afe6cac
|
7
|
+
data.tar.gz: 2a882ec60dd5ddf6e96f662c69f00db4ce0516e1063797f3341e630549f17813796f868e00b8c7548531cf48c3f804c84759f5367e548ac466857273a9745702
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
---------
|
3
|
+
- **April.1.17**:3.0.0-pre
|
4
|
+
- Support for ruby versions limited to officially supported version
|
5
|
+
- Updates to dependency gems, especially nokogiri and ruby-zip
|
6
|
+
- Patch options parsing for two cell anchor
|
7
|
+
- Remove support for depreciated worksheet members
|
3
8
|
- **November.25.12**:1.3.4
|
4
9
|
- Support for headers and footers for worksheets
|
5
10
|
- bug fix: Properly escape hyperlink urls
|
data/README.md
CHANGED
@@ -1,33 +1,31 @@
|
|
1
1
|
Axlsx: Office Open XML Spreadsheet Generation
|
2
2
|
====================================
|
3
|
-
[](http://travis-ci.org/randym/axlsx/)
|
4
4
|
|
5
|
-
If you are using axlsx for
|
5
|
+
If you are using axlsx for commercial purposes, or just want to show your
|
6
6
|
appreciation for the gem, please don't hesitate to make a donation.
|
7
7
|
|
8
|
-
[](http://www.pledgie.com/campaigns/17814)
|
9
|
-
|
10
8
|
**IRC**:[irc.freenode.net / #axlsx](irc://irc.freenode.net/axlsx)
|
11
9
|
|
12
10
|
**Git**:[http://github.com/randym/axlsx](http://github.com/randym/axlsx)
|
13
11
|
|
14
|
-
**Twitter**: [https://twitter.com
|
12
|
+
**Twitter**: [https://twitter.com/morgan_randy](https://twitter.com/morgan_randy)
|
15
13
|
|
16
14
|
**Google Group**: [https://groups.google.com/forum/?fromgroups#!forum/axlsx](https://groups.google.com/forum/?fromgroups#!forum/axlsx)
|
17
15
|
|
18
16
|
**Author**: Randy Morgan
|
19
17
|
|
20
|
-
**Copyright**: 2011 -
|
18
|
+
**Copyright**: 2011 - 2017
|
21
19
|
|
22
20
|
**License**: MIT License
|
23
21
|
|
24
|
-
**Latest Version**:
|
22
|
+
**Latest Version**: 3.0.0
|
25
23
|
|
26
|
-
**Ruby Version**:
|
24
|
+
**Ruby Version**: 2.2.7, 2.3.4, 2.4.1
|
27
25
|
|
28
26
|
**JRuby Version**: 1.9 modes
|
29
27
|
|
30
|
-
**Rubinius Version**: rubinius
|
28
|
+
**Rubinius Version**: rubinius 3 * lower versions may run, this gem always tests against head.
|
31
29
|
|
32
30
|
**Release Date**: September 12th 2013
|
33
31
|
|
@@ -50,9 +48,9 @@ There are guides for using axlsx and acts_as_xlsx here:
|
|
50
48
|
|
51
49
|
If you are working with ActiveAdmin see:
|
52
50
|
|
53
|
-
[
|
51
|
+
[activeadmin-axlsx](http://github.com/randym/activeadmin-axlsx)
|
54
52
|
|
55
|
-
It
|
53
|
+
It provides a plugin and dsl for generating downloadable reports.
|
56
54
|
|
57
55
|
The examples directory contains a number of more specific examples as
|
58
56
|
well.
|
@@ -153,7 +151,7 @@ There is much, much more you can do with this gem. If you get stuck, grab me on
|
|
153
151
|
|
154
152
|
This gem is 100% documented with YARD, an exceptional documentation library. To see documentation for this, and all the gems installed on your system use:
|
155
153
|
|
156
|
-
gem install yard
|
154
|
+
gem install yard kramdown
|
157
155
|
|
158
156
|
yard server -g
|
159
157
|
|
@@ -164,7 +162,10 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
|
|
164
162
|
|
165
163
|
#Change log
|
166
164
|
---------
|
167
|
-
|
165
|
+
- **
|
166
|
+
- Added Cell#name so you you can quickly create a defined name for a single cell in your workbook.
|
167
|
+
- Added full book view and sheet state management. This means you can specify how the workbook renders as well as manage sheet visibility.
|
168
|
+
- Added smoothing management for line charts series
|
168
169
|
- **September.12.13**:2.0.1
|
169
170
|
- Unpinned rubyzip version
|
170
171
|
- **September.12.13**:2.0.0
|
@@ -228,16 +229,15 @@ related to themes, which axlsx does not implement at this time.
|
|
228
229
|
- you must set 'use_shared_strings' to true. This is most
|
229
230
|
conveniently done just before rendering by calling Package.use_shared_strings = true prior to serialization.
|
230
231
|
|
231
|
-
```ruby
|
232
|
-
p = Axlsx::Package.new
|
233
|
-
p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
234
|
-
|
235
|
-
|
236
|
-
end
|
237
|
-
p.use_shared_strings = true
|
238
|
-
p.serialize('simple.xlsx')
|
239
|
-
```
|
240
|
-
|
232
|
+
```ruby
|
233
|
+
p = Axlsx::Package.new
|
234
|
+
p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
235
|
+
sheet.add_row ["First Column", "Second", "Third"]
|
236
|
+
sheet.add_row [1, 2, 3]
|
237
|
+
end
|
238
|
+
p.use_shared_strings = true
|
239
|
+
p.serialize('simple.xlsx')
|
240
|
+
```
|
241
241
|
- charts do not render
|
242
242
|
|
243
243
|
|
data/Rakefile
CHANGED
@@ -9,19 +9,17 @@ task :benchmark do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
task :gendoc do
|
12
|
-
|
13
|
-
|
14
|
-
system "yard stats --list-undoc"
|
12
|
+
system "yardoc"
|
13
|
+
system "yard stats --list-undoc"
|
15
14
|
end
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
16
|
+
|
17
|
+
require 'rake/testtask'
|
18
|
+
Rake::TestTask.new do |t|
|
19
|
+
t.libs << 'test'
|
20
|
+
t.test_files = FileList['test/**/tc_*.rb']
|
21
|
+
t.verbose = false
|
22
|
+
t.warning = true
|
25
23
|
end
|
26
24
|
|
27
25
|
task :release => :build do
|
data/examples/auto_filter.rb
CHANGED
@@ -10,7 +10,16 @@ Axlsx::Package.new do |p|
|
|
10
10
|
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
11
11
|
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
12
12
|
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
13
|
-
sheet.auto_filter = 'A2:D5'
|
13
|
+
sheet.auto_filter = 'A2:D5'
|
14
|
+
sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2']
|
15
|
+
end
|
16
|
+
p.workbook.add_worksheet(:name => "Table 2") do |sheet|
|
17
|
+
sheet.add_row ["Build Matrix"]
|
18
|
+
sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
|
19
|
+
sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
|
20
|
+
sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
|
21
|
+
sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
|
22
|
+
sheet.auto_filter = 'A2:D5'
|
14
23
|
sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2']
|
15
24
|
end
|
16
25
|
end.serialize('auto_filter.xlsx')
|
@@ -9,10 +9,11 @@ book = p.workbook
|
|
9
9
|
# define your regular styles
|
10
10
|
percent = book.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
|
11
11
|
money = book.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
12
|
+
status = book.styles.add_style(:border => Axlsx::STYLE_THIN_BORDER)
|
12
13
|
|
13
14
|
# define the style for conditional formatting
|
14
|
-
profitable = book.styles.add_style( :fg_color => "
|
15
|
-
unprofitable =
|
15
|
+
profitable = book.styles.add_style( :fg_color => "428751", :type => :dxf )
|
16
|
+
unprofitable = book.styles.add_style( :fg_color => "FF0000", :type => :dxf )
|
16
17
|
|
17
18
|
book.add_worksheet(:name => "Cell Is") do |ws|
|
18
19
|
|
@@ -28,7 +29,7 @@ book.add_worksheet(:name => "Cell Is") do |ws|
|
|
28
29
|
# Apply conditional formatting to range B3:B100 in the worksheet
|
29
30
|
ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
|
30
31
|
# Apply conditional using the between operator; NOTE: supply an array to :formula for between/notBetween
|
31
|
-
|
32
|
+
ws.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
|
32
33
|
end
|
33
34
|
|
34
35
|
book.add_worksheet(:name => "Color Scale") do |ws|
|
@@ -71,4 +72,18 @@ book.add_worksheet(:name => "Icon Set") do |ws|
|
|
71
72
|
ws.add_conditional_formatting("B3:B100", { :type => :iconSet, :dxfId => profitable, :priority => 1, :icon_set => icon_set })
|
72
73
|
end
|
73
74
|
|
75
|
+
book.add_worksheet(:name => "Contains Text") do |ws|
|
76
|
+
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
|
77
|
+
ws.add_row ["Quarter", "Profit", "% of Total", "Status"]
|
78
|
+
offset = 3
|
79
|
+
rows = 20
|
80
|
+
offset.upto(rows + offset) do |i|
|
81
|
+
ws.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})", (10000*((rows/2-i) * (rows/2-i))) > 100000 ? "PROFIT" : "LOSS"], :style=>[nil, money, percent, status]
|
82
|
+
end
|
83
|
+
|
84
|
+
# Apply conditional formatting to range D3:D100 in the worksheet
|
85
|
+
ws.add_conditional_formatting("D3:D100", { :type => :containsText, :operator => :equal, :text => "PROFIT", :dxfId => profitable, :priority => 1 })
|
86
|
+
ws.add_conditional_formatting("D3:D100", { :type => :containsText, :operator => :equal, :text => "LOSS", :dxfId => unprofitable, :priority => 1 })
|
87
|
+
end
|
88
|
+
|
74
89
|
p.serialize('example_conditional_formatting.xlsx')
|
data/examples/example.rb
CHANGED
@@ -14,6 +14,7 @@ examples << :surrounding_border
|
|
14
14
|
examples << :deep_custom_borders
|
15
15
|
examples << :row_column_style
|
16
16
|
examples << :fixed_column_width
|
17
|
+
examples << :height
|
17
18
|
examples << :outline_level
|
18
19
|
examples << :merge_cells
|
19
20
|
examples << :images
|
@@ -40,13 +41,17 @@ examples << :printing
|
|
40
41
|
examples << :header_footer
|
41
42
|
examples << :comments
|
42
43
|
examples << :panes
|
44
|
+
examples << :book_view
|
43
45
|
examples << :sheet_view
|
46
|
+
examples << :hiding_sheets
|
44
47
|
examples << :conditional_formatting
|
45
48
|
examples << :streaming
|
46
49
|
examples << :shared_strings
|
47
50
|
examples << :no_autowidth
|
48
51
|
examples << :cached_formula
|
49
52
|
examples << :page_breaks
|
53
|
+
examples << :rich_text
|
54
|
+
examples << :tab_color
|
50
55
|
|
51
56
|
p = Axlsx::Package.new
|
52
57
|
wb = p.workbook
|
@@ -207,6 +212,7 @@ if examples.include? :row_column_style
|
|
207
212
|
head = s.add_style :bg_color => "00", :fg_color => "FF"
|
208
213
|
percent = s.add_style :num_fmt => 9
|
209
214
|
wb.add_worksheet(:name => "Columns and Rows") do |sheet|
|
215
|
+
# Note: you must add rows to the document *BEFORE* applying column styles to them
|
210
216
|
sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4', 'col5']
|
211
217
|
sheet.add_row [1, 2, 0.3, 4, 5.0]
|
212
218
|
sheet.add_row [1, 2, 0.2, 4, 5.0]
|
@@ -243,6 +249,21 @@ if examples.include? :fixed_column_width
|
|
243
249
|
end
|
244
250
|
end
|
245
251
|
|
252
|
+
|
253
|
+
##Specifying Row height
|
254
|
+
|
255
|
+
#```ruby
|
256
|
+
if examples.include? :height
|
257
|
+
wb.styles do |s|
|
258
|
+
head = s.add_style :bg_color => "00", :fg_color => "FF"
|
259
|
+
wb.add_worksheet(:name => "fixed row height") do |sheet|
|
260
|
+
sheet.add_row ["This row will have a fixed height", "It will overwite the default row height"], :height => 30
|
261
|
+
sheet.add_row ["This row can have a different height too"], :height => 10, :style => head
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
|
246
267
|
#```ruby
|
247
268
|
if examples.include? :outline_level
|
248
269
|
wb.add_worksheet(name: 'outline_level') do |sheet|
|
@@ -279,13 +300,23 @@ if examples.include? :images
|
|
279
300
|
wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
|
280
301
|
img = File.expand_path('../image1.jpeg', __FILE__)
|
281
302
|
# specifying the :hyperlink option will add a hyper link to your image.
|
303
|
+
#
|
282
304
|
# @note - Numbers does not support this part of the specification.
|
305
|
+
|
283
306
|
sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
284
307
|
image.width=720
|
285
308
|
image.height=666
|
286
309
|
image.hyperlink.tooltip = "Labeled Link"
|
287
|
-
image.start_at
|
310
|
+
image.start_at 0, 0
|
288
311
|
end
|
312
|
+
|
313
|
+
# position in block
|
314
|
+
sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
315
|
+
image.start_at 22, 14
|
316
|
+
image.end_at 23, 17
|
317
|
+
end
|
318
|
+
# all in one go
|
319
|
+
sheet.add_image(:image_src => img, :start_at => [15, 33], :end_at => [20, 37], :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com")
|
289
320
|
end
|
290
321
|
end
|
291
322
|
#```
|
@@ -470,7 +501,7 @@ if examples.include? :line_chart
|
|
470
501
|
sheet.add_chart(Axlsx::LineChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
|
471
502
|
chart.start_at 0, 21
|
472
503
|
chart.end_at 10, 41
|
473
|
-
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000"
|
504
|
+
chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000", :show_marker => true, :smooth => true
|
474
505
|
chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "00FF00"
|
475
506
|
chart.catAxis.title = 'X Axis'
|
476
507
|
chart.valAxis.title = 'Y Axis'
|
@@ -644,12 +675,33 @@ if examples.include? :sheet_view
|
|
644
675
|
end
|
645
676
|
end
|
646
677
|
|
678
|
+
## Book Views
|
679
|
+
#
|
680
|
+
## Book views let you specify which sheet the show as active when the user opens the work book as well as a bunch of other
|
681
|
+
## tuning values for the UI @see Axlsx::WorkbookView
|
682
|
+
## ```ruby
|
683
|
+
if examples.include? :book_view
|
684
|
+
# when you open example.xml the second sheet is selected, and the horizontal scroll bar is much smaller showing more sheets
|
685
|
+
wb.add_view tab_ratio: 800, active_tab: 1
|
686
|
+
end
|
647
687
|
|
688
|
+
## Hiding Sheets
|
689
|
+
##
|
690
|
+
## Sheets can be hidden with the state attribute
|
691
|
+
if examples.include? :hiding_sheets
|
692
|
+
wb.add_worksheet name: 'hidden', state: :hidden do |sheet|
|
693
|
+
sheet.add_row ['you cant see me!']
|
694
|
+
end
|
695
|
+
wb.add_worksheet name: 'very hidden', state: :very_hidden do |sheet|
|
696
|
+
sheet.add_row ['you really cant see me!']
|
697
|
+
end
|
698
|
+
end
|
648
699
|
# conditional formatting
|
649
700
|
#
|
650
701
|
if examples.include? :conditional_formatting
|
651
702
|
percent = wb.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
|
652
703
|
money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
|
704
|
+
status = wb.styles.add_style(:border => Axlsx::STYLE_THIN_BORDER)
|
653
705
|
|
654
706
|
# define the style for conditional formatting
|
655
707
|
profitable = wb.styles.add_style( :fg_color => "FF428751", :type => :dxf )
|
@@ -713,6 +765,19 @@ if examples.include? :conditional_formatting
|
|
713
765
|
icon_set = Axlsx::IconSet.new
|
714
766
|
sheet.add_conditional_formatting("B3:B100", { :type => :iconSet, :dxfId => profitable, :priority => 1, :icon_set => icon_set })
|
715
767
|
end
|
768
|
+
|
769
|
+
wb.add_worksheet(:name => "Contains Text") do |sheet|
|
770
|
+
sheet.add_row ["Previous Year Quarterly Profits (JPY)"]
|
771
|
+
sheet.add_row ["Quarter", "Profit", "% of Total", "Status"]
|
772
|
+
offset = 3
|
773
|
+
rows = 20
|
774
|
+
offset.upto(rows + offset) do |i|
|
775
|
+
sheet.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})", (10000*((rows/2-i) * (rows/2-i))) > 100000 ? "PROFIT" : "LOSS"], :style=>[nil, money, percent, status]
|
776
|
+
end
|
777
|
+
# Apply conditional formatting to range D3:D100 in the worksheet to match words.
|
778
|
+
sheet.add_conditional_formatting("D3:D100", { :type => :containsText, :operator => :equal, :text => "PROFIT", :dxfId => profitable, :priority => 1 })
|
779
|
+
sheet.add_conditional_formatting("D3:D100", { :type => :containsText, :operator => :equal, :text => "LOSS", :dxfId => unprofitable, :priority => 1 })
|
780
|
+
end
|
716
781
|
end
|
717
782
|
|
718
783
|
# Page Breaks
|
@@ -763,8 +828,7 @@ if examples.include? :no_autowidth
|
|
763
828
|
end
|
764
829
|
#```
|
765
830
|
|
766
|
-
|
767
|
-
|
831
|
+
#```ruby
|
768
832
|
if examples.include? :cached_formula
|
769
833
|
p = Axlsx::Package.new
|
770
834
|
p.use_shared_strings = true
|
@@ -774,4 +838,38 @@ if examples.include? :cached_formula
|
|
774
838
|
end
|
775
839
|
p.serialize 'cached_formula.xlsx'
|
776
840
|
end
|
841
|
+
#```
|
842
|
+
|
843
|
+
#```ruby
|
844
|
+
if examples.include? :rich_text
|
845
|
+
p = Axlsx::Package.new
|
846
|
+
p.use_shared_strings = true
|
847
|
+
wb = p.workbook
|
848
|
+
wrap_text = wb.styles.add_style({:alignment => {:horizontal => :center, :vertical => :center, :wrap_text => true}} )
|
849
|
+
rt = Axlsx::RichText.new
|
850
|
+
rt.add_run('I\'m bold, ', :b => true)
|
851
|
+
rt.add_run('I\'m italic, ', :i => true)
|
852
|
+
rt.add_run('I\'m strike' + "\n", :strike => true)
|
853
|
+
rt.add_run('I\'m bold, italic and strike' + "\n", :b => true, :i => true, :strike => true)
|
854
|
+
rt.add_run('I\'m style-less :D')
|
855
|
+
wb.add_worksheet(:name => "RichText") do | sheet |
|
856
|
+
sheet.add_row [rt], :style => wrap_text
|
857
|
+
end
|
858
|
+
p.serialize 'rich_text.xlsx'
|
859
|
+
end
|
860
|
+
#```
|
777
861
|
|
862
|
+
##Change tab color of sheet
|
863
|
+
|
864
|
+
#```ruby
|
865
|
+
if examples.include? :tab_color
|
866
|
+
p = Axlsx::Package.new
|
867
|
+
p.use_shared_strings = true
|
868
|
+
wb = p.workbook
|
869
|
+
wb.add_worksheet(:name => "Change Tab Color") do |sheet|
|
870
|
+
sheet.add_row ["Check", "out", "the", "Tab Color", "below!"]
|
871
|
+
sheet.sheet_pr.tab_color = "FFFF6666"
|
872
|
+
end
|
873
|
+
p.serialize 'tab_color.xlsx'
|
874
|
+
end
|
875
|
+
##```
|
@@ -0,0 +1,17 @@
|
|
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
|
+
package = Axlsx::Package.new
|
8
|
+
package.workbook do |workbook|
|
9
|
+
workbook.add_worksheet name: 'merged_cells' do |sheet|
|
10
|
+
4.times do
|
11
|
+
sheet.add_row %w(a b c d e f g)
|
12
|
+
end
|
13
|
+
sheet.merge_cells "A1:A2"
|
14
|
+
sheet.merge_cells "B1:B2"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
package.serialize 'merged_cells.xlsx'
|
@@ -0,0 +1,18 @@
|
|
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
|
+
package = Axlsx::Package.new
|
8
|
+
package.workbook do |workbook|
|
9
|
+
workbook.styles do |s|
|
10
|
+
gridstyle_border = s.add_style :border => { :style => :thin, :color =>"FFCDCDCD" }
|
11
|
+
workbook.add_worksheet :name => "Custom Borders" do |sheet|
|
12
|
+
sheet.sheet_view.show_grid_lines = false
|
13
|
+
sheet.add_row ["with", "grid", "style"], :style => gridstyle_border
|
14
|
+
sheet.add_row ["no", "border"]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
package.serialize 'no_grid_with_borders.xlsx'
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class RandomReportGenerator
|
2
|
+
def date
|
3
|
+
Date.today.strftime("%m/%d/%Y")
|
4
|
+
end
|
5
|
+
def member_id
|
6
|
+
@i ||= 0
|
7
|
+
@i += 1
|
8
|
+
end
|
9
|
+
def name
|
10
|
+
"John S."
|
11
|
+
end
|
12
|
+
def gender
|
13
|
+
["Male", "Female"].sample
|
14
|
+
end
|
15
|
+
def age
|
16
|
+
rand(100)
|
17
|
+
end
|
18
|
+
def city
|
19
|
+
["New York", "Mountain View", "Newark", "Phoenix"].sample
|
20
|
+
end
|
21
|
+
def state
|
22
|
+
["NY", "CA", "NJ", "AZ"].sample
|
23
|
+
end
|
24
|
+
def parenting
|
25
|
+
"Foo"
|
26
|
+
end
|
27
|
+
def student
|
28
|
+
"Bar"
|
29
|
+
end
|
30
|
+
def income
|
31
|
+
"Bar"
|
32
|
+
end
|
33
|
+
def education
|
34
|
+
"Bar"
|
35
|
+
end
|
36
|
+
def answer
|
37
|
+
["Yes", "No", "Maybe", "I dont know"].sample
|
38
|
+
end
|
39
|
+
def run
|
40
|
+
package = Axlsx::Package.new
|
41
|
+
workbook = package.workbook
|
42
|
+
|
43
|
+
workbook.add_worksheet(:name => "Data Sheet") do |sheet|
|
44
|
+
sheet.add_row [
|
45
|
+
"Date", "Member ID", "Name", "Gender", "Age", "City", "State",
|
46
|
+
"Parenting Status", "Student Status", "Income", "Education", "Answer"
|
47
|
+
]
|
48
|
+
30.times do
|
49
|
+
sheet.add_row [date, member_id, name, gender, age, city, state,
|
50
|
+
parenting, student, income, education, answer]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
workbook.add_worksheet(:name => "Summary") do |sheet|
|
55
|
+
pivot_table = Axlsx::PivotTable.new 'A1:B15', "A1:L31", workbook.worksheets[0]
|
56
|
+
pivot_table.rows = ['Answer']
|
57
|
+
pivot_table.data = [{:ref => "Member ID", :subtotal => "count"}]
|
58
|
+
sheet.pivot_tables << pivot_table
|
59
|
+
end
|
60
|
+
|
61
|
+
package.serialize("pivot_table.xlsx")
|
62
|
+
end
|
63
|
+
end
|
data/examples/split.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby -w -s
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
4
|
+
require 'axlsx'
|
5
|
+
p = Axlsx::Package.new
|
6
|
+
wb = p.workbook
|
7
|
+
wb.add_worksheet name: 'pane' do |sheet|
|
8
|
+
sheet.sheet_view.pane do |pane|
|
9
|
+
pane.top_left_cell = "B2"
|
10
|
+
pane.state = :frozen_split
|
11
|
+
pane.y_split = 2
|
12
|
+
pane.x_split = 1
|
13
|
+
pane.active_pane = :bottom_right
|
14
|
+
end
|
15
|
+
end
|
16
|
+
p.serialize 'pane.xlsx'
|
@@ -24,7 +24,7 @@ module Axlsx
|
|
24
24
|
# Serialize the contenty type to xml
|
25
25
|
def to_xml_string(node_name = '', str = '')
|
26
26
|
str << "<#{node_name} "
|
27
|
-
str << instance_values.map { |key, value|
|
27
|
+
str << instance_values.map { |key, value| Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ')
|
28
28
|
str << '/>'
|
29
29
|
end
|
30
30
|
|
@@ -16,7 +16,7 @@ module Axlsx
|
|
16
16
|
# @return [String]
|
17
17
|
def to_xml_string(str = '')
|
18
18
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
19
|
-
str << '<Types xmlns="' << XML_NS_T << '">'
|
19
|
+
str << ('<Types xmlns="' << XML_NS_T << '">')
|
20
20
|
each { |type| type.to_xml_string(str) }
|
21
21
|
str << '</Types>'
|
22
22
|
end
|
data/lib/axlsx/doc_props/app.rb
CHANGED
@@ -222,7 +222,7 @@ module Axlsx
|
|
222
222
|
# @return [String]
|
223
223
|
def to_xml_string(str = '')
|
224
224
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
225
|
-
str << '<Properties xmlns="' << APP_NS << '" xmlns:vt="' << APP_NS_VT << '">'
|
225
|
+
str << ('<Properties xmlns="' << APP_NS << '" xmlns:vt="' << APP_NS_VT << '">')
|
226
226
|
instance_values.each do |key, value|
|
227
227
|
node_name = Axlsx.camel(key)
|
228
228
|
str << "<#{node_name}>#{value}</#{node_name}>"
|
data/lib/axlsx/doc_props/core.rb
CHANGED
@@ -25,11 +25,11 @@ module Axlsx
|
|
25
25
|
# @return [String]
|
26
26
|
def to_xml_string(str = '')
|
27
27
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
28
|
-
str << '<cp:coreProperties xmlns:cp="' << CORE_NS << '" xmlns:dc="' << CORE_NS_DC << '" '
|
29
|
-
str << 'xmlns:dcmitype="' << CORE_NS_DCMIT << '" xmlns:dcterms="' << CORE_NS_DCT << '" '
|
30
|
-
str << 'xmlns:xsi="' << CORE_NS_XSI << '">'
|
31
|
-
str << '<dc:creator>' << self.creator << '</dc:creator>'
|
32
|
-
str << '<dcterms:created xsi:type="dcterms:W3CDTF">' << (created || Time.now).strftime('%Y-%m-%dT%H:%M:%S') << 'Z</dcterms:created>'
|
28
|
+
str << ('<cp:coreProperties xmlns:cp="' << CORE_NS << '" xmlns:dc="' << CORE_NS_DC << '" ')
|
29
|
+
str << ('xmlns:dcmitype="' << CORE_NS_DCMIT << '" xmlns:dcterms="' << CORE_NS_DCT << '" ')
|
30
|
+
str << ('xmlns:xsi="' << CORE_NS_XSI << '">')
|
31
|
+
str << ('<dc:creator>' << self.creator << '</dc:creator>')
|
32
|
+
str << ('<dcterms:created xsi:type="dcterms:W3CDTF">' << (created || Time.now).strftime('%Y-%m-%dT%H:%M:%S') << 'Z</dcterms:created>')
|
33
33
|
str << '<cp:revision>0</cp:revision>'
|
34
34
|
str << '</cp:coreProperties>'
|
35
35
|
end
|