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.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +23 -23
  4. data/Rakefile +9 -11
  5. data/examples/auto_filter.rb +10 -1
  6. data/examples/conditional_formatting/example_conditional_formatting.rb +18 -3
  7. data/examples/example.rb +102 -4
  8. data/examples/merge_cells.rb +17 -0
  9. data/examples/no_grid_with_borders.rb +18 -0
  10. data/examples/pivot_test.rb +63 -0
  11. data/examples/split.rb +16 -0
  12. data/lib/axlsx/content_type/abstract_content_type.rb +1 -1
  13. data/lib/axlsx/content_type/content_type.rb +1 -1
  14. data/lib/axlsx/doc_props/app.rb +1 -1
  15. data/lib/axlsx/doc_props/core.rb +5 -5
  16. data/lib/axlsx/drawing/area_chart.rb +99 -0
  17. data/lib/axlsx/drawing/area_series.rb +110 -0
  18. data/lib/axlsx/drawing/axes.rb +1 -1
  19. data/lib/axlsx/drawing/axis.rb +12 -9
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +13 -13
  21. data/lib/axlsx/drawing/bar_chart.rb +143 -0
  22. data/lib/axlsx/drawing/bar_series.rb +9 -9
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  25. data/lib/axlsx/drawing/cat_axis.rb +5 -5
  26. data/lib/axlsx/drawing/chart.rb +52 -8
  27. data/lib/axlsx/drawing/d_lbls.rb +3 -3
  28. data/lib/axlsx/drawing/drawing.rb +6 -1
  29. data/lib/axlsx/drawing/graphic_frame.rb +3 -3
  30. data/lib/axlsx/drawing/hyperlink.rb +1 -3
  31. data/lib/axlsx/drawing/line_3D_chart.rb +2 -2
  32. data/lib/axlsx/drawing/line_chart.rb +10 -10
  33. data/lib/axlsx/drawing/line_series.rb +32 -3
  34. data/lib/axlsx/drawing/marker.rb +1 -1
  35. data/lib/axlsx/drawing/num_data.rb +4 -4
  36. data/lib/axlsx/drawing/num_data_source.rb +6 -6
  37. data/lib/axlsx/drawing/num_val.rb +3 -1
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +3 -2
  39. data/lib/axlsx/drawing/pic.rb +25 -19
  40. data/lib/axlsx/drawing/picture_locking.rb +1 -3
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +5 -6
  42. data/lib/axlsx/drawing/pie_series.rb +6 -6
  43. data/lib/axlsx/drawing/scaling.rb +6 -6
  44. data/lib/axlsx/drawing/scatter_chart.rb +10 -10
  45. data/lib/axlsx/drawing/scatter_series.rb +40 -7
  46. data/lib/axlsx/drawing/ser_axis.rb +2 -2
  47. data/lib/axlsx/drawing/series.rb +3 -3
  48. data/lib/axlsx/drawing/series_title.rb +2 -2
  49. data/lib/axlsx/drawing/str_data.rb +3 -3
  50. data/lib/axlsx/drawing/str_val.rb +3 -1
  51. data/lib/axlsx/drawing/title.rb +22 -4
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +6 -1
  53. data/lib/axlsx/drawing/val_axis.rb +1 -1
  54. data/lib/axlsx/drawing/view_3D.rb +2 -2
  55. data/lib/axlsx/drawing/vml_drawing.rb +1 -1
  56. data/lib/axlsx/package.rb +34 -32
  57. data/lib/axlsx/rels/relationship.rb +1 -1
  58. data/lib/axlsx/rels/relationships.rb +7 -4
  59. data/lib/axlsx/stylesheet/border_pr.rb +2 -2
  60. data/lib/axlsx/stylesheet/cell_alignment.rb +1 -3
  61. data/lib/axlsx/stylesheet/cell_protection.rb +1 -3
  62. data/lib/axlsx/stylesheet/cell_style.rb +1 -3
  63. data/lib/axlsx/stylesheet/color.rb +1 -3
  64. data/lib/axlsx/stylesheet/font.rb +1 -1
  65. data/lib/axlsx/stylesheet/gradient_stop.rb +1 -1
  66. data/lib/axlsx/stylesheet/num_fmt.rb +10 -3
  67. data/lib/axlsx/stylesheet/pattern_fill.rb +1 -1
  68. data/lib/axlsx/stylesheet/styles.rb +7 -7
  69. data/lib/axlsx/stylesheet/table_style_element.rb +1 -3
  70. data/lib/axlsx/util/accessors.rb +6 -6
  71. data/lib/axlsx/util/constants.rb +107 -99
  72. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  73. data/lib/axlsx/util/options_parser.rb +2 -1
  74. data/lib/axlsx/util/parser.rb +4 -4
  75. data/lib/axlsx/util/serialized_attributes.rb +16 -6
  76. data/lib/axlsx/util/simple_typed_list.rb +28 -52
  77. data/lib/axlsx/util/storage.rb +4 -4
  78. data/lib/axlsx/util/validators.rb +29 -17
  79. data/lib/axlsx/version.rb +1 -1
  80. data/lib/axlsx/workbook/defined_name.rb +11 -12
  81. data/lib/axlsx/workbook/defined_names.rb +2 -2
  82. data/lib/axlsx/workbook/shared_strings_table.rb +5 -5
  83. data/lib/axlsx/workbook/workbook.rb +36 -11
  84. data/lib/axlsx/workbook/workbook_view.rb +80 -0
  85. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  86. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +2 -2
  87. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +1 -3
  88. data/lib/axlsx/workbook/worksheet/break.rb +1 -3
  89. data/lib/axlsx/workbook/worksheet/cell.rb +136 -74
  90. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +63 -43
  91. data/lib/axlsx/workbook/worksheet/cfvo.rb +1 -3
  92. data/lib/axlsx/workbook/worksheet/cfvos.rb +4 -1
  93. data/lib/axlsx/workbook/worksheet/col.rb +7 -10
  94. data/lib/axlsx/workbook/worksheet/col_breaks.rb +2 -2
  95. data/lib/axlsx/workbook/worksheet/cols.rb +5 -2
  96. data/lib/axlsx/workbook/worksheet/comment.rb +5 -6
  97. data/lib/axlsx/workbook/worksheet/comments.rb +9 -12
  98. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +1 -1
  99. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
  100. data/lib/axlsx/workbook/worksheet/data_bar.rb +4 -6
  101. data/lib/axlsx/workbook/worksheet/data_validation.rb +6 -4
  102. data/lib/axlsx/workbook/worksheet/dimension.rb +2 -2
  103. data/lib/axlsx/workbook/worksheet/header_footer.rb +6 -8
  104. data/lib/axlsx/workbook/worksheet/icon_set.rb +3 -5
  105. data/lib/axlsx/workbook/worksheet/merged_cells.rb +4 -2
  106. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
  107. data/lib/axlsx/workbook/worksheet/page_margins.rb +1 -3
  108. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -1
  109. data/lib/axlsx/workbook/worksheet/page_setup.rb +21 -23
  110. data/lib/axlsx/workbook/worksheet/pane.rb +1 -3
  111. data/lib/axlsx/workbook/worksheet/pivot_table.rb +44 -28
  112. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -4
  113. data/lib/axlsx/workbook/worksheet/print_options.rb +1 -3
  114. data/lib/axlsx/workbook/worksheet/protected_range.rb +1 -3
  115. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -2
  116. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
  117. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
  118. data/lib/axlsx/workbook/worksheet/row.rb +40 -51
  119. data/lib/axlsx/workbook/worksheet/row_breaks.rb +2 -2
  120. data/lib/axlsx/workbook/worksheet/selection.rb +1 -3
  121. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  122. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +21 -3
  123. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -3
  124. data/lib/axlsx/workbook/worksheet/table.rb +6 -6
  125. data/lib/axlsx/workbook/worksheet/table_style_info.rb +1 -3
  126. data/lib/axlsx/workbook/worksheet/tables.rb +4 -1
  127. data/lib/axlsx/workbook/worksheet/worksheet.rb +64 -78
  128. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +10 -10
  129. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +3 -3
  130. data/lib/axlsx.rb +34 -15
  131. data/test/drawing/tc_area_chart.rb +39 -0
  132. data/test/drawing/tc_area_series.rb +71 -0
  133. data/test/drawing/tc_axis.rb +27 -0
  134. data/test/drawing/tc_bar_chart.rb +71 -0
  135. data/test/drawing/tc_bubble_chart.rb +44 -0
  136. data/test/drawing/tc_bubble_series.rb +21 -0
  137. data/test/drawing/tc_chart.rb +23 -10
  138. data/test/drawing/tc_data_source.rb +6 -0
  139. data/test/drawing/tc_drawing.rb +2 -2
  140. data/test/drawing/tc_line_chart.rb +5 -5
  141. data/test/drawing/tc_line_series.rb +47 -6
  142. data/test/drawing/tc_pic.rb +11 -15
  143. data/test/drawing/tc_scatter_series.rb +36 -1
  144. data/test/drawing/tc_str_val.rb +9 -0
  145. data/test/drawing/tc_title.rb +5 -0
  146. data/test/stylesheet/tc_styles.rb +2 -2
  147. data/test/tc_axlsx.rb +31 -0
  148. data/test/tc_helper.rb +2 -0
  149. data/test/tc_package.rb +19 -1
  150. data/test/util/tc_mime_type_utils.rb +13 -0
  151. data/test/util/tc_simple_typed_list.rb +2 -3
  152. data/test/util/tc_validators.rb +34 -10
  153. data/test/workbook/tc_defined_name.rb +12 -4
  154. data/test/workbook/tc_shared_strings_table.rb +16 -1
  155. data/test/workbook/tc_workbook.rb +38 -3
  156. data/test/workbook/tc_workbook_view.rb +50 -0
  157. data/test/workbook/worksheet/auto_filter/tc_filters.rb +1 -1
  158. data/test/workbook/worksheet/tc_break.rb +1 -1
  159. data/test/workbook/worksheet/tc_cell.rb +76 -8
  160. data/test/workbook/worksheet/tc_col.rb +2 -2
  161. data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
  162. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  163. data/test/workbook/worksheet/tc_data_validation.rb +11 -11
  164. data/test/workbook/worksheet/tc_header_footer.rb +2 -2
  165. data/test/workbook/worksheet/tc_icon_set.rb +1 -1
  166. data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
  167. data/test/workbook/worksheet/tc_page_setup.rb +3 -3
  168. data/test/workbook/worksheet/tc_pivot_table.rb +21 -6
  169. data/test/workbook/worksheet/tc_print_options.rb +1 -1
  170. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  171. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  172. data/test/workbook/worksheet/tc_row.rb +7 -2
  173. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +1 -1
  174. data/test/workbook/worksheet/tc_sheet_format_pr.rb +4 -4
  175. data/test/workbook/worksheet/tc_sheet_pr.rb +26 -4
  176. data/test/workbook/worksheet/tc_sheet_protection.rb +5 -5
  177. data/test/workbook/worksheet/tc_sheet_view.rb +4 -4
  178. data/test/workbook/worksheet/tc_table.rb +2 -3
  179. data/test/workbook/worksheet/tc_worksheet.rb +99 -45
  180. metadata +142 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36ce715dcecdf3de554b7683d87d35eccf159a81
