axlsx 1.1.8 → 1.2.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/.yardopts +5 -2
- data/CHANGELOG.md +39 -0
- data/README.md +48 -46
- data/Rakefile +3 -3
- data/examples/basic_charts.rb +8 -0
- data/examples/example.rb +7 -1
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/lib/axlsx.rb +14 -8
- data/lib/axlsx/drawing/bar_3D_chart.rb +2 -8
- data/lib/axlsx/drawing/chart.rb +29 -25
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +2 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +2 -9
- data/lib/axlsx/drawing/pie_3D_chart.rb +3 -0
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/two_cell_anchor.rb +38 -1
- data/lib/axlsx/util/simple_typed_list.rb +13 -6
- data/lib/axlsx/version.rb +2 -7
- data/lib/axlsx/workbook/defined_name.rb +174 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/workbook.rb +39 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +24 -1
- data/lib/axlsx/workbook/worksheet/col.rb +15 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +8 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +1 -1
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +263 -380
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/test/drawing/tc_bar_series.rb +1 -1
- data/test/drawing/tc_chart.rb +7 -1
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +5 -4
- data/test/drawing/tc_line_series.rb +1 -1
- data/test/drawing/tc_pie_3D_chart.rb +1 -1
- data/test/drawing/tc_pie_series.rb +1 -1
- data/test/drawing/tc_scatter_series.rb +1 -1
- data/test/drawing/tc_series.rb +1 -1
- data/test/tc_package.rb +16 -1
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/table/tc_table.rb +0 -8
- data/test/workbook/worksheet/tc_cell.rb +2 -4
- data/test/workbook/worksheet/tc_protected_range.rb +0 -1
- data/test/workbook/worksheet/tc_row.rb +2 -2
- data/test/workbook/worksheet/tc_worksheet.rb +19 -21
- metadata +48 -7
@@ -0,0 +1,57 @@
|
|
1
|
+
module Axlsx
|
2
|
+
|
3
|
+
# A wraper class for comments that defines its on worksheet
|
4
|
+
# serailization
|
5
|
+
class WorksheetComments
|
6
|
+
|
7
|
+
# Creates a new WorksheetComments object
|
8
|
+
# param [Worksheet] worksheet The worksheet comments in thes object belong to
|
9
|
+
def initialize(worksheet)
|
10
|
+
raise ArugumentError, 'You must provide a worksheet' unless worksheet.is_a?(Worksheet)
|
11
|
+
@worksheet = worksheet
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :worksheet
|
15
|
+
|
16
|
+
# The comments for this worksheet.
|
17
|
+
# @return [Comments]
|
18
|
+
def comments
|
19
|
+
@comments ||= Comments.new(worksheet)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Adds a comment
|
23
|
+
# @param [Hash] options
|
24
|
+
# @see Comments#add_comment
|
25
|
+
def add_comment(options={})
|
26
|
+
comments.add_comment(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
# The relationships defined by this objects comments collection
|
30
|
+
# @return [Relationships]
|
31
|
+
def relationships
|
32
|
+
return [] unless has_comments?
|
33
|
+
comments.relationships
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Helper method to tell us if there are comments in the comments collection
|
38
|
+
# @return [Boolean]
|
39
|
+
def has_comments?
|
40
|
+
!comments.empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
# The index in the worksheet's relationships for the VML drawing that will render the comments
|
44
|
+
# @return [Integer]
|
45
|
+
def index
|
46
|
+
worksheet.relationships.index { |r| r.Type == VML_DRAWING_R } + 1
|
47
|
+
end
|
48
|
+
|
49
|
+
# Seraalize the object
|
50
|
+
# @param [String] str
|
51
|
+
# @return [String]
|
52
|
+
def to_xml_string(str = '')
|
53
|
+
return unless has_comments?
|
54
|
+
str << "<legacyDrawing r:id='rId#{index}' />"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Axlsx
|
2
|
+
|
3
|
+
# This is a utility class for serialing the drawing node in a
|
4
|
+
# worksheet. Drawing objects have their own serialization that exports
|
5
|
+
# a drawing document. This is only for the single node in the
|
6
|
+
# worksheet
|
7
|
+
class WorksheetDrawing
|
8
|
+
|
9
|
+
# Creates a new WorksheetDrawing
|
10
|
+
# @param [Worksheet] worksheet
|
11
|
+
def initialize(worksheet)
|
12
|
+
raise ArgumentError, 'you must provide a worksheet' unless worksheet.is_a?(Worksheet)
|
13
|
+
@worksheet = worksheet
|
14
|
+
@drawing = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :worksheet
|
18
|
+
|
19
|
+
attr_reader :drawing
|
20
|
+
|
21
|
+
# adds a chart to the drawing object
|
22
|
+
# @param [Class] chart_type The type of chart to add
|
23
|
+
# @param [Hash] options Options to pass on to the drawing and chart
|
24
|
+
# @see Worksheet#add_chart
|
25
|
+
def add_chart(chart_type, options)
|
26
|
+
@drawing ||= Drawing.new worksheet
|
27
|
+
drawing.add_chart(chart_type, options)
|
28
|
+
end
|
29
|
+
|
30
|
+
# adds an image to the drawing object
|
31
|
+
# @param [Hash] options Options to pass on to the drawing and image
|
32
|
+
# @see Worksheet#add_image
|
33
|
+
def add_image(options)
|
34
|
+
@drawing ||= Drawing.new worksheet
|
35
|
+
drawing.add_image(options)
|
36
|
+
end
|
37
|
+
|
38
|
+
# helper method to tell us if the drawing has something in it or not
|
39
|
+
# @return [Boolean]
|
40
|
+
def has_drawing?
|
41
|
+
@drawing.is_a? Drawing
|
42
|
+
end
|
43
|
+
|
44
|
+
# The relationship required by this object
|
45
|
+
# @return [Relationship]
|
46
|
+
def relationship
|
47
|
+
return unless has_drawing?
|
48
|
+
Relationship.new(DRAWING_R, "../#{drawing.pn}")
|
49
|
+
end
|
50
|
+
|
51
|
+
# returns the index of the worksheet releationship that defines this drawing.
|
52
|
+
# @return [Integer]
|
53
|
+
def index
|
54
|
+
worksheet.relationships.index{ |r| r.Type == DRAWING_R } +1
|
55
|
+
end
|
56
|
+
|
57
|
+
# Serialize the drawing for the worksheet
|
58
|
+
# @param [String] str
|
59
|
+
def to_xml_string(str = '')
|
60
|
+
return unless has_drawing?
|
61
|
+
str << "<drawing r:id='rId#{index}'/>"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -5,7 +5,7 @@ class TestBarSeries < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
8
|
-
@chart = @ws.
|
8
|
+
@chart = @ws.add_chart Axlsx::Bar3DChart, :title => "fishery"
|
9
9
|
@series = @chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ['FF0000', '00FF00', '0000FF'], :shape => :cone
|
10
10
|
end
|
11
11
|
|
data/test/drawing/tc_chart.rb
CHANGED
@@ -73,7 +73,13 @@ class TestChart < Test::Unit::TestCase
|
|
73
73
|
def test_pn
|
74
74
|
assert_equal(@chart.pn, "charts/chart1.xml")
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
|
+
def test_d_lbls
|
78
|
+
assert_equal(nil, @chart.instance_values[:d_lbls])
|
79
|
+
@chart.d_lbls.d_lbl_pos = :t
|
80
|
+
assert(@chart.d_lbls.is_a?(Axlsx::DLbls), 'DLbls instantiated on access')
|
81
|
+
end
|
82
|
+
|
77
83
|
def test_to_xml_string
|
78
84
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
79
85
|
doc = Nokogiri::XML(@chart.to_xml_string)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'tc_helper'
|
2
|
+
|
3
|
+
class TestDLbls < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_initialization
|
10
|
+
assert_equal(:bestFit, @d_lbls.d_lbl_pos)
|
11
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
12
|
+
assert_equal(false, @d_lbls.send(attr))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_initialization_with_optoins
|
17
|
+
options_hash = Hash[*[Axlsx::DLbls::BOOLEAN_ATTRIBUTES.map { |name| [name, true] }] ]
|
18
|
+
d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart, options_hash.merge( { :d_lbl_pos => :t }))
|
19
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
20
|
+
assert_equal(true, d_lbls.send(attr), "boolean attributes set by options")
|
21
|
+
end
|
22
|
+
assert_equal(:t, d_lbls.d_lbl_pos, "d_lbl_pos set by options")
|
23
|
+
end
|
24
|
+
def test_d_lbl_pos
|
25
|
+
assert_raise(ArgumentError, 'invlaid label positions are rejected') { @d_lbls.d_lbl_pos = :upside_down }
|
26
|
+
assert_nothing_raised('accepts valid label position') { @d_lbls.d_lbl_pos = :ctr }
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_boolean_attributes
|
30
|
+
Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
|
31
|
+
assert_raise(ArgumentError, "rejects non boolean value for #{attr}") { @d_lbls.send("#{attr}=", :foo) }
|
32
|
+
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", true) }
|
33
|
+
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", false) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_to_xml_string
|
38
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
39
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '" xmlns:r="' << Axlsx::XML_NS_R << '">'
|
40
|
+
@d_lbls.to_xml_string(str)
|
41
|
+
str << '</c:chartSpace>'
|
42
|
+
doc = Nokogiri::XML(str)
|
43
|
+
@d_lbls.instance_values.each do |name, value|
|
44
|
+
assert(doc.xpath("//c:#{Axlsx::camel(name, false)}[@val='#{value}']"), "#{name} is properly serialized")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/test/drawing/tc_drawing.rb
CHANGED
@@ -9,8 +9,6 @@ class TestDrawing < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
def test_initialization
|
11
11
|
assert(@ws.workbook.drawings.empty?)
|
12
|
-
assert_equal(@ws.drawing, @ws.workbook.drawings.last, "drawing is added to workbook")
|
13
|
-
assert(@ws.drawing.anchors.is_a?(Axlsx::SimpleTypedList) && @ws.drawing.anchors.empty?, "anchor list is created and empty")
|
14
12
|
end
|
15
13
|
|
16
14
|
def test_add_chart
|
@@ -39,7 +37,6 @@ class TestDrawing < Test::Unit::TestCase
|
|
39
37
|
assert(image.is_a?(Axlsx::Pic))
|
40
38
|
end
|
41
39
|
def test_charts
|
42
|
-
assert(@ws.drawing.charts.empty?)
|
43
40
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
44
41
|
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
45
42
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
@@ -47,23 +44,26 @@ class TestDrawing < Test::Unit::TestCase
|
|
47
44
|
end
|
48
45
|
|
49
46
|
def test_pn
|
47
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
50
48
|
assert_equal(@ws.drawing.pn, "drawings/drawing1.xml")
|
51
49
|
end
|
52
50
|
|
53
51
|
def test_rels_pn
|
52
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
54
53
|
assert_equal(@ws.drawing.rels_pn, "drawings/_rels/drawing1.xml.rels")
|
55
54
|
end
|
56
55
|
|
57
56
|
def test_rId
|
57
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
58
58
|
assert_equal(@ws.drawing.rId, "rId1")
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_index
|
62
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
62
63
|
assert_equal(@ws.drawing.index, @ws.workbook.drawings.index(@ws.drawing))
|
63
64
|
end
|
64
65
|
|
65
66
|
def test_relationships
|
66
|
-
assert(@ws.drawing.relationships.empty?)
|
67
67
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
68
68
|
assert_equal(@ws.drawing.relationships.size, 1, "adding a chart adds a relationship")
|
69
69
|
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
@@ -72,6 +72,7 @@ class TestDrawing < Test::Unit::TestCase
|
|
72
72
|
|
73
73
|
def test_to_xml
|
74
74
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
75
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
75
76
|
doc = Nokogiri::XML(@ws.drawing.to_xml_string)
|
76
77
|
errors = []
|
77
78
|
schema.validate(doc).each do |error|
|
@@ -5,7 +5,7 @@ class TestLineSeries < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
8
|
-
chart = @ws.
|
8
|
+
chart = @ws.add_chart Axlsx::Line3DChart, :title => "fishery"
|
9
9
|
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :color => "#FF0000"
|
10
10
|
end
|
11
11
|
|
@@ -6,7 +6,7 @@ class TestPie3DChart < Test::Unit::TestCase
|
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
ws = p.workbook.add_worksheet
|
8
8
|
@row = ws.add_row ["one", 1, Time.now]
|
9
|
-
@chart = ws.
|
9
|
+
@chart = ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
|
10
10
|
end
|
11
11
|
|
12
12
|
def teardown
|
@@ -5,7 +5,7 @@ class TestPieSeries < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
8
|
-
chart = @ws.
|
8
|
+
chart = @ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
|
9
9
|
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ["FF0000", "00FF00", "0000FF"]
|
10
10
|
end
|
11
11
|
|
@@ -5,7 +5,7 @@ class TestScatterSeries < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
8
|
-
@chart = @ws.
|
8
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Scatter Chart"
|
9
9
|
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents", :color => 'FF0000'
|
10
10
|
end
|
11
11
|
|
data/test/drawing/tc_series.rb
CHANGED
@@ -5,7 +5,7 @@ class TestSeries < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
p = Axlsx::Package.new
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
8
|
-
chart = @ws.
|
8
|
+
chart = @ws.add_chart Axlsx::Chart, :title => "fishery"
|
9
9
|
@series = chart.add_series :title=>"bob"
|
10
10
|
end
|
11
11
|
|
data/test/tc_package.rb
CHANGED
@@ -7,6 +7,7 @@ class TestPackage < Test::Unit::TestCase
|
|
7
7
|
ws = @package.workbook.add_worksheet
|
8
8
|
ws.add_row ['Can', 'we', 'build it?']
|
9
9
|
ws.add_row ['Yes!', 'We', 'can!']
|
10
|
+
ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
|
10
11
|
ws.protect_range('A1:C1')
|
11
12
|
ws.protect_range(ws.rows.last.cells)
|
12
13
|
ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
|
@@ -28,11 +29,25 @@ class TestPackage < Test::Unit::TestCase
|
|
28
29
|
|
29
30
|
ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
|
30
31
|
chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
|
32
|
+
chart.d_lbls.show_val = true
|
33
|
+
chart.d_lbls.d_lbl_pos = :outEnd
|
34
|
+
chart.d_lbls.show_percent = true
|
31
35
|
end
|
32
36
|
|
33
37
|
ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
|
34
38
|
chart.valAxis.title = 'bob'
|
39
|
+
chart.d_lbls.show_val = true
|
35
40
|
end
|
41
|
+
|
42
|
+
ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
|
43
|
+
chart.add_series :data => [1,4,5], :labels => %w(A B C)
|
44
|
+
chart.d_lbls.show_percent = true
|
45
|
+
end
|
46
|
+
|
47
|
+
ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
|
48
|
+
chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
|
49
|
+
chart.d_lbls.show_val = true
|
50
|
+
end
|
36
51
|
|
37
52
|
@fname = 'axlsx_test_serialization.xlsx'
|
38
53
|
img = File.expand_path('../../examples/image1.jpeg', __FILE__)
|
@@ -122,7 +137,7 @@ class TestPackage < Test::Unit::TestCase
|
|
122
137
|
|
123
138
|
|
124
139
|
#no mystery parts
|
125
|
-
assert_equal(p.size,
|
140
|
+
assert_equal(p.size, 21)
|
126
141
|
|
127
142
|
end
|
128
143
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'tc_helper'
|
2
|
+
|
3
|
+
class TestDefinedNames < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@dn = Axlsx::DefinedName.new('Sheet1!A1:A1')
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_initialize
|
9
|
+
assert_equal('Sheet1!A1:A1', @dn.formula)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_string_attributes
|
13
|
+
Axlsx::DefinedName::STRING_ATTRIBUTES.each do |attr|
|
14
|
+
assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
|
15
|
+
assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_boolean_attributes
|
20
|
+
Axlsx::DefinedName::BOOLEAN_ATTRIBUTES.each do |attr|
|
21
|
+
assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
|
22
|
+
assert_nothing_raised { @dn.send("#{attr}=", 1) }
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_local_sheet_id
|
28
|
+
assert_raise(ArgumentError, 'local_sheet_id must be an unsigned int') { @dn.local_sheet_id = -1 }
|
29
|
+
assert_nothing_raised { @dn.local_sheet_id = 1 }
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_to_xml_string
|
33
|
+
assert_raise(ArgumentError, 'name is required for serialization') { @dn.to_xml_string }
|
34
|
+
@dn.name = '_xlnm.Print_Titles'
|
35
|
+
@dn.hidden = true
|
36
|
+
doc = Nokogiri::XML(@dn.to_xml_string)
|
37
|
+
assert(doc.xpath("//definedName[@name='_xlnm.Print_Titles']"))
|
38
|
+
assert(doc.xpath("//definedName[@hidden='true']"))
|
39
|
+
assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
|
40
|
+
end
|
41
|
+
end
|
@@ -24,7 +24,10 @@ class TestWorkbook < Test::Unit::TestCase
|
|
24
24
|
assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
def test_add_defined_name
|
28
|
+
@wb.add_defined_name 'Sheet1!1:1', :name => '_xlnm.Print_Titles', :hidden => true
|
29
|
+
assert_equal(1, @wb.defined_names.size)
|
30
|
+
end
|
28
31
|
|
29
32
|
def test_shared_strings
|
30
33
|
assert_equal(@wb.use_shared_strings, nil)
|
@@ -72,14 +75,13 @@ class TestWorkbook < Test::Unit::TestCase
|
|
72
75
|
assert(@wb.worksheets.size == 1)
|
73
76
|
end
|
74
77
|
|
75
|
-
|
76
78
|
def test_to_xml_string_defined_names
|
77
79
|
@wb.add_worksheet do |sheet|
|
78
80
|
sheet.add_row [1, "two"]
|
79
81
|
sheet.auto_filter = "A1:B1"
|
80
82
|
end
|
81
83
|
doc = Nokogiri::XML(@wb.to_xml_string)
|
82
|
-
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].
|
84
|
+
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
|
83
85
|
end
|
84
86
|
|
85
87
|
|
@@ -25,14 +25,6 @@ class TestTable < Test::Unit::TestCase
|
|
25
25
|
|
26
26
|
end
|
27
27
|
|
28
|
-
def test_charts
|
29
|
-
assert(@ws.drawing.charts.empty?)
|
30
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
31
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
32
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
33
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
34
|
-
end
|
35
|
-
|
36
28
|
def test_pn
|
37
29
|
@ws.add_table("A1:D5")
|
38
30
|
assert_equal(@ws.tables.first.pn, "tables/table1.xml")
|
@@ -197,19 +197,17 @@ class TestCell < Test::Unit::TestCase
|
|
197
197
|
end
|
198
198
|
|
199
199
|
def test_merge_with_string
|
200
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
201
200
|
@c.row.add_cell 2
|
202
201
|
@c.row.add_cell 3
|
203
202
|
@c.merge "A2"
|
204
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:A2")
|
203
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
|
205
204
|
end
|
206
205
|
|
207
206
|
def test_merge_with_cell
|
208
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
209
207
|
@c.row.add_cell 2
|
210
208
|
@c.row.add_cell 3
|
211
209
|
@c.merge @row.cells.last
|
212
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:C1")
|
210
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
|
213
211
|
end
|
214
212
|
|
215
213
|
def test_ssti
|