axlsx 1.3.4 → 1.3.5

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 (46) hide show
  1. data/README.md +27 -5
  2. data/examples/example.rb +31 -9
  3. data/examples/ios_preview.rb +14 -0
  4. data/examples/pivot_table.rb +39 -0
  5. data/examples/styles.rb +4 -0
  6. data/lib/axlsx.rb +28 -0
  7. data/lib/axlsx/drawing/bar_3D_chart.rb +15 -10
  8. data/lib/axlsx/drawing/chart.rb +13 -1
  9. data/lib/axlsx/drawing/drawing.rb +12 -11
  10. data/lib/axlsx/drawing/graphic_frame.rb +6 -1
  11. data/lib/axlsx/drawing/hyperlink.rb +5 -0
  12. data/lib/axlsx/drawing/line_3D_chart.rb +3 -2
  13. data/lib/axlsx/drawing/pic.rb +6 -0
  14. data/lib/axlsx/drawing/pie_3D_chart.rb +2 -1
  15. data/lib/axlsx/drawing/scatter_chart.rb +2 -1
  16. data/lib/axlsx/package.rb +13 -0
  17. data/lib/axlsx/rels/relationship.rb +1 -0
  18. data/lib/axlsx/stylesheet/styles.rb +22 -18
  19. data/lib/axlsx/util/accessors.rb +15 -0
  20. data/lib/axlsx/util/constants.rb +25 -5
  21. data/lib/axlsx/util/validators.rb +10 -8
  22. data/lib/axlsx/version.rb +1 -1
  23. data/lib/axlsx/workbook/shared_strings_table.rb +1 -1
  24. data/lib/axlsx/workbook/workbook.rb +27 -3
  25. data/lib/axlsx/workbook/worksheet/cell.rb +26 -64
  26. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
  27. data/lib/axlsx/workbook/worksheet/col.rb +9 -2
  28. data/lib/axlsx/workbook/worksheet/pivot_table.rb +259 -0
  29. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +65 -0
  30. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  31. data/lib/axlsx/workbook/worksheet/row.rb +10 -1
  32. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  33. data/lib/axlsx/workbook/worksheet/worksheet.rb +55 -6
  34. data/test/benchmark.rb +1 -0
  35. data/test/drawing/tc_chart.rb +7 -0
  36. data/test/drawing/tc_graphic_frame.rb +5 -0
  37. data/test/example.xlsx +0 -0
  38. data/test/profile.rb +1 -0
  39. data/test/tc_axlsx.rb +15 -0
  40. data/test/tc_package.rb +13 -5
  41. data/test/workbook/worksheet/tc_cell.rb +5 -1
  42. data/test/workbook/worksheet/tc_pivot_table.rb +102 -0
  43. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +46 -0
  44. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  45. data/test/workbook/worksheet/tc_worksheet.rb +45 -1
  46. metadata +23 -9
