axlsx 2.0.1 → 2.1.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 (155) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/Rakefile +9 -10
  4. data/examples/IMAGE1UP.JPEG +0 -0
  5. data/examples/auto_filter.rb +10 -1
  6. data/examples/conditional_formatting/example_conditional_formatting.rb +3 -3
  7. data/examples/example.rb +72 -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.rb +30 -16
  13. data/lib/axlsx/content_type/abstract_content_type.rb +1 -1
  14. data/lib/axlsx/content_type/content_type.rb +1 -1
  15. data/lib/axlsx/doc_props/app.rb +1 -1
  16. data/lib/axlsx/doc_props/core.rb +5 -5
  17. data/lib/axlsx/drawing/axes.rb +1 -1
  18. data/lib/axlsx/drawing/axis.rb +12 -9
  19. data/lib/axlsx/drawing/bar_3D_chart.rb +13 -13
  20. data/lib/axlsx/drawing/bar_series.rb +9 -9
  21. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  22. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  23. data/lib/axlsx/drawing/cat_axis.rb +5 -5
  24. data/lib/axlsx/drawing/chart.rb +44 -7
  25. data/lib/axlsx/drawing/drawing.rb +3 -1
  26. data/lib/axlsx/drawing/graphic_frame.rb +3 -3
  27. data/lib/axlsx/drawing/hyperlink.rb +1 -3
  28. data/lib/axlsx/drawing/line_3D_chart.rb +2 -2
  29. data/lib/axlsx/drawing/line_chart.rb +10 -10
  30. data/lib/axlsx/drawing/line_series.rb +14 -2
  31. data/lib/axlsx/drawing/marker.rb +1 -1
  32. data/lib/axlsx/drawing/num_data.rb +4 -4
  33. data/lib/axlsx/drawing/num_data_source.rb +6 -6
  34. data/lib/axlsx/drawing/num_val.rb +1 -1
  35. data/lib/axlsx/drawing/one_cell_anchor.rb +1 -1
  36. data/lib/axlsx/drawing/pic.rb +2 -3
  37. data/lib/axlsx/drawing/picture_locking.rb +1 -3
  38. data/lib/axlsx/drawing/pie_3D_chart.rb +5 -6
  39. data/lib/axlsx/drawing/pie_series.rb +6 -6
  40. data/lib/axlsx/drawing/scaling.rb +4 -4
  41. data/lib/axlsx/drawing/scatter_chart.rb +10 -10
  42. data/lib/axlsx/drawing/scatter_series.rb +26 -7
  43. data/lib/axlsx/drawing/ser_axis.rb +2 -2
  44. data/lib/axlsx/drawing/series.rb +3 -3
  45. data/lib/axlsx/drawing/series_title.rb +2 -2
  46. data/lib/axlsx/drawing/str_data.rb +3 -3
  47. data/lib/axlsx/drawing/str_val.rb +1 -1
  48. data/lib/axlsx/drawing/title.rb +3 -3
  49. data/lib/axlsx/drawing/val_axis.rb +1 -1
  50. data/lib/axlsx/drawing/vml_drawing.rb +1 -1
  51. data/lib/axlsx/package.rb +39 -28
  52. data/lib/axlsx/rels/relationship.rb +1 -1
  53. data/lib/axlsx/rels/relationships.rb +2 -2
  54. data/lib/axlsx/stylesheet/border_pr.rb +2 -2
  55. data/lib/axlsx/stylesheet/cell_alignment.rb +1 -3
  56. data/lib/axlsx/stylesheet/cell_protection.rb +1 -3
  57. data/lib/axlsx/stylesheet/cell_style.rb +1 -3
  58. data/lib/axlsx/stylesheet/color.rb +1 -3
  59. data/lib/axlsx/stylesheet/font.rb +1 -1
  60. data/lib/axlsx/stylesheet/gradient_stop.rb +1 -1
  61. data/lib/axlsx/stylesheet/num_fmt.rb +1 -3
  62. data/lib/axlsx/stylesheet/pattern_fill.rb +1 -1
  63. data/lib/axlsx/stylesheet/styles.rb +6 -6
  64. data/lib/axlsx/stylesheet/table_style_element.rb +1 -3
  65. data/lib/axlsx/util/accessors.rb +6 -6
  66. data/lib/axlsx/util/constants.rb +106 -101
  67. data/lib/axlsx/util/options_parser.rb +2 -1
  68. data/lib/axlsx/util/parser.rb +4 -4
  69. data/lib/axlsx/util/serialized_attributes.rb +16 -6
  70. data/lib/axlsx/util/simple_typed_list.rb +28 -52
  71. data/lib/axlsx/util/storage.rb +4 -4
  72. data/lib/axlsx/util/string.rb +7 -0
  73. data/lib/axlsx/util/validators.rb +20 -13
  74. data/lib/axlsx/version.rb +1 -1
  75. data/lib/axlsx/workbook/defined_name.rb +11 -12
  76. data/lib/axlsx/workbook/defined_names.rb +2 -2
  77. data/lib/axlsx/workbook/shared_strings_table.rb +5 -5
  78. data/lib/axlsx/workbook/workbook.rb +19 -12
  79. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  80. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  81. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +2 -2
  82. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +1 -3
  83. data/lib/axlsx/workbook/worksheet/break.rb +1 -3
  84. data/lib/axlsx/workbook/worksheet/cell.rb +128 -73
  85. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +50 -40
  86. data/lib/axlsx/workbook/worksheet/cfvo.rb +1 -3
  87. data/lib/axlsx/workbook/worksheet/cfvos.rb +1 -1
  88. data/lib/axlsx/workbook/worksheet/col.rb +7 -10
  89. data/lib/axlsx/workbook/worksheet/col_breaks.rb +2 -2
  90. data/lib/axlsx/workbook/worksheet/comment.rb +5 -6
  91. data/lib/axlsx/workbook/worksheet/comments.rb +9 -12
  92. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +1 -1
  93. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
  94. data/lib/axlsx/workbook/worksheet/data_bar.rb +4 -6
  95. data/lib/axlsx/workbook/worksheet/data_validation.rb +6 -4
  96. data/lib/axlsx/workbook/worksheet/dimension.rb +2 -2
  97. data/lib/axlsx/workbook/worksheet/header_footer.rb +6 -8
  98. data/lib/axlsx/workbook/worksheet/icon_set.rb +3 -5
  99. data/lib/axlsx/workbook/worksheet/merged_cells.rb +2 -2
  100. data/lib/axlsx/workbook/worksheet/page_margins.rb +1 -3
  101. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -1
  102. data/lib/axlsx/workbook/worksheet/page_setup.rb +21 -23
  103. data/lib/axlsx/workbook/worksheet/pane.rb +1 -3
  104. data/lib/axlsx/workbook/worksheet/pivot_table.rb +17 -24
  105. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -4
  106. data/lib/axlsx/workbook/worksheet/print_options.rb +1 -3
  107. data/lib/axlsx/workbook/worksheet/protected_range.rb +1 -3
  108. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +1 -1
  109. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  110. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  111. data/lib/axlsx/workbook/worksheet/row.rb +33 -51
  112. data/lib/axlsx/workbook/worksheet/row_breaks.rb +2 -2
  113. data/lib/axlsx/workbook/worksheet/selection.rb +1 -3
  114. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  115. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -3
  116. data/lib/axlsx/workbook/worksheet/table.rb +6 -6
  117. data/lib/axlsx/workbook/worksheet/table_style_info.rb +1 -3
  118. data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
  119. data/lib/axlsx/workbook/worksheet/worksheet.rb +59 -30
  120. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +3 -3
  121. data/test/drawing/tc_axis.rb +27 -0
  122. data/test/drawing/tc_bubble_chart.rb +44 -0
  123. data/test/drawing/tc_bubble_series.rb +21 -0
  124. data/test/drawing/tc_data_source.rb +6 -0
  125. data/test/drawing/tc_line_chart.rb +5 -5
  126. data/test/drawing/tc_line_series.rb +10 -2
  127. data/test/drawing/tc_pic.rb +4 -0
  128. data/test/drawing/tc_scatter_series.rb +25 -1
  129. data/test/tc_helper.rb +1 -1
  130. data/test/tc_package.rb +7 -1
  131. data/test/util/tc_simple_typed_list.rb +1 -2
  132. data/test/workbook/tc_defined_name.rb +12 -4
  133. data/test/workbook/tc_workbook.rb +16 -2
  134. data/test/workbook/tc_workbook_view.rb +50 -0
  135. data/test/workbook/worksheet/auto_filter/tc_filters.rb +1 -1
  136. data/test/workbook/worksheet/tc_break.rb +1 -1
  137. data/test/workbook/worksheet/tc_cell.rb +30 -4
  138. data/test/workbook/worksheet/tc_col.rb +2 -2
  139. data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
  140. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  141. data/test/workbook/worksheet/tc_data_validation.rb +11 -11
  142. data/test/workbook/worksheet/tc_header_footer.rb +2 -2
  143. data/test/workbook/worksheet/tc_icon_set.rb +1 -1
  144. data/test/workbook/worksheet/tc_page_setup.rb +3 -3
  145. data/test/workbook/worksheet/tc_print_options.rb +1 -1
  146. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  147. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  148. data/test/workbook/worksheet/tc_row.rb +2 -2
  149. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +1 -1
  150. data/test/workbook/worksheet/tc_sheet_format_pr.rb +4 -4
  151. data/test/workbook/worksheet/tc_sheet_protection.rb +5 -5
  152. data/test/workbook/worksheet/tc_sheet_view.rb +4 -4
  153. data/test/workbook/worksheet/tc_worksheet.rb +49 -10
  154. metadata +81 -55
  155. data/test/axlsx.qcachegrind +0 -2226
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36ce715dcecdf3de554b7683d87d35eccf159a81
4
- data.tar.gz: d9550ff6639b90f612e45c0bf40f5a50ac88928e
3
+ metadata.gz: bbd74d60d15e7375b31b29eb04943c5014519d0a
4
+ data.tar.gz: 13a7cdaf65bd1da6d7b780b9c8217cf544141679
5
5
  SHA512:
6
- metadata.gz: 9939c4e2c0bba3911171ae36441f61175d3b4604dfe878a125ac9b391c38c88430426a2c9660e2d1bafe0f7ae1c4a039a09d4410890978bad70509204a43e9d0
7
- data.tar.gz: 0b58dc0cb79601febcc3782410e36225d2154c788f7dfe38e11d98a5845554ad0cd8a649656712e058f52e0ad884dafc9a3aa2a6379d5e1784585ca66f7f5b20
6
+ metadata.gz: 92fdb46000096174c14f32b6783e8758b39535ceb2bc193cfb0f45723c98babe7abfdab3e1ae2af76c999f414e67bf47afe93e46827571db5aa0b3bb97f79492
7
+ data.tar.gz: 2b7e3f18fa42835e8ca6e48a40b8641cb0d799f898124e827c7993adb097216df788bef033dde4d1a5525338d4d24a28112092f42ce9684f61ad74daf2b09df1
data/README.md CHANGED
@@ -11,7 +11,7 @@ appreciation for the gem, please don't hesitate to make a donation.
11
11
 
12
12
  **Git**:[http://github.com/randym/axlsx](http://github.com/randym/axlsx)
13
13
 
14
- **Twitter**: [https://twitter.com/#!/morgan_randy](https://twitter.com/#!/morgan_randy)
14
+ **Twitter**: [https://twitter.com/morgan_randy](https://twitter.com/morgan_randy)
15
15
 
16
16
  **Google Group**: [https://groups.google.com/forum/?fromgroups#!forum/axlsx](https://groups.google.com/forum/?fromgroups#!forum/axlsx)
17
17
 
@@ -50,7 +50,7 @@ There are guides for using axlsx and acts_as_xlsx here:
50
50
 
51
51
  If you are working with ActiveAdmin see:
52
52
 
53
- [activeadmin_axlsx](http://github.com/randym/activeadmin_axlsx)
53
+ [activeadmin-axlsx](http://github.com/randym/activeadmin-axlsx)
54
54
 
55
55
  It provies a plugin and dsl for generating downloadable reports.
56
56
 
@@ -164,7 +164,10 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
164
164
 
165
165
  #Change log
166
166
  ---------
167
-
167
+ - **
168
+ - Added Cell#name so you you can quickly create a defined name for a single cell in your workbook.
169
+ - Added full book view and sheet state management. This means you can specify how the workbook renders as well as manage sheet visibility.
170
+ - Added smoothing management for line charts series
168
171
  - **September.12.13**:2.0.1
169
172
  - Unpinned rubyzip version
170
173
  - **September.12.13**:2.0.0
data/Rakefile CHANGED
@@ -10,18 +10,17 @@ end
10
10
 
11
11
  task :gendoc do
12
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"
13
+ system "yardoc"
14
+ system "yard stats --list-undoc"
15
15
  end
16
16
 
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
17
+
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
25
24
  end
26
25
 
27
26
  task :release => :build do
Binary file
@@ -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')
@@ -11,8 +11,8 @@ percent = book.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE
11
11
  money = book.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
12
12
 
13
13
  # 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 )
14
+ profitable = book.styles.add_style( :fg_color => "428751", :type => :dxf )
15
+ unprofitable = book.styles.add_style( :fg_color => "FF0000", :type => :dxf )
16
16
 
17
17
  book.add_worksheet(:name => "Cell Is") do |ws|
18
18
 
@@ -28,7 +28,7 @@ book.add_worksheet(:name => "Cell Is") do |ws|
28
28
  # Apply conditional formatting to range B3:B100 in the worksheet
29
29
  ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
30
30
  # 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 })
31
+ ws.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
32
32
  end
33
33
 
34
34
  book.add_worksheet(:name => "Color Scale") do |ws|
@@ -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,16 @@ 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
50
54
 
51
55
  p = Axlsx::Package.new
52
56
  wb = p.workbook
@@ -207,6 +211,7 @@ if examples.include? :row_column_style
207
211
  head = s.add_style :bg_color => "00", :fg_color => "FF"
208
212
  percent = s.add_style :num_fmt => 9
209
213
  wb.add_worksheet(:name => "Columns and Rows") do |sheet|
214
+ # Note: you must add rows to the document *BEFORE* applying column styles to them
210
215
  sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4', 'col5']
211
216
  sheet.add_row [1, 2, 0.3, 4, 5.0]
212
217
  sheet.add_row [1, 2, 0.2, 4, 5.0]
@@ -243,6 +248,21 @@ if examples.include? :fixed_column_width
243
248
  end
244
249
  end
245
250
 
251
+
252
+ ##Specifying Row height
253
+
254
+ #```ruby
255
+ if examples.include? :height
256
+ wb.styles do |s|
257
+ head = s.add_style :bg_color => "00", :fg_color => "FF"
258
+ wb.add_worksheet(:name => "fixed row height") do |sheet|
259
+ sheet.add_row ["This row will have a fixed height", "It will overwite the default row height"], :height => 30
260
+ sheet.add_row ["This row can have a different height too"], :height => 10, :style => head
261
+ end
262
+ end
263
+ end
264
+
265
+
246
266
  #```ruby
247
267
  if examples.include? :outline_level
248
268
  wb.add_worksheet(name: 'outline_level') do |sheet|
@@ -279,13 +299,23 @@ if examples.include? :images
279
299
  wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
280
300
  img = File.expand_path('../image1.jpeg', __FILE__)
281
301
  # specifying the :hyperlink option will add a hyper link to your image.
302
+ #
282
303
  # @note - Numbers does not support this part of the specification.
304
+
283
305
  sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
284
306
  image.width=720
285
307
  image.height=666
286
308
  image.hyperlink.tooltip = "Labeled Link"
287
- image.start_at 2, 2
309
+ image.start_at 0, 0
288
310
  end
311
+
312
+ # position in block
313
+ sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
314
+ image.start_at 22, 14
315
+ image.end_at 23, 17
316
+ end
317
+ # all in one go
318
+ sheet.add_image(:image_src => img, :start_at => [15, 33], :end_at => [20, 37], :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com")
289
319
  end
290
320
  end
291
321
  #```
@@ -470,7 +500,7 @@ if examples.include? :line_chart
470
500
  sheet.add_chart(Axlsx::LineChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
471
501
  chart.start_at 0, 21
472
502
  chart.end_at 10, 41
473
- chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000"
503
+ chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000", :show_marker => true, :smooth => true
474
504
  chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "00FF00"
475
505
  chart.catAxis.title = 'X Axis'
476
506
  chart.valAxis.title = 'Y Axis'
@@ -644,7 +674,27 @@ if examples.include? :sheet_view
644
674
  end
645
675
  end
646
676
 
677
+ ## Book Views
678
+ #
679
+ ## 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
680
+ ## tuning values for the UI @see Axlsx::WorkbookView
681
+ ## ```ruby
682
+ if examples.include? :book_view
683
+ # when you open example.xml the second sheet is selected, and the horizontal scroll bar is much smaller showing more sheets
684
+ wb.add_view tab_ratio: 800, active_tab: 1
685
+ end
647
686
 
687
+ ## Hiding Sheets
688
+ ##
689
+ ## Sheets can be hidden with the state attribute
690
+ if examples.include? :hiding_sheets
691
+ wb.add_worksheet name: 'hidden', state: :hidden do |sheet|
692
+ sheet.add_row ['you cant see me!']
693
+ end
694
+ wb.add_worksheet name: 'very hidden', state: :very_hidden do |sheet|
695
+ sheet.add_row ['you really cant see me!']
696
+ end
697
+ end
648
698
  # conditional formatting
649
699
  #
650
700
  if examples.include? :conditional_formatting
@@ -763,8 +813,7 @@ if examples.include? :no_autowidth
763
813
  end
764
814
  #```
765
815
 
766
-
767
-
816
+ #```ruby
768
817
  if examples.include? :cached_formula
769
818
  p = Axlsx::Package.new
770
819
  p.use_shared_strings = true
@@ -774,4 +823,23 @@ if examples.include? :cached_formula
774
823
  end
775
824
  p.serialize 'cached_formula.xlsx'
776
825
  end
826
+ #```
777
827
 
828
+ #```ruby
829
+ if examples.include? :rich_text
830
+ p = Axlsx::Package.new
831
+ p.use_shared_strings = true
832
+ wb = p.workbook
833
+ wrap_text = wb.styles.add_style({:alignment => {:horizontal => :center, :vertical => :center, :wrap_text => true}} )
834
+ rt = Axlsx::RichText.new
835
+ rt.add_run('I\'m bold, ', :b => true)
836
+ rt.add_run('I\'m italic, ', :i => true)
837
+ rt.add_run('I\'m strike' + "\n", :strike => true)
838
+ rt.add_run('I\'m bold, italic and strike' + "\n", :b => true, :i => true, :strike => true)
839
+ rt.add_run('I\'m style-less :D')
840
+ wb.add_worksheet(:name => "RichText") do | sheet |
841
+ sheet.add_row [rt], :style => wrap_text
842
+ end
843
+ p.serialize 'rich_text.xlsx'
844
+ end
845
+ #```
@@ -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
@@ -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'
@@ -10,6 +10,7 @@ require 'axlsx/util/serialized_attributes'
10
10
  require 'axlsx/util/options_parser'
11
11
  # to be included with parsable intitites.
12
12
  #require 'axlsx/util/parser.rb'
13
+ require 'axlsx/util/string'
13
14
 
14
15
  require 'axlsx/stylesheet/styles.rb'
15
16
 
@@ -53,7 +54,7 @@ module Axlsx
53
54
  cells = sort_cells(cells)
54
55
  reference = "#{cells.first.reference(absolute)}:#{cells.last.reference(absolute)}"
55
56
  if absolute
56
- escaped_name = cells.first.row.worksheet.name.gsub "&apos;", "''"
57
+ escaped_name = cells.first.row.worksheet.name.gsub '&apos;', "''"
57
58
  "'#{escaped_name}'!#{reference}"
58
59
  else
59
60
  reference
@@ -65,7 +66,7 @@ module Axlsx
65
66
  # @param [Array] cells
66
67
  # @return [Array]
67
68
  def self.sort_cells(cells)
68
- cells.sort { |x, y| [x.index, x.row.index] <=> [y.index, y.row.index] }
69
+ cells.sort { |x, y| [x.index, x.row.row_index] <=> [y.index, y.row.row_index] }
69
70
  end
70
71
 
71
72
  #global reference html entity encoding
@@ -88,20 +89,21 @@ module Axlsx
88
89
  # @note This follows the standard spreadsheet convention of naming columns A to Z, followed by AA to AZ etc.
89
90
  # @return [String]
90
91
  def self.col_ref(index)
91
- chars = []
92
+ chars = ''
92
93
  while index >= 26 do
93
- chars << ((index % 26) + 65).chr
94
- index = (index / 26).to_i - 1
94
+ index, char = index.divmod(26)
95
+ chars.prepend((char + 65).chr)
96
+ index -= 1
95
97
  end
96
- chars << (index + 65).chr
97
- chars.reverse.join
98
+ chars.prepend((index + 65).chr)
99
+ chars
98
100
  end
99
101
 
100
102
  # @return [String] The alpha(column)numeric(row) reference for this sell.
101
103
  # @example Relative Cell Reference
102
104
  # ws.rows.first.cells.first.r #=> "A1"
103
105
  def self.cell_r(c_index, r_index)
104
- Axlsx::col_ref(c_index).to_s << (r_index+1).to_s
106
+ col_ref(c_index) << (r_index+1).to_s
105
107
  end
106
108
 
107
109
  # Creates an array of individual cell references based on an excel reference range.
@@ -113,7 +115,7 @@ module Axlsx
113
115
  end_col, end_row = name_to_indices($2)
114
116
  (start_row..end_row).to_a.map do |row_num|
115
117
  (start_col..end_col).to_a.map do |col_num|
116
- "#{col_ref(col_num)}#{row_num+1}"
118
+ cell_r(col_num, row_num)
117
119
  end
118
120
  end
119
121
  end
@@ -127,14 +129,26 @@ module Axlsx
127
129
  s.gsub(/_(.)/){ $1.upcase }
128
130
  end
129
131
 
130
- # returns the provided string with all invalid control charaters
131
- # removed.
132
- # @param [String] str The sting to process
133
- # @return [String]
134
- def self.sanitize(str)
135
- str.gsub(CONTROL_CHAR_REGEX, '')
132
+ # returns the provided string with all invalid control charaters
133
+ # removed.
134
+ # @param [String] str The string to process
135
+ # @return [String]
136
+ def self.sanitize(str)
137
+ str.delete!(CONTROL_CHARS)
138
+ str
139
+ end
140
+
141
+ # If value is boolean return 1 or 0
142
+ # else return the value
143
+ # @param [Object] value The value to process
144
+ # @return [Object]
145
+ def self.booleanize(value)
146
+ if value == true || value == false
147
+ value ? 1 : 0
148
+ else
149
+ value
136
150
  end
137
-
151
+ end
138
152
 
139
153
  # Instructs the serializer to not try to escape cell value input.
140
154
  # This will give you a huge speed bonus, but if you content has <, > or other xml character data