axlsx 1.2.3 → 1.3.1
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 +26 -37
- data/Rakefile +1 -1
- data/examples/auto_filter.rb +16 -0
- data/examples/auto_filter.xlsx +0 -0
- data/examples/example.rb +3 -2
- 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/examples/skydrive/real_example.rb +6 -6
- 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 +1 -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 +7 -12
- data/examples/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 +13 -12
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/styles.rb +62 -0
- data/examples/styles.xlsx +0 -0
- data/lib/axlsx.rb +8 -1
- data/lib/axlsx/stylesheet/styles.rb +4 -0
- data/lib/axlsx/util/constants.rb +90 -5
- data/lib/axlsx/util/validators.rb +26 -8
- data/lib/axlsx/version.rb +2 -2
- data/lib/axlsx/workbook/workbook.rb +4 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +9 -4
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -4
- data/lib/axlsx/workbook/worksheet/table.rb +8 -1
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +18 -3
- data/test/stylesheet/tc_styles.rb +13 -0
- data/test/util/tc_validators.rb +8 -1
- 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 +5 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- 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
- metadata +45 -7
- data/examples/~$extractive.xlsx +0 -0
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +0 -35
@@ -28,6 +28,7 @@ module Axlsx
|
|
28
28
|
@sheet = sheet
|
29
29
|
@style = nil
|
30
30
|
@sheet.workbook.tables << self
|
31
|
+
@table_style_info = TableStyleInfo.new(options[:style_info]) if options[:style_info]
|
31
32
|
@name = "Table#{index+1}"
|
32
33
|
options.each do |o|
|
33
34
|
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
@@ -62,6 +63,12 @@ module Axlsx
|
|
62
63
|
@name = v
|
63
64
|
end
|
64
65
|
end
|
66
|
+
|
67
|
+
# TableStyleInfo for the table.
|
68
|
+
# initialization can be fed via the :style_info option
|
69
|
+
def table_style_info
|
70
|
+
@table_style_info ||= TableStyleInfo.new
|
71
|
+
end
|
65
72
|
|
66
73
|
# Serializes the object
|
67
74
|
# @param [String] str
|
@@ -77,7 +84,7 @@ module Axlsx
|
|
77
84
|
end
|
78
85
|
str << '</tableColumns>'
|
79
86
|
#TODO implement tableStyleInfo
|
80
|
-
str
|
87
|
+
table_style_info.to_xml_string(str) # '<tableStyleInfo showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0" name="TableStyleMedium9" />'
|
81
88
|
str << '</table>'
|
82
89
|
end
|
83
90
|
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Axlsx
|
2
|
+
|
3
|
+
# The table style info class manages style attributes for defined tables in
|
4
|
+
# a worksheet
|
5
|
+
class TableStyleInfo
|
6
|
+
|
7
|
+
# boolean attributes for this object
|
8
|
+
BOOLEAN_ATTRIBUTES = %w(show_first_column show_last_column show_row_stripes show_column_stripes)
|
9
|
+
|
10
|
+
# creates a new TableStyleInfo instance
|
11
|
+
# @param [Hash] options
|
12
|
+
# @option [Boolean] show_first_column indicates if the first column should
|
13
|
+
# be shown
|
14
|
+
# @option [Boolean] show_last_column indicates if the last column should
|
15
|
+
# be shown
|
16
|
+
# @option [Boolean] show_column_stripes indicates if column stripes should
|
17
|
+
# be shown
|
18
|
+
# @option [Boolean] show_row_stripes indicates if row stripes should be shown
|
19
|
+
# @option [String] name The name of the style to apply to your table.
|
20
|
+
# Only predefined styles are currently supported.
|
21
|
+
# @see Annex G. (normative) Predefined SpreadsheetML Style Definitions in part 1 of the specification.
|
22
|
+
def initialize(options = {})
|
23
|
+
initialize_defaults
|
24
|
+
@name = 'TableStyleMedium9'
|
25
|
+
options.each do |k, v|
|
26
|
+
send("#{k}=", v) if respond_to? "#{k}="
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Dynamically create accessors for boolean attriubtes
|
31
|
+
BOOLEAN_ATTRIBUTES.each do |attr|
|
32
|
+
class_eval %{
|
33
|
+
# The #{attr} attribute reader
|
34
|
+
# @return [Boolean]
|
35
|
+
attr_reader :#{attr}
|
36
|
+
|
37
|
+
# The #{attr} writer
|
38
|
+
# @param [Boolean] value The value to assign to #{attr}
|
39
|
+
# @return [Boolean]
|
40
|
+
def #{attr}=(value)
|
41
|
+
Axlsx::validate_boolean(value)
|
42
|
+
@#{attr} = value
|
43
|
+
end
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
# Initialize all the values to false as Excel requires them to
|
48
|
+
# explicitly be disabled or all will show.
|
49
|
+
def initialize_defaults
|
50
|
+
BOOLEAN_ATTRIBUTES.each do |attr|
|
51
|
+
self.send("#{attr}=", 0)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# The name of the table style.
|
56
|
+
attr_accessor :name
|
57
|
+
|
58
|
+
# seralizes this object to an xml string
|
59
|
+
# @param [String] str the string to contact this objects serialization to.
|
60
|
+
def to_xml_string(str = '')
|
61
|
+
str << '<tableStyleInfo '
|
62
|
+
instance_values.each do |key, value|
|
63
|
+
str << Axlsx::camel(key, false) << "='#{value}' "
|
64
|
+
end
|
65
|
+
str << '/>'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -42,6 +42,12 @@ module Axlsx
|
|
42
42
|
def name
|
43
43
|
@name ||= "Sheet" + (index+1).to_s
|
44
44
|
end
|
45
|
+
|
46
|
+
# The sheet calculation properties
|
47
|
+
# @return [SheetCalcPr]
|
48
|
+
def sheet_calc_pr
|
49
|
+
@sheet_calc_pr ||= SheetCalcPr.new
|
50
|
+
end
|
45
51
|
|
46
52
|
# The sheet protection object for this workbook
|
47
53
|
# @return [SheetProtection]
|
@@ -491,15 +497,24 @@ module Axlsx
|
|
491
497
|
# This intentionally does not use nokogiri for performance reasons
|
492
498
|
# @return [String]
|
493
499
|
def to_xml_string
|
500
|
+
auto_filter.apply if auto_filter.range
|
494
501
|
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
495
502
|
str << worksheet_node
|
496
503
|
serializable_parts.each do |item|
|
497
504
|
item.to_xml_string(str) if item
|
498
505
|
end
|
499
506
|
str << '</worksheet>'
|
500
|
-
str
|
507
|
+
sanitize(str)
|
501
508
|
end
|
502
509
|
|
510
|
+
# returns the provided string with all invalid control charaters
|
511
|
+
# removed.
|
512
|
+
# @param [String] str The sting to process
|
513
|
+
# @return [String]
|
514
|
+
def sanitize(str)
|
515
|
+
str.gsub(CONTROL_CHAR_REGEX, '')
|
516
|
+
end
|
517
|
+
|
503
518
|
# The worksheet relationships. This is managed automatically by the worksheet
|
504
519
|
# @return [Relationships]
|
505
520
|
def relationships
|
@@ -556,7 +571,7 @@ module Axlsx
|
|
556
571
|
|
557
572
|
|
558
573
|
private
|
559
|
-
|
574
|
+
|
560
575
|
def validate_sheet_name(name)
|
561
576
|
DataTypeValidator.validate "Worksheet.name", String, name
|
562
577
|
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.size > 31
|
@@ -569,7 +584,7 @@ module Axlsx
|
|
569
584
|
|
570
585
|
def serializable_parts
|
571
586
|
[sheet_pr, dimension, sheet_view, column_info,
|
572
|
-
sheet_data, @sheet_protection, protected_ranges,
|
587
|
+
sheet_data, sheet_calc_pr, @sheet_protection, protected_ranges,
|
573
588
|
auto_filter, merged_cells, conditional_formattings,
|
574
589
|
data_validations, hyperlinks, print_options, page_margins,
|
575
590
|
page_setup, worksheet_drawing, worksheet_comments,
|
@@ -105,6 +105,19 @@ class TestStyles < Test::Unit::TestCase
|
|
105
105
|
assert(@styles.parse_alignment_options(:alignment => {}).is_a?(Axlsx::CellAlignment))
|
106
106
|
end
|
107
107
|
|
108
|
+
def test_parse_font_using_defaults
|
109
|
+
original = @styles.fonts.first
|
110
|
+
@styles.add_style :b => 1, :sz => 99
|
111
|
+
created = @styles.fonts.last
|
112
|
+
original_attributes = original.instance_values
|
113
|
+
assert_equal(1, created.b)
|
114
|
+
assert_equal(99, created.sz)
|
115
|
+
copied = original_attributes.reject{ |key, value| %w(b sz).include? key }
|
116
|
+
copied.each do |key, value|
|
117
|
+
assert_equal(created.instance_values[key], value)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
108
121
|
def test_parse_font_options
|
109
122
|
options = {
|
110
123
|
:fg_color => "FF050505",
|
data/test/util/tc_validators.rb
CHANGED
@@ -158,4 +158,11 @@ class TestValidators < Test::Unit::TestCase
|
|
158
158
|
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
|
159
159
|
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
|
+
def test_range_validation
|
163
|
+
# exclusive
|
164
|
+
assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) }
|
165
|
+
# inclusive by default
|
166
|
+
assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'tc_helper.rb'
|
2
|
+
|
3
|
+
class TestAutoFilter < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
ws = Axlsx::Package.new.workbook.add_worksheet
|
7
|
+
3.times { |index| ws.add_row [1*index,2*index,3*index] }
|
8
|
+
@auto_filter = ws.auto_filter
|
9
|
+
@auto_filter.range = 'A1:C3'
|
10
|
+
@auto_filter.add_column 0, :filters, :filter_items => [1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_defined_name
|
14
|
+
assert_equal("'Sheet1'!$A$1:$C$3", @auto_filter.defined_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_to_xml_string
|
18
|
+
doc = Nokogiri::XML(@auto_filter.to_xml_string)
|
19
|
+
assert(doc.xpath("autoFilter[@ref='#{@auto_filter.range}']"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_columns
|
23
|
+
assert @auto_filter.columns.is_a?(Axlsx::SimpleTypedList)
|
24
|
+
assert_equal @auto_filter.columns.allowed_types, [Axlsx::FilterColumn]
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_add_column
|
28
|
+
@auto_filter.add_column(0, :filters) do |column|
|
29
|
+
assert column.is_a? FilterColumn
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_applya
|
34
|
+
assert_equal nil, @auto_filter.worksheet.rows.last.hidden
|
35
|
+
@auto_filter.apply
|
36
|
+
assert_equal true, @auto_filter.worksheet.rows.last.hidden
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'tc_helper.rb'
|
2
|
+
|
3
|
+
class TestFilterColumn < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@filter_column = Axlsx::FilterColumn.new(0, :filters, :filter_items => [200])
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
def test_initialize_col_id
|
11
|
+
assert_raise ArgumentError do
|
12
|
+
Axlsx::FilterColumn.new(0, :bobs_house_of_filter)
|
13
|
+
end
|
14
|
+
assert_raise ArgumentError do
|
15
|
+
Axlsx::FilterColumn.new(:penut, :filters)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_initailize_filter_type
|
20
|
+
assert @filter_column.filter.is_a?(Axlsx::Filters)
|
21
|
+
assert_equal 1, @filter_column.filter.filter_items.size
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_initialize_filter_type_filters_with_options
|
25
|
+
assert_equal 200, @filter_column.filter.filter_items.first.val
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_initialize_with_block
|
29
|
+
filter_column = Axlsx::FilterColumn.new(0, :filters) do |filters|
|
30
|
+
filters.filter_items = [700, 100, 5]
|
31
|
+
end
|
32
|
+
assert_equal 3, filter_column.filter.filter_items.size
|
33
|
+
assert_equal 700, filter_column.filter.filter_items.first.val
|
34
|
+
assert_equal 5, filter_column.filter.filter_items.last.val
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_default_show_button
|
38
|
+
assert_equal true, @filter_column.show_button
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_default_hidden_button
|
42
|
+
assert_equal false, @filter_column.hidden_button
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_show_button
|
46
|
+
assert_raise ArgumentError do
|
47
|
+
@filter_column.show_button = :foo
|
48
|
+
end
|
49
|
+
assert_nothing_raised { @filter_column.show_button = false }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_hidden_button
|
53
|
+
assert_raise ArgumentError do
|
54
|
+
@filter_column.hidden_button = :hoge
|
55
|
+
end
|
56
|
+
assert_nothing_raised { @filter_column.hidden_button = true }
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_col_id=
|
60
|
+
assert_raise ArgumentError do
|
61
|
+
@filter_column.col_id = :bar
|
62
|
+
end
|
63
|
+
assert_nothing_raised { @filter_column.col_id = 7 }
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_to_xml_string
|
67
|
+
doc = Nokogiri::XML(@filter_column.to_xml_string)
|
68
|
+
assert doc.xpath("//filterColumn[@colId=#{@filter_column.col_id}]")
|
69
|
+
assert doc.xpath("//filterColumn[@hiddenButton=#{@filter_column.hidden_button}]")
|
70
|
+
assert doc.xpath("//filterColumn[@showButton=#{@filter_column.show_button}]")
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
assert doc.xpath("//filterColumn/filters")
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'tc_helper.rb'
|
2
|
+
|
3
|
+
class TestFilters < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@filters = Axlsx::Filters.new(:filter_items => [1, 'a'],
|
6
|
+
:date_group_items =>[ { :date_time_grouping => :year, :year => 2011, :month => 11, :day => 11, :hour => 0, :minute => 0, :second => 0 } ] ,
|
7
|
+
:blank => true)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_blank
|
11
|
+
assert_equal true, @filters.blank
|
12
|
+
assert_raise(ArgumentError) { @filters.blank = :only_if_you_want_it }
|
13
|
+
@filters.blank = true
|
14
|
+
assert_equal true, @filters.blank
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_calendar_type
|
18
|
+
assert_raise(ArgumentError) { @filters.calendar_type = 'monkey calendar' }
|
19
|
+
@filters.calendar_type = 'japan'
|
20
|
+
assert_equal('japan', @filters.calendar_type)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_filters_items
|
24
|
+
assert @filters.filter_items.is_a?(Array)
|
25
|
+
assert_equal 2, @filters.filter_items.size
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_date_group_items
|
29
|
+
assert @filters.date_group_items.is_a?(Array)
|
30
|
+
assert_equal 1, @filters.date_group_items.size
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_apply_is_false_for_matching_values
|
34
|
+
keeper = Object.new
|
35
|
+
def keeper.value; 'a'; end
|
36
|
+
assert_equal false, @filters.apply(keeper)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_apply_is_true_for_non_matching_values
|
40
|
+
hidden = Object.new
|
41
|
+
def hidden.value; 'b'; end
|
42
|
+
assert_equal true, @filters.apply(hidden)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_to_xml_string
|
46
|
+
doc = Nokogiri::XML(@filters.to_xml_string)
|
47
|
+
assert_equal(1, doc.xpath('//filters[@blank="true"]').size)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -275,6 +275,11 @@ class TestCell < Test::Unit::TestCase
|
|
275
275
|
assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
|
276
276
|
end
|
277
277
|
|
278
|
+
def test_font_size_with_bolding
|
279
|
+
@c.style = @c.row.worksheet.workbook.styles.add_style :b => true
|
280
|
+
assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
|
281
|
+
end
|
282
|
+
|
278
283
|
def test_font_size_with_custom_sz
|
279
284
|
@c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
|
280
285
|
sz = @c.send(:font_size)
|
@@ -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
|
@@ -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
|