@@ -0,0 +1,46 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestPivotTableCacheDefinition < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 5.times do
8
+ @ws << ["aa","aa","aa","aa"]
9
+ end
10
+ @pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
11
+ @cache_definition = @pivot_table.cache_definition
12
+ end
13
+
14
+ def test_initialization
15
+ assert(@cache_definition.is_a?(Axlsx::PivotTableCacheDefinition), "must create a pivot table cache definition")
16
+ assert_equal(@pivot_table, @cache_definition.pivot_table, 'refers back to its pivot table')
17
+ end
18
+
19
+ def test_pn
20
+ assert_equal('pivotCache/pivotCacheDefinition1.xml', @cache_definition.pn)
21
+ end
22
+
23
+ def test_rId
24
+ assert_equal('rId1', @cache_definition.rId)
25
+ end
26
+
27
+ def test_index
28
+ assert_equal(0, @cache_definition.index)
29
+ end
30
+
31
+ def test_cache_id
32
+ assert_equal(1, @cache_definition.cache_id)
33
+ end
34
+
35
+ def test_to_xml_string
36
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
37
+ doc = Nokogiri::XML(@cache_definition.to_xml_string)
38
+ errors = []
39
+ schema.validate(doc).each do |error|
40
+ errors.push error
41
+ puts error.message
42
+ end
43
+ assert(errors.empty?, "error free validation")
44
+ end
45
+
46
+ end
@@ -0,0 +1,88 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestSheetFormatPr < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @options = {
7
+ :base_col_width => 5,
8
+ :default_col_width => 7.2,
9
+ :default_row_height => 5.2,
10
+ :custom_height => true,
11
+ :zero_height => false,
12
+ :thick_top => true,
13
+ :thick_bottom => true,
14
+ :outline_level_row => 0,
15
+ :outline_level_col => 0
16
+ }
17
+ @sheet_format_pr = Axlsx::SheetFormatPr.new(@options)
18
+ end
19
+
20
+ def test_default_initialization
21
+ sheet_format_pr = Axlsx::SheetFormatPr.new
22
+ assert_equal 8, sheet_format_pr.base_col_width
23
+ assert_equal 18, sheet_format_pr.default_row_height
24
+ end
25
+
26
+ def test_initialization_with_options
27
+ @options.each do |key, value|
28
+ assert_equal value, @sheet_format_pr.instance_variable_get("@#{key}")
29
+ end
30
+ end
31
+
32
+ def test_base_col_width
33
+ assert_raise(ArgumentError) { @sheet_format_pr.base_col_width = :foo }
34
+ assert_nothing_raised { @sheet_format_pr.base_col_width = 1 }
35
+ end
36
+
37
+ def test_outline_level_row
38
+ assert_raise(ArgumentError) { @sheet_format_pr.outline_level_row = :foo }
39
+ assert_nothing_raised { @sheet_format_pr.outline_level_row = 1 }
40
+ end
41
+
42
+ def test_outline_level_col
43
+ assert_raise(ArgumentError) { @sheet_format_pr.outline_level_col = :foo }
44
+ assert_nothing_raised { @sheet_format_pr.outline_level_col = 1 }
45
+ end
46
+
47
+ def test_default_row_height
48
+ assert_raise(ArgumentError) { @sheet_format_pr.default_row_height = :foo }
49
+ assert_nothing_raised { @sheet_format_pr.default_row_height= 1.0 }
50
+ end
51
+
52
+ def test_default_col_width
53
+ assert_raise(ArgumentError) { @sheet_format_pr.default_col_width= :foo }
54
+ assert_nothing_raised { @sheet_format_pr.default_col_width = 1.0 }
55
+ end
56
+
57
+ def test_custom_height
58
+ assert_raise(ArgumentError) { @sheet_format_pr.custom_height= :foo }
59
+ assert_nothing_raised { @sheet_format_pr.custom_height = true }
60
+ end
61
+
62
+ def test_zero_height
63
+ assert_raise(ArgumentError) { @sheet_format_pr.zero_height= :foo }
64
+ assert_nothing_raised { @sheet_format_pr.zero_height = true }
65
+ end
66
+ def test_thick_top
67
+ assert_raise(ArgumentError) { @sheet_format_pr.thick_top= :foo }
68
+ assert_nothing_raised { @sheet_format_pr.thick_top = true }
69
+ end
70
+ def test_thick_bottom
71
+ assert_raise(ArgumentError) { @sheet_format_pr.thick_bottom= :foo }
72
+ assert_nothing_raised { @sheet_format_pr.thick_bottom = true }
73
+ end
74
+
75
+ def test_to_xml_string
76
+ doc = Nokogiri::XML(@sheet_format_pr.to_xml_string)
77
+ assert doc.xpath("sheetFormatPr[@thickBottom='true']")
78
+ assert doc.xpath("sheetFormatPr[@baseColWidth=5]")
79
+ assert doc.xpath("sheetFormatPr[@default_col_width=7.2]")
80
+ assert doc.xpath("sheetFormatPr[@default_row_height=5.2]")
81
+ assert doc.xpath("sheetFormatPr[@custom_height='true']")
82
+ assert doc.xpath("sheetFormatPr[@zero_height='false']")
83
+ assert doc.xpath("sheetFormatPr[@thick_top='true']")
84
+ assert doc.xpath("sheetFormatPr[@outline_level_row=0]")
85
+ assert doc.xpath("sheetFormatPr[@outline_level_col=0]")
86
+ end
87
+
88
+ end
@@ -19,9 +19,16 @@ class TestWorksheet < Test::Unit::TestCase
19
19
  assert_equal(@ws.name, '&lt;foo&gt; &amp; &lt;bar&gt;')
20
20
  end
21
21
 
22
- def test_name_exception_on_colon
22
+ def test_name_exception_on_invalid_character
23
23
  assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
24
+ assert_raises(ArgumentError) { @ws.name = 'foo[bar' }
25
+ assert_raises(ArgumentError) { @ws.name = 'foo]bar' }
26
+ assert_raises(ArgumentError) { @ws.name = 'foo*bar' }
27
+ assert_raises(ArgumentError) { @ws.name = 'foo/bar' }
28
+ assert_raises(ArgumentError) { @ws.name = 'foo\bar' }
29
+ assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
24
30
  end
