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.
- data/README.md +27 -5
- data/examples/example.rb +31 -9
- data/examples/ios_preview.rb +14 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/styles.rb +4 -0
- data/lib/axlsx.rb +28 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb +15 -10
- data/lib/axlsx/drawing/chart.rb +13 -1
- data/lib/axlsx/drawing/drawing.rb +12 -11
- data/lib/axlsx/drawing/graphic_frame.rb +6 -1
- data/lib/axlsx/drawing/hyperlink.rb +5 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -2
- data/lib/axlsx/drawing/pic.rb +6 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +2 -1
- data/lib/axlsx/drawing/scatter_chart.rb +2 -1
- data/lib/axlsx/package.rb +13 -0
- data/lib/axlsx/rels/relationship.rb +1 -0
- data/lib/axlsx/stylesheet/styles.rb +22 -18
- data/lib/axlsx/util/accessors.rb +15 -0
- data/lib/axlsx/util/constants.rb +25 -5
- data/lib/axlsx/util/validators.rb +10 -8
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +1 -1
- data/lib/axlsx/workbook/workbook.rb +27 -3
- data/lib/axlsx/workbook/worksheet/cell.rb +26 -64
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/col.rb +9 -2
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +259 -0
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +65 -0
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
- data/lib/axlsx/workbook/worksheet/row.rb +10 -1
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +55 -6
- data/test/benchmark.rb +1 -0
- data/test/drawing/tc_chart.rb +7 -0
- data/test/drawing/tc_graphic_frame.rb +5 -0
- data/test/example.xlsx +0 -0
- data/test/profile.rb +1 -0
- data/test/tc_axlsx.rb +15 -0
- data/test/tc_package.rb +13 -5
- data/test/workbook/worksheet/tc_cell.rb +5 -1
- data/test/workbook/worksheet/tc_pivot_table.rb +102 -0
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +46 -0
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
- data/test/workbook/worksheet/tc_worksheet.rb +45 -1
- 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, '<foo> & <bar>')
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
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
|
+
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:
|
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
|
111
|
-
styles and full schema validation. Axlsx
|
112
|
-
Office Open XML Spreadsheet documents
|
113
|
-
|
114
|
-
|
115
|
-
anything generated is going to load
|
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:
|
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
|