axlsx 1.2.0 → 1.3.3
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/.yardopts +3 -2
- data/CHANGELOG.md +34 -1
- data/README.md +47 -33
- data/Rakefile +1 -1
- data/examples/auto_filter.rb +16 -0
- data/examples/basic_charts.rb +4 -0
- data/examples/colored_links.rb +59 -0
- data/examples/doc/_index.html +88 -0
- data/examples/doc/class_list.html +53 -0
- data/examples/doc/css/common.css +1 -0
- data/examples/doc/css/full_list.css +57 -0
- data/examples/doc/css/style.css +328 -0
- data/examples/doc/file_list.html +52 -0
- data/examples/doc/frames.html +28 -0
- data/examples/doc/index.html +88 -0
- data/examples/doc/js/app.js +214 -0
- data/examples/doc/js/full_list.js +173 -0
- data/examples/doc/js/jquery.js +4 -0
- data/examples/doc/method_list.html +52 -0
- data/examples/doc/top-level-namespace.html +102 -0
- data/examples/example.rb +447 -257
- data/examples/finance.rb +82 -0
- data/examples/hyperlinks.rb +23 -0
- data/examples/page_setup.rb +11 -0
- data/examples/skydrive/axlsx.csv +1 -0
- data/examples/skydrive/axlsx.xlsx +0 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
- data/examples/sprk2012/basics.rb +11 -0
- data/examples/sprk2012/basics.xlsx +0 -0
- data/examples/sprk2012/gravatar.jpeg +0 -0
- data/examples/sprk2012/hair_club.jpg +0 -0
- data/examples/sprk2012/images.rb +9 -0
- data/examples/{example.xlsx → sprk2012/images.xlsx} +0 -0
- data/examples/sprk2012/line_chart.rb +56 -0
- data/examples/sprk2012/line_chart.xlsx +0 -0
- data/examples/sprk2012/sprk2012.key +0 -0
- data/examples/sprk2012/styles.rb +20 -0
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/styles.rb +62 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/content_type/default.rb +6 -37
- data/lib/axlsx/content_type/override.rb +6 -38
- data/lib/axlsx/doc_props/app.rb +10 -7
- data/lib/axlsx/drawing/axis.rb +4 -4
- data/lib/axlsx/drawing/chart.rb +2 -3
- data/lib/axlsx/drawing/d_lbls.rb +21 -31
- data/lib/axlsx/drawing/drawing.rb +6 -0
- data/lib/axlsx/drawing/hyperlink.rb +40 -32
- data/lib/axlsx/drawing/marker.rb +13 -13
- data/lib/axlsx/drawing/num_data.rb +6 -6
- data/lib/axlsx/drawing/num_data_source.rb +17 -16
- data/lib/axlsx/drawing/one_cell_anchor.rb +20 -22
- data/lib/axlsx/drawing/pic.rb +25 -27
- data/lib/axlsx/drawing/picture_locking.rb +12 -44
- data/lib/axlsx/drawing/scaling.rb +13 -13
- data/lib/axlsx/drawing/scatter_chart.rb +3 -3
- data/lib/axlsx/drawing/series.rb +3 -6
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +7 -8
- data/lib/axlsx/drawing/view_3D.rb +52 -38
- data/lib/axlsx/drawing/vml_shape.rb +23 -23
- data/lib/axlsx/package.rb +14 -17
- data/lib/axlsx/stylesheet/border.rb +29 -20
- data/lib/axlsx/stylesheet/border_pr.rb +5 -4
- data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
- data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
- data/lib/axlsx/stylesheet/cell_style.rb +19 -14
- data/lib/axlsx/stylesheet/color.rb +19 -16
- data/lib/axlsx/stylesheet/dxf.rb +4 -4
- data/lib/axlsx/stylesheet/font.rb +22 -22
- data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
- data/lib/axlsx/stylesheet/num_fmt.rb +22 -13
- data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
- data/lib/axlsx/stylesheet/styles.rb +11 -2
- data/lib/axlsx/stylesheet/table_style.rb +17 -16
- data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
- data/lib/axlsx/stylesheet/table_styles.rb +14 -11
- data/lib/axlsx/stylesheet/xf.rb +28 -26
- data/lib/axlsx/util/accessors.rb +49 -0
- data/lib/axlsx/util/constants.rb +105 -4
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/serialized_attributes.rb +46 -0
- data/lib/axlsx/util/simple_typed_list.rb +16 -2
- data/lib/axlsx/util/validators.rb +33 -8
- data/lib/axlsx/version.rb +2 -2
- data/lib/axlsx/workbook/defined_name.rb +13 -58
- data/lib/axlsx/workbook/workbook.rb +33 -2
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +82 -45
- data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
- data/lib/axlsx/workbook/worksheet/col.rb +34 -27
- data/lib/axlsx/workbook/worksheet/color_scale.rb +7 -13
- data/lib/axlsx/workbook/worksheet/comment.rb +14 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +27 -25
- data/lib/axlsx/workbook/worksheet/data_bar.rb +44 -34
- data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
- data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
- data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
- data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +152 -23
- data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
- data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
- data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
- data/lib/axlsx/workbook/worksheet/row.rb +48 -81
- data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +49 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
- data/lib/axlsx/workbook/worksheet/table.rb +22 -17
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +51 -14
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +79 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +19 -5
- data/test/content_type/tc_default.rb +0 -11
- data/test/content_type/tc_override.rb +0 -13
- data/test/drawing/tc_d_lbls.rb +14 -4
- data/test/stylesheet/tc_styles.rb +13 -0
- data/test/tc_axlsx.rb +20 -2
- data/test/tc_package.rb +1 -0
- data/test/util/tc_validators.rb +22 -1
- data/test/workbook/tc_defined_name.rb +2 -2
- data/test/workbook/tc_workbook.rb +15 -0
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_cell.rb +35 -5
- data/test/workbook/worksheet/tc_col.rb +11 -1
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +6 -1
- data/test/workbook/worksheet/tc_pane.rb +5 -45
- data/test/workbook/worksheet/tc_row.rb +4 -4
- data/test/workbook/worksheet/tc_selection.rb +9 -48
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +6 -1
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +17 -3
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
- metadata +74 -10
- 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/workbook/worksheet/auto_filter.rb +0 -34
|
@@ -7,7 +7,7 @@ class TestCol < Test::Unit::TestCase
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def test_initialize
|
|
10
|
-
options = { :width => 12, :collapsed => true, :hidden => true, :
|
|
10
|
+
options = { :width => 12, :collapsed => true, :hidden => true, :outline_level => 1, :phonetic => true, :style => 1}
|
|
11
11
|
|
|
12
12
|
col = Axlsx::Col.new 0, 0, options
|
|
13
13
|
options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
|
|
@@ -58,6 +58,16 @@ class TestCol < Test::Unit::TestCase
|
|
|
58
58
|
assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
+
def test_to_xml_string
|
|
62
|
+
@col.width = 100
|
|
63
|
+
doc = Nokogiri::XML(@col.to_xml_string)
|
|
64
|
+
assert_equal(1, doc.xpath("//col [@bestFit='#{@col.best_fit}']").size)
|
|
65
|
+
assert_equal(1, doc.xpath("//col [@max=#{@col.max}]").size)
|
|
66
|
+
assert_equal(1, doc.xpath("//col [@min=#{@col.min}]").size)
|
|
67
|
+
assert_equal(1, doc.xpath("//col [@width=#{@col.width}]").size)
|
|
68
|
+
assert_equal(1, doc.xpath("//col [@customWidth='#{@col.custom_width}']").size)
|
|
69
|
+
end
|
|
70
|
+
|
|
61
71
|
def test_style
|
|
62
72
|
assert_equal(@col.style, nil)
|
|
63
73
|
@col.style = 1
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestPageSetUpPr < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@page_setup_pr = Axlsx::PageSetUpPr.new(:fit_to_page => true, :auto_page_breaks => true)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_fit_to_page
|
|
9
|
+
assert_equal true, @page_setup_pr.fit_to_page
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_auto_page_breaks
|
|
13
|
+
assert_equal true, @page_setup_pr.auto_page_breaks
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -44,6 +44,11 @@ class TestPageSetup < Test::Unit::TestCase
|
|
|
44
44
|
assert_equal(50, @ps.scale)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
def test_paper_size
|
|
48
|
+
assert_raise(ArgumentError) { @ps.paper_size = 119 }
|
|
49
|
+
assert_nothing_raised { @ps.paper_size = 10 }
|
|
50
|
+
end
|
|
51
|
+
|
|
47
52
|
def test_set_some_values
|
|
48
53
|
@ps.set(:fit_to_width => 2, :orientation => :portrait)
|
|
49
54
|
assert_equal(2, @ps.fit_to_width)
|
|
@@ -58,7 +63,7 @@ class TestPageSetup < Test::Unit::TestCase
|
|
|
58
63
|
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
59
64
|
assert(@ps.fit_to_page? == false)
|
|
60
65
|
end
|
|
61
|
-
|
|
66
|
+
|
|
62
67
|
def test_with_height_fit_to_page?
|
|
63
68
|
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
64
69
|
@ps.set(:fit_to_height => 1)
|
|
@@ -7,61 +7,21 @@ class TestPane < Test::Unit::TestCase
|
|
|
7
7
|
#inverse defaults for booleans
|
|
8
8
|
@nil_options = { :active_pane => :bottom_left, :state => :frozen, :top_left_cell => 'A2' }
|
|
9
9
|
@int_0_options = { :x_split => 2, :y_split => 2 }
|
|
10
|
-
|
|
11
|
-
@string_options = { :top_left_cell => 'A2' }
|
|
12
|
-
@integer_options = { :x_split => 2, :y_split => 2 }
|
|
13
|
-
@symbol_options = { :active_pane => :bottom_left, :state => :frozen }
|
|
14
|
-
|
|
15
|
-
@options = @nil_options.merge(@int_0_options)
|
|
16
|
-
|
|
10
|
+
@options = @nil_options.merge(@int_0_options)
|
|
17
11
|
@pane = Axlsx::Pane.new(@options)
|
|
18
12
|
end
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
pane = Axlsx::Pane.new
|
|
22
|
-
|
|
23
|
-
@nil_options.each do |key, value|
|
|
24
|
-
assert_equal(nil, pane.send(key.to_sym), "initialized default #{key} should be nil")
|
|
25
|
-
assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
@int_0_options.each do |key, value|
|
|
29
|
-
assert_equal(0, pane.send(key.to_sym), "initialized default #{key} should be 0")
|
|
30
|
-
assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def test_string_attribute_validation
|
|
35
|
-
@string_options.each do |key, value|
|
|
36
|
-
assert_raise(ArgumentError, "#{key} must be string") { @pane.send("#{key}=".to_sym, :symbol) }
|
|
37
|
-
assert_nothing_raised { @pane.send("#{key}=".to_sym, "foo") }
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_symbol_attribute_validation
|
|
42
|
-
@symbol_options.each do |key, value|
|
|
43
|
-
assert_raise(ArgumentError, "#{key} must be symbol") { @pane.send("#{key}=".to_sym, "foo") }
|
|
44
|
-
assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_integer_attribute_validation
|
|
49
|
-
@integer_options.each do |key, value|
|
|
50
|
-
assert_raise(ArgumentError, "#{key} must be integer") { @pane.send("#{key}=".to_sym, "foo") }
|
|
51
|
-
assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
13
|
+
|
|
14
|
+
|
|
55
15
|
def test_active_pane
|
|
56
16
|
assert_raise(ArgumentError) { @pane.active_pane = "10" }
|
|
57
17
|
assert_nothing_raised { @pane.active_pane = :top_left }
|
|
58
|
-
assert_equal(@pane.active_pane,
|
|
18
|
+
assert_equal(@pane.active_pane, "topLeft")
|
|
59
19
|
end
|
|
60
20
|
|
|
61
21
|
def test_state
|
|
62
22
|
assert_raise(ArgumentError) { @pane.state = "foo" }
|
|
63
23
|
assert_nothing_raised { @pane.state = :frozen_split }
|
|
64
|
-
assert_equal(@pane.state,
|
|
24
|
+
assert_equal(@pane.state, "frozenSplit")
|
|
65
25
|
end
|
|
66
26
|
|
|
67
27
|
def test_x_split
|
|
@@ -12,13 +12,13 @@ class TestRow < Test::Unit::TestCase
|
|
|
12
12
|
assert(@row.cells.empty?, "no cells by default")
|
|
13
13
|
assert_equal(@row.worksheet, @ws, "has a reference to the worksheet")
|
|
14
14
|
assert_nil(@row.height, "height defaults to nil")
|
|
15
|
-
assert(!@row.custom_height
|
|
15
|
+
assert(!@row.custom_height, "no custom height by default")
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def test_initialize_with_fixed_height
|
|
19
19
|
row = @ws.add_row([1,2,3,4,5], :height=>40)
|
|
20
20
|
assert_equal(40, row.height)
|
|
21
|
-
assert(row.custom_height
|
|
21
|
+
assert(row.custom_height)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def test_style
|
|
@@ -57,7 +57,7 @@ class TestRow < Test::Unit::TestCase
|
|
|
57
57
|
|
|
58
58
|
def test_custom_height
|
|
59
59
|
@row.height = 20
|
|
60
|
-
assert(@row.custom_height
|
|
60
|
+
assert(@row.custom_height)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def test_height
|
|
@@ -111,7 +111,7 @@ class TestRow < Test::Unit::TestCase
|
|
|
111
111
|
@row.add_cell 1
|
|
112
112
|
@row.height = 20
|
|
113
113
|
r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
|
|
114
|
-
assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight=
|
|
114
|
+
assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight='true']").size, 1)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
end
|
|
@@ -3,70 +3,34 @@ require 'tc_helper.rb'
|
|
|
3
3
|
|
|
4
4
|
class TestSelection < Test::Unit::TestCase
|
|
5
5
|
def setup
|
|
6
|
-
@
|
|
7
|
-
@options = @nil_options
|
|
8
|
-
|
|
9
|
-
@string_options = { :active_cell => 'A2', :sqref => 'A2' }
|
|
10
|
-
@integer_options = { :active_cell_id => 1 }
|
|
11
|
-
@symbol_options = { :pane => :top_left }
|
|
12
|
-
|
|
6
|
+
@options = { :active_cell => 'A2', :active_cell_id => 1, :pane => :top_left, :sqref => 'A2' }
|
|
13
7
|
@selection = Axlsx::Selection.new(@options)
|
|
14
8
|
end
|
|
15
|
-
|
|
16
|
-
def test_initialize
|
|
17
|
-
selection = Axlsx::Selection.new
|
|
18
|
-
|
|
19
|
-
@nil_options.each do |key, value|
|
|
20
|
-
assert_equal(nil, selection.send(key.to_sym), "initialized default #{key} should be nil")
|
|
21
|
-
assert_equal(value, @selection.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def test_string_attribute_validation
|
|
26
|
-
@string_options.each do |key, value|
|
|
27
|
-
assert_raise(ArgumentError, "#{key} must be string") { @selection.send("#{key}=".to_sym, :symbol) }
|
|
28
|
-
assert_nothing_raised { @selection.send("#{key}=".to_sym, "foo") }
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def test_symbol_attribute_validation
|
|
33
|
-
@symbol_options.each do |key, value|
|
|
34
|
-
assert_raise(ArgumentError, "#{key} must be symbol") { @selection.send("#{key}=".to_sym, "foo") }
|
|
35
|
-
assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def test_integer_attribute_validation
|
|
40
|
-
@integer_options.each do |key, value|
|
|
41
|
-
assert_raise(ArgumentError, "#{key} must be integer") { @selection.send("#{key}=".to_sym, "foo") }
|
|
42
|
-
assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
9
|
+
|
|
46
10
|
def test_active_cell
|
|
47
11
|
assert_raise(ArgumentError) { @selection.active_cell = :active_cell }
|
|
48
12
|
assert_nothing_raised { @selection.active_cell = "F5" }
|
|
49
13
|
assert_equal(@selection.active_cell, "F5")
|
|
50
14
|
end
|
|
51
|
-
|
|
15
|
+
|
|
52
16
|
def test_active_cell_id
|
|
53
17
|
assert_raise(ArgumentError) { @selection.active_cell_id = "foo" }
|
|
54
18
|
assert_nothing_raised { @selection.active_cell_id = 11 }
|
|
55
19
|
assert_equal(@selection.active_cell_id, 11)
|
|
56
20
|
end
|
|
57
|
-
|
|
21
|
+
|
|
58
22
|
def test_pane
|
|
59
23
|
assert_raise(ArgumentError) { @selection.pane = "foo´" }
|
|
60
24
|
assert_nothing_raised { @selection.pane = :bottom_right }
|
|
61
|
-
assert_equal(@selection.pane,
|
|
25
|
+
assert_equal(@selection.pane, "bottomRight")
|
|
62
26
|
end
|
|
63
|
-
|
|
27
|
+
|
|
64
28
|
def test_sqref
|
|
65
29
|
assert_raise(ArgumentError) { @selection.sqref = :sqref }
|
|
66
30
|
assert_nothing_raised { @selection.sqref = "G32" }
|
|
67
31
|
assert_equal(@selection.sqref, "G32")
|
|
68
32
|
end
|
|
69
|
-
|
|
33
|
+
|
|
70
34
|
def test_to_xml
|
|
71
35
|
p = Axlsx::Package.new
|
|
72
36
|
@ws = p.workbook.add_worksheet :name => "sheetview"
|
|
@@ -76,18 +40,15 @@ class TestSelection < Test::Unit::TestCase
|
|
|
76
40
|
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
77
41
|
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
78
42
|
end
|
|
79
|
-
|
|
43
|
+
|
|
80
44
|
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
81
|
-
|
|
45
|
+
|
|
82
46
|
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']").size)
|
|
83
47
|
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']")
|
|
84
|
-
|
|
85
48
|
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']").size)
|
|
86
49
|
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']")
|
|
87
|
-
|
|
88
50
|
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']").size)
|
|
89
51
|
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']")
|
|
90
|
-
|
|
91
52
|
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']").size)
|
|
92
53
|
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']")
|
|
93
54
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'tc_helper'
|
|
2
|
+
|
|
3
|
+
class TestSheetCalcPr < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@sheet_calc_pr = Axlsx::SheetCalcPr.new(:full_calc_on_load => false)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_full_calc_on_load
|
|
10
|
+
assert_equal false, @sheet_calc_pr.full_calc_on_load
|
|
11
|
+
assert Axlsx::SheetCalcPr.new.full_calc_on_load
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_to_xml_string
|
|
15
|
+
doc = Nokogiri::XML(@sheet_calc_pr.to_xml_string)
|
|
16
|
+
assert_equal 1, doc.xpath('//sheetCalcPr[@fullCalcOnLoad="false"]').size
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestSheetPr < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
worksheet = Axlsx::Package.new.workbook.add_worksheet
|
|
8
|
+
@options = {
|
|
9
|
+
:sync_horizontal => false,
|
|
10
|
+
:sync_vertical => false,
|
|
11
|
+
:transtion_evaluation => true,
|
|
12
|
+
:transition_entry => true,
|
|
13
|
+
:published => false,
|
|
14
|
+
:filter_mode => true,
|
|
15
|
+
:enable_format_conditions_calculation => false,
|
|
16
|
+
:code_name => '007',
|
|
17
|
+
:sync_ref => 'foo'
|
|
18
|
+
}
|
|
19
|
+
@sheet_pr = Axlsx::SheetPr.new(worksheet, @options)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_initialization
|
|
23
|
+
@options.each do |key, value|
|
|
24
|
+
assert_equal value, @sheet_pr.send(key)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -15,6 +15,12 @@ class TestTable < Test::Unit::TestCase
|
|
|
15
15
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def test_table_style_info
|
|
19
|
+
table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
|
|
20
|
+
assert_equal('TableStyleMedium25', table.table_style_info.name)
|
|
21
|
+
assert_equal(true, table.table_style_info.show_row_stripes)
|
|
22
|
+
end
|
|
23
|
+
|
|
18
24
|
def test_add_table
|
|
19
25
|
name = "test"
|
|
20
26
|
table = @ws.add_table("A1:D5", :name => name)
|
|
@@ -22,7 +28,6 @@ class TestTable < Test::Unit::TestCase
|
|
|
22
28
|
assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
|
|
23
29
|
assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
|
|
24
30
|
assert_equal(table.name, name, "options for name are applied")
|
|
25
|
-
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def test_pn
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestTableStyleInfo < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
@ws = p.workbook.add_worksheet
|
|
7
|
+
40.times do
|
|
8
|
+
@ws.add_row %w(aa bb cc dd ee ff gg hh ii jj kk)
|
|
9
|
+
end
|
|
10
|
+
@table = @ws.add_table(Axlsx::cell_range([@ws.rows.first.cells.first,@ws.rows.last.cells.last], false), :name => 'foo')
|
|
11
|
+
@options = { :show_first_column => 1,
|
|
12
|
+
:show_last_column => 1,
|
|
13
|
+
:show_row_stripes => 1,
|
|
14
|
+
:show_column_stripes => 1,
|
|
15
|
+
:name => "TableStyleDark4" }
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize
|
|
21
|
+
table_style = Axlsx::TableStyleInfo.new @options
|
|
22
|
+
@options.each do |key, value|
|
|
23
|
+
assert_equal(value, table_style.send(key.to_sym))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_boolean_properties
|
|
28
|
+
table_style = Axlsx::TableStyleInfo.new
|
|
29
|
+
@options.keys.each do |key|
|
|
30
|
+
assert_nothing_raised { table_style.send("#{key.to_sym}=", true) }
|
|
31
|
+
assert_raises(ArgumentError) { table_style.send(key.to_sym, 'foo') }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
def doc
|
|
35
|
+
@doc ||= Nokogiri::XML(Axlsx::TableStyleInfo.new(@options).to_xml_string)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_to_xml_string_first_column
|
|
39
|
+
assert(doc.xpath('//tableStyleInfo[@showLastColumn=1]'))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_to_xml_string_row_stripes
|
|
43
|
+
assert(doc.xpath('//tableStyleInfo[@showRowStripes=1]'))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_to_xml_string_column_stripes
|
|
47
|
+
assert(doc.xpath('//tableStyleInfo[@showColumnStripes=1]'))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_to_xml_string_name
|
|
51
|
+
assert(doc.xpath("//tableStyleInfo[@name=#{@options[:name]}]"))
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -246,7 +246,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
246
246
|
|
|
247
247
|
def test_to_xml_string_auto_filter
|
|
248
248
|
@ws.add_row [1, "two"]
|
|
249
|
-
@ws.auto_filter = "A1:B1"
|
|
249
|
+
@ws.auto_filter.range = "A1:B1"
|
|
250
250
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
251
251
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
|
|
252
252
|
end
|
|
@@ -324,13 +324,20 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
324
324
|
assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
|
|
325
325
|
assert_equal(nil,@ws.to_xml_string.index("\v"))
|
|
326
326
|
end
|
|
327
|
+
|
|
328
|
+
def test_to_xml_string_with_newlines
|
|
329
|
+
cell_with_newline = "foo\n\r\nbar"
|
|
330
|
+
@ws.add_row [cell_with_newline]
|
|
331
|
+
assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
|
|
332
|
+
assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
|
|
333
|
+
end
|
|
327
334
|
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
328
335
|
# is generated in correct order.
|
|
329
336
|
def test_valid_with_optional_elements
|
|
330
337
|
@ws.page_margins.set :left => 9
|
|
331
338
|
@ws.page_setup.set :fit_to_width => 1
|
|
332
339
|
@ws.print_options.set :headings => true
|
|
333
|
-
@ws.auto_filter = "A1:C3"
|
|
340
|
+
@ws.auto_filter.range = "A1:C3"
|
|
334
341
|
@ws.merge_cells "A4:A5"
|
|
335
342
|
@ws.add_chart Axlsx::Pie3DChart
|
|
336
343
|
@ws.add_table "E1:F3"
|
|
@@ -417,7 +424,14 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
417
424
|
def test_auto_filter
|
|
418
425
|
assert(@ws.auto_filter.range.nil?)
|
|
419
426
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
420
|
-
@ws.auto_filter = "A1:D9"
|
|
427
|
+
@ws.auto_filter.range = "A1:D9"
|
|
421
428
|
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
422
429
|
end
|
|
430
|
+
|
|
431
|
+
def test_sheet_pr_for_auto_filter
|
|
432
|
+
@ws.auto_filter.range = 'A1:D9'
|
|
433
|
+
@ws.auto_filter.add_column 0, :filters, :filter_items => [1]
|
|
434
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
435
|
+
assert(doc.xpath('//sheetPr[@filterMode="true"]'))
|
|
436
|
+
end
|
|
423
437
|
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestWorksheetHyperlink < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@options = { :location => 'https://github.com/randym/axlsx', :tooltip => 'axlsx', :ref => 'A1', :display => 'AXSLX', :target => :internal }
|
|
9
|
+
@a = @ws.add_hyperlink @options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initailize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::WorksheetHyperlink.new }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_location
|
|
17
|
+
assert_equal(@options[:location], @a.location)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_tooltip
|
|
21
|
+
assert_equal(@options[:tooltip], @a.tooltip)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_target
|
|
25
|
+
assert_equal(@options[:target], @a.instance_values['target'])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_display
|
|
29
|
+
assert_equal(@options[:display], @a.display)
|
|
30
|
+
end
|
|
31
|
+
def test_ref
|
|
32
|
+
assert_equal(@options[:ref], @a.ref)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_id
|
|
36
|
+
@a.target = :external
|
|
37
|
+
|
|
38
|
+
assert_equal("rId1", @a.id)
|
|
39
|
+
@a.target = :internal
|
|
40
|
+
assert_equal(nil, @a.id)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_to_xml_string_with_non_external
|
|
45
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
46
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
|
|
47
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
|
|
48
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 1)
|
|
49
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
|
|
50
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 0)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_to_xml_stirng_with_external
|
|
54
|
+
@a.target = :external
|
|
55
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
56
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
|
|
57
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
|
|
58
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
|
|
59
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 0)
|
|
60
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 1)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|