31
+
25
32
  def test_page_margins
26
33
  assert(@ws.page_margins.is_a? Axlsx::PageMargins)
27
34
  end
@@ -168,6 +175,12 @@ class TestWorksheet < Test::Unit::TestCase
168
175
  assert @ws.drawing.is_a?(Axlsx::Drawing)
169
176
  end
170
177
 
178
+ def test_add_pivot_table
179
+ assert(@ws.workbook.pivot_tables.empty?, "the sheet's workbook should not have any pivot tables by default")
180
+ @ws.add_pivot_table 'G5:G6', 'A1:D:10'
181
+ assert_equal(@ws.workbook.pivot_tables.size, 1, "add_pivot_tables adds a pivot_table to the workbook")
182
+ end
183
+
171
184
  def test_col_style
172
185
  @ws.add_row [1,2,3,4]
173
186
  @ws.add_row [1,2,3,4]
@@ -366,6 +379,7 @@ class TestWorksheet < Test::Unit::TestCase
366
379
  @ws.merge_cells "A4:A5"
367
380
  @ws.add_chart Axlsx::Pie3DChart
368
381
  @ws.add_table "E1:F3"
382
+ @ws.add_pivot_table 'G5:G6', 'A1:D10'
369
383
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
370
384
  doc = Nokogiri::XML(@ws.to_xml_string)
371
385
  assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
@@ -382,6 +396,8 @@ class TestWorksheet < Test::Unit::TestCase
382
396
  assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
383
397
  c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
384
398
  assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
399
+ c = @ws.add_pivot_table 'G5:G6', 'A1:D10'
400
+ assert_equal(@ws.relationships.size, 5, "adding a pivot table adds 1 relationship")
385
401
  end
386
402
 
387
403
 
@@ -389,6 +405,11 @@ class TestWorksheet < Test::Unit::TestCase
389
405
  assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
390
406
  end
391
407
 
408
+ def test_name_unique_only_checks_other_worksheet_names
409
+ assert_nothing_raised { @ws.name = @ws.name }
410
+ assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
411
+ end
412
+
392
413
  def test_name_size
393
414
  assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
394
415
  assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
@@ -459,4 +480,27 @@ class TestWorksheet < Test::Unit::TestCase
459
480
  doc = Nokogiri::XML(@ws.to_xml_string)
460
481
  assert(doc.xpath('//sheetPr[@filterMode="true"]'))
461
482
  end
483
+
484
+ def test_outline_level_rows
485
+ 3.times { @ws.add_row [1,2,3] }
486
+ @ws.outline_level_rows 0, 2
487
+ assert_equal(1, @ws.rows[0].outline_level)
488
+ assert_equal(true, @ws.rows[2].hidden)
489
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
490
+ end
491
+
492
+ def test_outline_level_columns
493
+ 3.times { @ws.add_row [1,2,3] }
494
+ @ws.outline_level_columns 0, 2
495
+ assert_equal(1, @ws.column_info[0].outline_level)
496
+ assert_equal(true, @ws.column_info[2].hidden)
497
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
498
+ end
499
+
500
+ def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure
501
+ assert_equal(1, @wb.worksheets.size)
502
+ assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') }
503
+ assert_equal(1, @wb.worksheets.size)
504
+ end
505
+
462
506
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: axlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-25 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -107,12 +107,13 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
- description: ! ' xlsx generation with charts, images, automated column width, customizable
111
- styles and full schema validation. Axlsx excels at helping you generate beautiful
112
- Office Open XML Spreadsheet documents without having to understand the entire ECMA
113
- specification. Check out the README for some examples of how easy it is. Best of
114
- all, you can validate your xlsx file before serialization so you know for sure that
115
- anything generated is going to load on your client''s machine.
110
+ description: ! ' xlsx spreadsheet generation with charts, images, automated column
111
+ width, customizable styles and full schema validation. Axlsx helps you create beautiful
112
+ Office Open XML Spreadsheet documents ( Excel, Google Spreadsheets, Numbers, LibreOffice)
113
+ without having to understand the entire ECMA specification. Check out the README
114
+ for some examples of how easy it is. Best of all, you can validate your xlsx file
115
+ before serialization so you know for sure that anything generated is going to load
116
+ on your client''s machine.
116
117
 
117
118
  '
118
119
  email: digital.ipseity@gmail.com
@@ -199,6 +200,7 @@ files:
199
200
  - lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb
200
201
  - lib/axlsx/workbook/worksheet/auto_filter/filters.rb
