axlsx 1.0.18 → 1.1.0
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/CHANGELOG.md +11 -3
- data/README.md +93 -18
- data/examples/example.csv +1000 -0
- data/examples/example.rb +97 -5
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/lib/axlsx.rb +30 -9
- data/lib/axlsx/content_type/content_type.rb +9 -9
- data/lib/axlsx/content_type/default.rb +9 -6
- data/lib/axlsx/content_type/override.rb +12 -8
- data/lib/axlsx/doc_props/app.rb +37 -40
- data/lib/axlsx/doc_props/core.rb +12 -17
- data/lib/axlsx/drawing/axis.rb +38 -19
- data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
- data/lib/axlsx/drawing/bar_series.rb +13 -14
- data/lib/axlsx/drawing/cat_axis.rb +15 -14
- data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
- data/lib/axlsx/drawing/chart.rb +37 -38
- data/lib/axlsx/drawing/drawing.rb +15 -12
- data/lib/axlsx/drawing/graphic_frame.rb +21 -21
- data/lib/axlsx/drawing/hyperlink.rb +12 -11
- data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
- data/lib/axlsx/drawing/line_series.rb +11 -11
- data/lib/axlsx/drawing/marker.rb +10 -8
- data/lib/axlsx/drawing/named_axis_data.rb +36 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
- data/lib/axlsx/drawing/pic.rb +24 -37
- data/lib/axlsx/drawing/picture_locking.rb +21 -18
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
- data/lib/axlsx/drawing/pie_series.rb +15 -12
- data/lib/axlsx/drawing/scaling.rb +10 -10
- data/lib/axlsx/drawing/scatter_chart.rb +69 -0
- data/lib/axlsx/drawing/scatter_series.rb +39 -0
- data/lib/axlsx/drawing/ser_axis.rb +10 -10
- data/lib/axlsx/drawing/series.rb +15 -15
- data/lib/axlsx/drawing/series_title.rb +14 -14
- data/lib/axlsx/drawing/title.rb +26 -26
- data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
- data/lib/axlsx/drawing/val_axis.rb +8 -7
- data/lib/axlsx/drawing/val_axis_data.rb +17 -17
- data/lib/axlsx/drawing/view_3D.rb +22 -20
- data/lib/axlsx/package.rb +32 -15
- data/lib/axlsx/rels/relationship.rb +9 -6
- data/lib/axlsx/rels/relationships.rb +7 -1
- data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
- data/lib/axlsx/stylesheet/border.rb +27 -23
- data/lib/axlsx/stylesheet/border_pr.rb +16 -15
- data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
- data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
- data/lib/axlsx/stylesheet/cell_style.rb +8 -5
- data/lib/axlsx/stylesheet/color.rb +20 -14
- data/lib/axlsx/stylesheet/fill.rb +7 -5
- data/lib/axlsx/stylesheet/font.rb +14 -14
- data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
- data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
- data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
- data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
- data/lib/axlsx/stylesheet/styles.rb +41 -32
- data/lib/axlsx/stylesheet/table_style.rb +9 -4
- data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
- data/lib/axlsx/stylesheet/table_styles.rb +11 -8
- data/lib/axlsx/stylesheet/xf.rb +29 -25
- data/lib/axlsx/util/constants.rb +4 -0
- data/lib/axlsx/util/simple_typed_list.rb +18 -9
- data/lib/axlsx/util/validators.rb +13 -6
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
- data/lib/axlsx/workbook/workbook.rb +43 -19
- data/lib/axlsx/workbook/worksheet/cell.rb +93 -91
- data/lib/axlsx/workbook/worksheet/col.rb +114 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +16 -13
- data/lib/axlsx/workbook/worksheet/row.rb +13 -13
- data/lib/axlsx/workbook/worksheet/table.rb +96 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +152 -118
- data/lib/schema/dc.xsd +5 -5
- data/lib/schema/dcmitype.xsd +5 -3
- data/lib/schema/dcterms.xsd +15 -15
- data/lib/schema/opc-coreProperties.xsd +6 -2
- data/lib/schema/xml.xsd +7 -8
- data/test/#benchmark.txt# +7 -0
- data/test/#tc_helper.rb# +3 -0
- data/test/benchmark.rb +81 -0
- data/test/benchmark.rb~ +0 -0
- data/test/benchmark.txt +6 -0
- data/test/benchmark.txt~ +6 -0
- data/test/content_type/tc_content_type.rb +30 -32
- data/test/content_type/tc_default.rb +8 -23
- data/test/content_type/tc_override.rb +7 -21
- data/test/doc_props/tc_app.rb +2 -8
- data/test/doc_props/tc_core.rb +6 -7
- data/test/drawing/tc_axis.rb +7 -3
- data/test/drawing/tc_bar_3D_chart.rb +6 -7
- data/test/drawing/tc_bar_series.rb +4 -5
- data/test/drawing/tc_cat_axis.rb +2 -3
- data/test/drawing/tc_cat_axis_data.rb +2 -3
- data/test/drawing/tc_chart.rb +11 -12
- data/test/drawing/tc_drawing.rb +7 -8
- data/test/drawing/tc_graphic_frame.rb +3 -4
- data/test/drawing/tc_hyperlink.rb +2 -3
- data/test/drawing/tc_line_3d_chart.rb +5 -6
- data/test/drawing/tc_line_series.rb +3 -4
- data/test/drawing/tc_marker.rb +3 -4
- data/test/drawing/tc_one_cell_anchor.rb +6 -7
- data/test/drawing/tc_pic.rb +8 -9
- data/test/drawing/tc_picture_locking.rb +2 -3
- data/test/drawing/tc_pie_3D_chart.rb +5 -6
- data/test/drawing/tc_pie_series.rb +4 -5
- data/test/drawing/tc_scaling.rb +3 -4
- data/test/drawing/tc_scatter_chart.rb +43 -0
- data/test/drawing/tc_scatter_series.rb +20 -0
- data/test/drawing/tc_ser_axis.rb +2 -3
- data/test/drawing/tc_series.rb +4 -5
- data/test/drawing/tc_series_title.rb +4 -5
- data/test/drawing/tc_title.rb +4 -5
- data/test/drawing/tc_two_cell_anchor.rb +4 -5
- data/test/drawing/tc_val_axis.rb +2 -3
- data/test/drawing/tc_val_axis_data.rb +2 -3
- data/test/drawing/tc_view_3D.rb +6 -7
- data/test/example.csv +1000 -0
- data/test/example.xlsx +0 -0
- data/test/example_streamed.xlsx +0 -0
- data/test/profile.rb +33 -0
- data/test/rels/tc_relationship.rb +5 -6
- data/test/rels/tc_relationships.rb +4 -5
- data/test/stylesheet/tc_border.rb +3 -4
- data/test/stylesheet/tc_border_pr.rb +3 -4
- data/test/stylesheet/tc_cell_alignment.rb +4 -5
- data/test/stylesheet/tc_cell_protection.rb +2 -3
- data/test/stylesheet/tc_cell_style.rb +2 -3
- data/test/stylesheet/tc_color.rb +2 -3
- data/test/stylesheet/tc_fill.rb +1 -2
- data/test/stylesheet/tc_font.rb +5 -6
- data/test/stylesheet/tc_gradient_fill.rb +1 -2
- data/test/stylesheet/tc_gradient_stop.rb +1 -2
- data/test/stylesheet/tc_num_fmt.rb +1 -2
- data/test/stylesheet/tc_pattern_fill.rb +3 -4
- data/test/stylesheet/tc_styles.rb +15 -9
- data/test/stylesheet/tc_table_style.rb +2 -3
- data/test/stylesheet/tc_table_style_element.rb +2 -3
- data/test/stylesheet/tc_table_styles.rb +3 -4
- data/test/stylesheet/tc_xf.rb +16 -17
- data/test/tc_axlsx.rb +39 -0
- data/test/tc_axlsx.rb~ +0 -0
- data/test/tc_helper.rb +3 -0
- data/test/tc_helper.rb~ +3 -0
- data/test/tc_package.rb +13 -10
- data/test/util/tc_simple_typed_list.rb +8 -9
- data/test/util/tc_validators.rb +7 -8
- data/test/workbook/tc_shared_strings_table.rb +5 -6
- data/test/workbook/tc_workbook.rb +24 -6
- data/test/workbook/worksheet/table/tc_table.rb +71 -0
- data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
- data/test/workbook/worksheet/tc_cell.rb +24 -10
- data/test/workbook/worksheet/tc_col.rb +59 -0
- data/test/workbook/worksheet/tc_col.rb~ +10 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +1 -2
- data/test/workbook/worksheet/tc_page_margins.rb +6 -9
- data/test/workbook/worksheet/tc_row.rb +26 -12
- data/test/workbook/worksheet/tc_worksheet.rb +134 -68
- metadata +150 -90
- data/test/drawing/tc_hyperlink.rb~ +0 -71
- data/test/workbook/tc_shared_strings_table.rb~ +0 -8
- data/test/workbook/worksheet/tc_date_time_converter.rb~ +0 -69
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'axlsx.rb'
|
|
1
|
+
require 'tc_helper.rb'
|
|
3
2
|
|
|
4
3
|
class TestCell < Test::Unit::TestCase
|
|
5
4
|
|
|
@@ -9,6 +8,9 @@ class TestCell < Test::Unit::TestCase
|
|
|
9
8
|
p.workbook.styles.add_style :sz=>20
|
|
10
9
|
@row = @ws.add_row
|
|
11
10
|
@c = @row.add_cell 1, :type=>:float, :style=>1
|
|
11
|
+
data = (0..26).map { |index| index }
|
|
12
|
+
@ws.add_row data
|
|
13
|
+
@cAA = @ws["AA2"]
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
def test_initialize
|
|
@@ -18,7 +20,6 @@ class TestCell < Test::Unit::TestCase
|
|
|
18
20
|
assert_equal(@c.value, 1.0, "type option is applied and value is casted")
|
|
19
21
|
end
|
|
20
22
|
|
|
21
|
-
|
|
22
23
|
def test_style_date_data
|
|
23
24
|
c = Axlsx::Cell.new(@c.row, Time.now)
|
|
24
25
|
assert_equal(Axlsx::STYLE_DATE, c.style)
|
|
@@ -40,8 +41,13 @@ class TestCell < Test::Unit::TestCase
|
|
|
40
41
|
assert_equal(@c.r, "A1", "calculate cell reference")
|
|
41
42
|
end
|
|
42
43
|
|
|
44
|
+
def test_wide_r
|
|
45
|
+
assert_equal(@cAA.r, "AA2", "calculate cell reference")
|
|
46
|
+
end
|
|
47
|
+
|
|
43
48
|
def test_r_abs
|
|
44
49
|
assert_equal(@c.r_abs,"$A$1", "calculate absolute cell reference")
|
|
50
|
+
assert_equal(@cAA.r_abs,"$AA$2", "needs to accept multi-digit columns")
|
|
45
51
|
end
|
|
46
52
|
|
|
47
53
|
def test_style
|
|
@@ -67,7 +73,8 @@ class TestCell < Test::Unit::TestCase
|
|
|
67
73
|
end
|
|
68
74
|
|
|
69
75
|
def test_col_ref
|
|
70
|
-
|
|
76
|
+
#TODO move to axlsx spec
|
|
77
|
+
assert_equal(Axlsx.col_ref(0), "A")
|
|
71
78
|
end
|
|
72
79
|
|
|
73
80
|
def test_cell_type_from_value
|
|
@@ -91,7 +98,9 @@ class TestCell < Test::Unit::TestCase
|
|
|
91
98
|
@c.type = :float
|
|
92
99
|
assert_equal(@c.send(:cast_value, "1.0"), 1.0)
|
|
93
100
|
@c.type = :string
|
|
94
|
-
assert_equal(@c.send(:cast_value, nil),
|
|
101
|
+
assert_equal(@c.send(:cast_value, nil), nil)
|
|
102
|
+
@c.type = :float
|
|
103
|
+
assert_equal(@c.send(:cast_value, nil), nil)
|
|
95
104
|
@c.type = :boolean
|
|
96
105
|
assert_equal(@c.send(:cast_value, true), 1)
|
|
97
106
|
assert_equal(@c.send(:cast_value, false), 0)
|
|
@@ -204,13 +213,14 @@ class TestCell < Test::Unit::TestCase
|
|
|
204
213
|
end
|
|
205
214
|
|
|
206
215
|
def test_equality
|
|
207
|
-
|
|
208
|
-
|
|
216
|
+
c2 = @row.add_cell 1, :type=>:float, :style=>1
|
|
217
|
+
|
|
218
|
+
assert_equal(c2.shareable_hash,@c.shareable_hash)
|
|
209
219
|
c3 = @row.add_cell 2, :type=>:float, :style=>1
|
|
210
220
|
c4 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
|
|
211
|
-
assert_equal(c4.
|
|
221
|
+
assert_equal(c4.shareable_hash == c2.shareable_hash,false)
|
|
212
222
|
c5 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
|
|
213
|
-
|
|
223
|
+
assert_equal(c5.shareable_hash, c4.shareable_hash)
|
|
214
224
|
|
|
215
225
|
end
|
|
216
226
|
|
|
@@ -220,11 +230,15 @@ class TestCell < Test::Unit::TestCase
|
|
|
220
230
|
assert_equal(@c.ssti, 1)
|
|
221
231
|
end
|
|
222
232
|
|
|
233
|
+
def test_to_xml_string
|
|
234
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
235
|
+
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
236
|
+
end
|
|
223
237
|
def test_to_xml
|
|
224
238
|
# TODO This could use some much more stringent testing related to the xml content generated!
|
|
225
239
|
row = @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
|
|
226
240
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
227
|
-
doc = Nokogiri::XML(@ws.
|
|
241
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
228
242
|
errors = []
|
|
229
243
|
schema.validate(doc).each do |error|
|
|
230
244
|
errors.push error
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestCol < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@col = Axlsx::Col.new 1, 1
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_min_max_required
|
|
10
|
+
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new }
|
|
11
|
+
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new nil, nil }
|
|
12
|
+
assert_nothing_raised { Axlsx::Col.new 1, 1 }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_bestFit
|
|
16
|
+
assert_equal(@col.bestFit, nil)
|
|
17
|
+
assert_raise(NoMethodError, 'bestFit is read only') { @col.bestFit = 'bob' }
|
|
18
|
+
@col.width = 1.999
|
|
19
|
+
assert_equal(@col.bestFit, true, 'bestFit should be true when width has been set')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_collapsed
|
|
23
|
+
assert_equal(@col.collapsed, nil)
|
|
24
|
+
assert_raise(ArgumentError, 'collapsed must be boolean(ish)') { @col.collapsed = 'bob' }
|
|
25
|
+
assert_nothing_raised('collapsed must be boolean(ish)') { @col.collapsed = true }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_customWidth
|
|
29
|
+
assert_equal(@col.customWidth, nil)
|
|
30
|
+
@col.width = 3
|
|
31
|
+
assert_raise(NoMethodError, 'customWidth is read only') { @col.customWidth = 3 }
|
|
32
|
+
assert_equal(@col.customWidth, true, 'customWidth is true when width is set')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_hidden
|
|
36
|
+
assert_equal(@col.hidden, nil)
|
|
37
|
+
assert_raise(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = 'bob' }
|
|
38
|
+
assert_nothing_raised(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = true }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_outlineLevel
|
|
42
|
+
assert_equal(@col.outlineLevel, nil)
|
|
43
|
+
assert_raise(ArgumentError, 'outline level cannot be negative') { @col.outlineLevel = -1 }
|
|
44
|
+
assert_raise(ArgumentError, 'outline level cannot be greater than 7') { @col.outlineLevel = 8 }
|
|
45
|
+
assert_nothing_raised('can set outlineLevel') { @col.outlineLevel = 1 }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_phonetic
|
|
49
|
+
assert_equal(@col.phonetic, nil)
|
|
50
|
+
assert_raise(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = 'bob' }
|
|
51
|
+
assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_style
|
|
55
|
+
assert_equal(@col.style, nil)
|
|
56
|
+
#TODO check that the style specified is actually in the styles xfs collection
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'axlsx.rb'
|
|
1
|
+
require 'tc_helper.rb'
|
|
3
2
|
|
|
4
3
|
class TestPageMargins < Test::Unit::TestCase
|
|
5
4
|
|
|
@@ -8,7 +7,7 @@ class TestPageMargins < Test::Unit::TestCase
|
|
|
8
7
|
ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
9
8
|
@pm = ws.page_margins
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
def test_initialize
|
|
13
12
|
assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.left)
|
|
14
13
|
assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.right)
|
|
@@ -25,7 +24,7 @@ class TestPageMargins < Test::Unit::TestCase
|
|
|
25
24
|
assert_equal(2, optioned.top)
|
|
26
25
|
assert_equal(1, optioned.bottom)
|
|
27
26
|
assert_equal(0.1, optioned.header)
|
|
28
|
-
assert_equal(0.1, optioned.footer)
|
|
27
|
+
assert_equal(0.1, optioned.footer)
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
|
|
@@ -48,7 +47,7 @@ class TestPageMargins < Test::Unit::TestCase
|
|
|
48
47
|
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.header)
|
|
49
48
|
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.footer)
|
|
50
49
|
end
|
|
51
|
-
|
|
50
|
+
|
|
52
51
|
def test_to_xml
|
|
53
52
|
@pm.left = 1.1
|
|
54
53
|
@pm.right = 1.2
|
|
@@ -56,12 +55,10 @@ class TestPageMargins < Test::Unit::TestCase
|
|
|
56
55
|
@pm.bottom = 1.4
|
|
57
56
|
@pm.header = 0.8
|
|
58
57
|
@pm.footer = 0.9
|
|
59
|
-
|
|
60
|
-
@pm.to_xml(xml)
|
|
61
|
-
doc = Nokogiri::XML.parse(xml.to_xml)
|
|
58
|
+
doc = Nokogiri::XML.parse(@pm.to_xml_string)
|
|
62
59
|
assert_equal(1, doc.xpath(".//pageMargins[@left=1.1][@right=1.2][@top=1.3][@bottom=1.4][@header=0.8][@footer=0.9]").size)
|
|
63
60
|
end
|
|
64
|
-
|
|
61
|
+
|
|
65
62
|
def test_left
|
|
66
63
|
assert_raise(ArgumentError) { @pm.left = -1.2 }
|
|
67
64
|
assert_nothing_raised { @pm.left = 1.5 }
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'axlsx.rb'
|
|
1
|
+
require 'tc_helper.rb'
|
|
3
2
|
|
|
4
3
|
class TestRow < Test::Unit::TestCase
|
|
5
4
|
|
|
@@ -8,7 +7,7 @@ class TestRow < Test::Unit::TestCase
|
|
|
8
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
9
8
|
@row = @ws.add_row
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
def test_initialize
|
|
13
12
|
assert(@row.cells.empty?, "no cells by default")
|
|
14
13
|
assert_equal(@row.worksheet, @ws, "has a reference to the worksheet")
|
|
@@ -25,7 +24,20 @@ class TestRow < Test::Unit::TestCase
|
|
|
25
24
|
def test_style
|
|
26
25
|
r = @ws.add_row([1,2,3,4,5])
|
|
27
26
|
r.style=1
|
|
28
|
-
r.cells.each { |c| assert_equal(c.style,1) }
|
|
27
|
+
r.cells.each { |c| assert_equal(c.style,1) }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_nil_cells
|
|
31
|
+
row = @ws.add_row([nil,1,2,nil,4,5,nil])
|
|
32
|
+
r_s_xml = Nokogiri::XML(row.to_xml_string(0, ''))
|
|
33
|
+
assert_equal(r_s_xml.xpath(".//row/c").size, 4)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_nil_cell_r
|
|
37
|
+
row = @ws.add_row([nil,1,2,nil,4,5,nil])
|
|
38
|
+
r_s_xml = Nokogiri::XML(row.to_xml_string(0, ''))
|
|
39
|
+
assert_equal(r_s_xml.xpath(".//row/c").first['r'], 'B1')
|
|
40
|
+
assert_equal(r_s_xml.xpath(".//row/c").last['r'], 'F1')
|
|
29
41
|
end
|
|
30
42
|
|
|
31
43
|
def test_index
|
|
@@ -54,19 +66,21 @@ class TestRow < Test::Unit::TestCase
|
|
|
54
66
|
end
|
|
55
67
|
|
|
56
68
|
def test_to_xml_without_custom_height
|
|
57
|
-
|
|
58
|
-
@row.to_xml(xml)
|
|
59
|
-
doc = Nokogiri::XML.parse(xml.to_xml)
|
|
69
|
+
doc = Nokogiri::XML.parse(@row.to_xml_string(0))
|
|
60
70
|
assert_equal(0, doc.xpath(".//row[@ht]").size)
|
|
61
71
|
assert_equal(0, doc.xpath(".//row[@customHeight]").size)
|
|
62
72
|
end
|
|
63
73
|
|
|
64
|
-
def
|
|
74
|
+
def test_to_xml_string
|
|
75
|
+
r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
|
|
76
|
+
assert_equal(r_s_xml.xpath(".//row[@r=1]").size, 1)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_to_xml_string_with_custom_height
|
|
80
|
+
@row.add_cell 1
|
|
65
81
|
@row.height = 20
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
doc = Nokogiri::XML.parse(xml.to_xml)
|
|
69
|
-
assert_equal(1, doc.xpath(".//row[@ht=20][@customHeight=1]").size)
|
|
82
|
+
r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
|
|
83
|
+
assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight=1]").size, 1)
|
|
70
84
|
end
|
|
71
85
|
|
|
72
86
|
end
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'axlsx.rb'
|
|
1
|
+
require 'tc_helper.rb'
|
|
3
2
|
|
|
4
3
|
class TestWorksheet < Test::Unit::TestCase
|
|
5
|
-
def setup
|
|
6
|
-
p = Axlsx::Package.new
|
|
7
|
-
@
|
|
4
|
+
def setup
|
|
5
|
+
@p = Axlsx::Package.new
|
|
6
|
+
@wb = @p.workbook
|
|
7
|
+
@ws = @wb.add_worksheet
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
def test_pn
|
|
11
12
|
assert_equal(@ws.pn, "worksheets/sheet1.xml")
|
|
12
13
|
ws = @ws.workbook.add_worksheet
|
|
@@ -14,7 +15,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def test_page_margins
|
|
17
|
-
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
|
18
|
+
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
def test_page_margins_yeild
|
|
@@ -24,9 +25,15 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
def test_no_autowidth
|
|
29
|
+
@ws.workbook.use_autowidth = false
|
|
30
|
+
@ws.add_row [1,2,3,4]
|
|
31
|
+
assert_equal(@ws.column_info[0].width, nil)
|
|
32
|
+
end
|
|
33
|
+
|
|
27
34
|
def test_initialization_options
|
|
28
35
|
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
|
|
29
|
-
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins)
|
|
36
|
+
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :selected => true, :show_gridlines => false)
|
|
30
37
|
assert_equal(optioned.page_margins.left, page_margins[:left])
|
|
31
38
|
assert_equal(optioned.page_margins.right, page_margins[:right])
|
|
32
39
|
assert_equal(optioned.page_margins.top, page_margins[:top])
|
|
@@ -34,6 +41,21 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
34
41
|
assert_equal(optioned.page_margins.header, page_margins[:header])
|
|
35
42
|
assert_equal(optioned.page_margins.footer, page_margins[:footer])
|
|
36
43
|
assert_equal(optioned.name, 'bob')
|
|
44
|
+
assert_equal(optioned.selected, true)
|
|
45
|
+
assert_equal(optioned.show_gridlines, false)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_use_gridlines
|
|
50
|
+
assert_raise(ArgumentError) { @ws.show_gridlines = -1.1 }
|
|
51
|
+
assert_nothing_raised { @ws.show_gridlines = false }
|
|
52
|
+
assert_equal(@ws.show_gridlines, false)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_selected
|
|
56
|
+
assert_raise(ArgumentError) { @ws.selected = -1.1 }
|
|
57
|
+
assert_nothing_raised { @ws.selected = true }
|
|
58
|
+
assert_equal(@ws.selected, true)
|
|
37
59
|
end
|
|
38
60
|
|
|
39
61
|
def test_rels_pn
|
|
@@ -47,7 +69,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
47
69
|
ws = @ws.workbook.add_worksheet
|
|
48
70
|
assert_equal(ws.rId, "rId2")
|
|
49
71
|
end
|
|
50
|
-
|
|
72
|
+
|
|
51
73
|
def test_index
|
|
52
74
|
assert_equal(@ws.index, @ws.workbook.worksheets.index(@ws))
|
|
53
75
|
end
|
|
@@ -62,13 +84,13 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
62
84
|
@ws.add_row [1, 2, 3]
|
|
63
85
|
@ws.add_row [4, 5, 6]
|
|
64
86
|
range = @ws["A1:C2"]
|
|
65
|
-
first_row = @ws[
|
|
66
|
-
last_row = @ws[
|
|
87
|
+
first_row = @ws[0]
|
|
88
|
+
last_row = @ws[1]
|
|
67
89
|
assert_equal(@ws.rows[0],first_row)
|
|
68
90
|
assert_equal(@ws.rows[1],last_row)
|
|
69
91
|
assert_equal(range.size, 6)
|
|
70
92
|
assert_equal(range.first, @ws.rows.first.cells.first)
|
|
71
|
-
assert_equal(range.last, @ws.rows.last.cells.last)
|
|
93
|
+
assert_equal(range.last, @ws.rows.last.cells.last)
|
|
72
94
|
end
|
|
73
95
|
|
|
74
96
|
def test_add_row
|
|
@@ -94,7 +116,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
94
116
|
@ws.add_row [1,2,3,4]
|
|
95
117
|
@ws.add_row [1,2,3,4]
|
|
96
118
|
@ws.col_style( (1..2), 1, :row_offset=>1)
|
|
97
|
-
@ws.rows[(1..-1)].each do | r |
|
|
119
|
+
@ws.rows[(1..-1)].each do | r |
|
|
98
120
|
assert_equal(r.cells[1].style, 1)
|
|
99
121
|
assert_equal(r.cells[2].style, 1)
|
|
100
122
|
end
|
|
@@ -115,7 +137,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
115
137
|
@ws.add_row [1,2,3,4]
|
|
116
138
|
@ws.add_row [1,2,3,4]
|
|
117
139
|
c = @ws.cols[1]
|
|
118
|
-
assert_equal(c.size, 4)
|
|
140
|
+
assert_equal(c.size, 4)
|
|
119
141
|
assert_equal(c[0].value, 2)
|
|
120
142
|
end
|
|
121
143
|
|
|
@@ -125,16 +147,103 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
125
147
|
@ws.add_row [1,2,3,4]
|
|
126
148
|
@ws.add_row [1,2,3,4]
|
|
127
149
|
@ws.row_style 1, 1, :col_offset=>1
|
|
128
|
-
@ws.rows[1].cells[(1..-1)].each do | c |
|
|
150
|
+
@ws.rows[1].cells[(1..-1)].each do | c |
|
|
129
151
|
assert_equal(c.style, 1)
|
|
130
152
|
end
|
|
131
153
|
assert_equal(@ws.rows[1].cells[0].style, 0)
|
|
132
154
|
assert_equal(@ws.rows[2].cells[1].style, 0)
|
|
133
155
|
end
|
|
134
|
-
|
|
135
|
-
def
|
|
156
|
+
|
|
157
|
+
def test_to_xml_string_fit_to_page
|
|
158
|
+
@ws.fit_to_page = true
|
|
159
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
160
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_to_xml_string_dimensions
|
|
164
|
+
@ws.add_row [1,2,3]
|
|
165
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
166
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def test_to_xml_string_selected
|
|
170
|
+
@ws.selected = true
|
|
171
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
172
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@tabSelected="true"]').size, 1)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def test_to_xml_string_show_gridlines
|
|
176
|
+
@ws.show_gridlines = false
|
|
177
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
178
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def test_to_xml_string_show_selection
|
|
183
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
184
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size, 1)
|
|
185
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size, 1)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def test_to_xml_string_auto_fit_data
|
|
189
|
+
@ws.add_row [1, "two"]
|
|
190
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
191
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:cols/xmlns:col').size, 2)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def test_to_xml_string_sheet_data
|
|
195
|
+
@ws.add_row [1, "two"]
|
|
196
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
197
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetData/xmlns:row').size, 1)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def test_to_xml_string_auto_filter
|
|
201
|
+
@ws.add_row [1, "two"]
|
|
202
|
+
@ws.auto_filter = "A1:B1"
|
|
203
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
204
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def test_to_xml_string_merge_cells
|
|
208
|
+
@ws.add_row [1, "two"]
|
|
209
|
+
@ws.merge_cells "A1:D1"
|
|
210
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
211
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_to_xml_string_page_margins
|
|
215
|
+
@ws.page_margins do |pm|
|
|
216
|
+
pm.left = 9
|
|
217
|
+
pm.right = 7
|
|
218
|
+
end
|
|
219
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
220
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def test_to_xml_string_drawing
|
|
224
|
+
c = @ws.add_chart Axlsx::Pie3DChart
|
|
225
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
226
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def test_to_xml_string_tables
|
|
230
|
+
@ws.add_row ["one", "two"]
|
|
231
|
+
@ws.add_row [1, 2]
|
|
232
|
+
@ws.add_table "A1:B2"
|
|
233
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
234
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
|
|
235
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def test_abs_auto_filter
|
|
239
|
+
@ws.add_row [1, "two", 3]
|
|
240
|
+
@ws.auto_filter = "A1:C1"
|
|
241
|
+
assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def test_to_xml_string
|
|
136
245
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
137
|
-
doc = Nokogiri::XML(@ws.
|
|
246
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
138
247
|
errors = []
|
|
139
248
|
schema.validate(doc).each do |error|
|
|
140
249
|
errors.push error
|
|
@@ -146,14 +255,14 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
146
255
|
def test_valid_with_page_margins
|
|
147
256
|
@ws.page_margins.set :left => 9
|
|
148
257
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
149
|
-
doc = Nokogiri::XML(@ws.
|
|
258
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
150
259
|
errors = []
|
|
151
260
|
schema.validate(doc).each do |error|
|
|
152
261
|
errors.push error
|
|
153
262
|
puts error.message
|
|
154
263
|
end
|
|
155
264
|
assert(errors.empty?, "error free validation")
|
|
156
|
-
|
|
265
|
+
|
|
157
266
|
end
|
|
158
267
|
|
|
159
268
|
def test_relationships
|
|
@@ -164,7 +273,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
164
273
|
assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
|
|
165
274
|
end
|
|
166
275
|
|
|
167
|
-
|
|
276
|
+
|
|
168
277
|
def test_name_unique
|
|
169
278
|
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> @ws) }
|
|
170
279
|
end
|
|
@@ -174,52 +283,11 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
174
283
|
assert_nothing_raised { @ws.name = Array.new(31, "A").join('') }
|
|
175
284
|
end
|
|
176
285
|
|
|
177
|
-
def test_update_auto_with_data
|
|
178
|
-
small = @ws.workbook.styles.add_style(:sz=>2)
|
|
179
|
-
big = @ws.workbook.styles.add_style(:sz=>10)
|
|
180
|
-
|
|
181
|
-
@ws.add_row ["chasing windmills", "penut"], :style=>small
|
|
182
|
-
assert(@ws.auto_fit_data.size == 2, "a data item for each column")
|
|
183
|
-
|
|
184
|
-
assert_equal(@ws.auto_fit_data[0], {:sz => 2, :longest => "chasing windmills", :fixed=>nil}, "adding a row updates auto_fit_data if the product of the string length and font is greater for the column")
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
@ws.add_row ["mule"], :style=>big
|
|
188
|
-
assert_equal(@ws.auto_fit_data[0], {:sz=>10,:longest=>"mule", :fixed=>nil}, "adding a row updates auto_fit_data if the product of the string length and font is greater for the column")
|
|
189
|
-
end
|
|
190
|
-
|
|
191
286
|
def test_set_fixed_width_column
|
|
192
287
|
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
|
193
|
-
assert(@ws.
|
|
194
|
-
assert_equal(
|
|
195
|
-
assert_equal(
|
|
196
|
-
assert_equal({:sz=>11, :longest=>"horse", :fixed=>nil}, @ws.auto_fit_data[2], "nil, well really anything else just works as normal")
|
|
197
|
-
@ws.add_row ["mule", "donkey", "horse"]
|
|
198
|
-
assert_equal({:sz=>11, :longest=>"donkey", :fixed=>nil}, @ws.auto_fit_data[1])
|
|
199
|
-
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
def test_fixed_widths_with_merged_cells
|
|
203
|
-
@ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
|
|
204
|
-
@ws.merge_cells "A1:C1"
|
|
205
|
-
@ws.add_row ["but Im Short!"], :widths=> [14.8]
|
|
206
|
-
assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
def test_fixed_width_to_auto
|
|
210
|
-
@ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
|
|
211
|
-
@ws.merge_cells "A1:C1"
|
|
212
|
-
@ws.add_row ["but Im Short!"], :widths=> [14.8]
|
|
213
|
-
assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
|
|
214
|
-
@ws.add_row ["no, I like auto!"], :widths=>[:auto]
|
|
215
|
-
assert_equal(@ws.auto_fit_data[0][:fixed], nil)
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
def test_auto_width
|
|
219
|
-
assert(@ws.send(:auto_width, {:sz=>11, :longest=>"fisheries"}) > @ws.send(:auto_width, {:sz=>11, :longest=>"fish"}), "longer strings get a longer auto_width at the same font size")
|
|
220
|
-
|
|
221
|
-
assert(@ws.send(:auto_width, {:sz=>11, :longest=>"fish"}) < @ws.send(:auto_width, {:sz=>12, :longest=>"fish"}), "larger fonts produce longer with with same string")
|
|
222
|
-
assert_equal(@ws.send(:auto_width, {:sz=>11, :longest => "This is a really long string", :fixed=>0.2}), 0.2, "fixed rules!")
|
|
288
|
+
assert(@ws.column_info.size == 3, "a data item for each column")
|
|
289
|
+
assert_equal(@ws.column_info[0].width, 20, "adding a row with fixed width updates :fixed attribute")
|
|
290
|
+
assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
|
|
223
291
|
end
|
|
224
292
|
|
|
225
293
|
def test_fixed_height
|
|
@@ -227,12 +295,10 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
227
295
|
assert_equal(40, @ws.rows[-1].height)
|
|
228
296
|
end
|
|
229
297
|
|
|
230
|
-
|
|
231
298
|
def test_set_column_width
|
|
232
299
|
@ws.add_row ["chasing windmills", "penut"]
|
|
233
|
-
assert_equal(@ws.auto_fit_data[0][:fixed], nil, 'no fixed by default')
|
|
234
300
|
@ws.column_widths nil, 0.5
|
|
235
|
-
assert_equal(@ws.
|
|
301
|
+
assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
|
|
236
302
|
assert_raise(ArgumentError, 'reject invalid columns') { @ws.column_widths 2, 7, nil }
|
|
237
303
|
assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
|
|
238
304
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
|
@@ -240,7 +306,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
240
306
|
|
|
241
307
|
def test_merge_cells
|
|
242
308
|
assert(@ws.merged_cells.is_a?(Array))
|
|
243
|
-
assert_equal(@ws.merged_cells.size, 0)
|
|
309
|
+
assert_equal(@ws.merged_cells.size, 0)
|
|
244
310
|
@ws.add_row [1,2,3]
|
|
245
311
|
@ws.add_row [4,5,6]
|
|
246
312
|
@ws.add_row [7,8,9]
|