4
- data.tar.gz: d9550ff6639b90f612e45c0bf40f5a50ac88928e
3
+ metadata.gz: 0ace95e053d44bf7ebbd97250359660526f4672d
4
+ data.tar.gz: fbbcb63a35a7c7b39a15895e6c7d6478ea32a5a6
5
5
  SHA512:
6
- metadata.gz: 9939c4e2c0bba3911171ae36441f61175d3b4604dfe878a125ac9b391c38c88430426a2c9660e2d1bafe0f7ae1c4a039a09d4410890978bad70509204a43e9d0
7
- data.tar.gz: 0b58dc0cb79601febcc3782410e36225d2154c788f7dfe38e11d98a5845554ad0cd8a649656712e058f52e0ad884dafc9a3aa2a6379d5e1784585ca66f7f5b20
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
- [![Build Status](https://secure.travis-ci.org/randym/axlsx.png?branch=master)](http://travis-ci.org/randym/axlsx/)
3
+ [![Build Status](https://secure.travis-ci.org/randym/axlsx.svg?branch=master)](http://travis-ci.org/randym/axlsx/)
4
4
 
5
- If you are using axlsx for comercial purposes, or just want to show your
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
- [![Click here to lend your support to: axlsx and make a donation at www.pledgie.com !](http://www.pledgie.com/campaigns/17814.png?skin_name=chrome)](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/#!/morgan_randy](https://twitter.com/#!/morgan_randy)
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 - 2013
18
+ **Copyright**: 2011 - 2017
21
19
 
22
20
  **License**: MIT License
23
21
 
24
- **Latest Version**: 2.0.1
22
+ **Latest Version**: 3.0.0
25
23
 
26
- **Ruby Version**: 1.9.2, 1.9.3, 2.0.0
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 2.0.0dev * lower versions may run, this gem always tests against head.
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
- [activeadmin_axlsx](http://github.com/randym/activeadmin_axlsx)
51
+ [activeadmin-axlsx](http://github.com/randym/activeadmin-axlsx)
54
52
 
55
- It provies a plugin and dsl for generating downloadable reports.
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
- sheet.add_row ["First Column", "Second", "Third"]
235
- sheet.add_row [1, 2, 3]
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
- #puts 'yard doc generation disabled until JRuby build native extensions for redcarpet or yard removes the dependency.'
13
- system "yardoc"
14
- system "yard stats --list-undoc"
12
+ system "yardoc"
13
+ system "yard stats --list-undoc"
15
14
  end
16
15
 
17
- task :test do
18
- require 'rake/testtask'
19
- Rake::TestTask.new do |t|
20
- t.libs << 'test'
21
- t.test_files = FileList['test/**/tc_*.rb']
22
- t.verbose = false
23
- t.warning = true
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
@@ -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 => "FF428751", :type => :dxf )
15
- unprofitable = wb.styles.add_style( :fg_color => "FF0000", :type => :dxf )
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
- sheet.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
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 2, 2
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| '' << Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ')
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
@@ -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}>"
@@ -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