201
202
  - lib/axlsx/workbook/worksheet/cell.rb
203
+ - lib/axlsx/workbook/worksheet/cell_serializer.rb
202
204
  - lib/axlsx/workbook/worksheet/cfvo.rb
203
205
  - lib/axlsx/workbook/worksheet/cfvos.rb
204
206
  - lib/axlsx/workbook/worksheet/col.rb
@@ -221,6 +223,9 @@ files:
221
223
  - lib/axlsx/workbook/worksheet/page_set_up_pr.rb
222
224
  - lib/axlsx/workbook/worksheet/page_setup.rb
223
225
  - lib/axlsx/workbook/worksheet/pane.rb
226
+ - lib/axlsx/workbook/worksheet/pivot_table.rb
227
+ - lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb
228
+ - lib/axlsx/workbook/worksheet/pivot_tables.rb
224
229
  - lib/axlsx/workbook/worksheet/print_options.rb
225
230
  - lib/axlsx/workbook/worksheet/protected_range.rb
226
231
  - lib/axlsx/workbook/worksheet/protected_ranges.rb
@@ -228,6 +233,7 @@ files:
228
233
  - lib/axlsx/workbook/worksheet/selection.rb
229
234
  - lib/axlsx/workbook/worksheet/sheet_calc_pr.rb
230
235
  - lib/axlsx/workbook/worksheet/sheet_data.rb
236
+ - lib/axlsx/workbook/worksheet/sheet_format_pr.rb
231
237
  - lib/axlsx/workbook/worksheet/sheet_pr.rb
232
238
  - lib/axlsx/workbook/worksheet/sheet_protection.rb
233
239
  - lib/axlsx/workbook/worksheet/sheet_view.rb
@@ -287,7 +293,9 @@ files:
287
293
  - examples/data_validation.rb
288
294
  - examples/example.rb
289
295
  - examples/extractive.rb
296
+ - examples/ios_preview.rb
290
297
  - examples/page_setup.rb
298
+ - examples/pivot_table.rb
291
299
  - examples/sheet_protection.rb
292
300
  - examples/skydrive/real_example.rb
293
301
  - examples/styles.rb
@@ -389,11 +397,14 @@ files:
389
397
  - test/workbook/worksheet/tc_page_set_up_pr.rb
390
398
  - test/workbook/worksheet/tc_page_setup.rb
391
399
  - test/workbook/worksheet/tc_pane.rb
400
+ - test/workbook/worksheet/tc_pivot_table.rb
401
+ - test/workbook/worksheet/tc_pivot_table_cache_definition.rb
392
402
  - test/workbook/worksheet/tc_print_options.rb
393
403
  - test/workbook/worksheet/tc_protected_range.rb
394
404
  - test/workbook/worksheet/tc_row.rb
395
405
  - test/workbook/worksheet/tc_selection.rb
396
406
  - test/workbook/worksheet/tc_sheet_calc_pr.rb
407
+ - test/workbook/worksheet/tc_sheet_format_pr.rb
397
408
  - test/workbook/worksheet/tc_sheet_pr.rb
398
409
  - test/workbook/worksheet/tc_sheet_protection.rb
399
410
  - test/workbook/worksheet/tc_sheet_view.rb
@@ -421,7 +432,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
432
  version: '0'
422
433
  segments:
423
434
  - 0
424
- hash: 3556182461904299335
435
+ hash: -4130267238681018479
425
436
  requirements: []
426
437
  rubyforge_project:
427
438
  rubygems_version: 1.8.24
@@ -520,11 +531,14 @@ test_files:
520
531
  - test/workbook/worksheet/tc_page_set_up_pr.rb
521
532
  - test/workbook/worksheet/tc_page_setup.rb
522
533
  - test/workbook/worksheet/tc_pane.rb
534
+ - test/workbook/worksheet/tc_pivot_table.rb
535
+ - test/workbook/worksheet/tc_pivot_table_cache_definition.rb
523
536
  - test/workbook/worksheet/tc_print_options.rb
524
537
  - test/workbook/worksheet/tc_protected_range.rb
525
538
  - test/workbook/worksheet/tc_row.rb
526
539
  - test/workbook/worksheet/tc_selection.rb
527
540
  - test/workbook/worksheet/tc_sheet_calc_pr.rb
541
+ - test/workbook/worksheet/tc_sheet_format_pr.rb
528
542
  - test/workbook/worksheet/tc_sheet_pr.rb
529
543
  - test/workbook/worksheet/tc_sheet_protection.rb
530
544
  - test/workbook/worksheet/tc_sheet_view.rb