axlsx 1.1.0 → 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 +78 -0
- data/LICENSE +1 -1
- data/README.md +132 -331
- data/Rakefile +17 -5
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +72 -0
- data/examples/conditional_formatting/getting_barred.rb +37 -0
- data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
- data/examples/conditional_formatting/scaled_colors.rb +39 -0
- data/examples/conditional_formatting/stop_and_go.rb +37 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +300 -152
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +45 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/sheet_view.rb +34 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/two_cell_anchor_image.rb +11 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +30 -15
- data/lib/axlsx/content_type/override.rb +29 -14
- data/lib/axlsx/doc_props/app.rb +161 -104
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axis.rb +106 -35
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +25 -7
- data/lib/axlsx/drawing/cat_axis.rb +50 -22
- data/lib/axlsx/drawing/chart.rb +69 -56
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +28 -12
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/line_series.rb +20 -4
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +61 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/pie_series.rb +18 -4
- data/lib/axlsx/drawing/scatter_chart.rb +12 -18
- data/lib/axlsx/drawing/scatter_series.rb +28 -2
- data/lib/axlsx/drawing/ser_axis.rb +1 -1
- data/lib/axlsx/drawing/series.rb +1 -1
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +33 -0
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
- data/lib/axlsx/drawing/view_3D.rb +44 -31
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +44 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/color.rb +0 -1
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/font.rb +2 -1
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +143 -50
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/stylesheet/xf.rb +2 -0
- data/lib/axlsx/util/constants.rb +36 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -21
- data/lib/axlsx/util/validators.rb +122 -5
- 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/shared_strings_table.rb +12 -13
- data/lib/axlsx/workbook/workbook.rb +71 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +45 -36
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/col.rb +17 -1
- data/lib/axlsx/workbook/worksheet/color_scale.rb +76 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +97 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -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/icon_set.rb +83 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +113 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +69 -12
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- 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/sheet_protection.rb +224 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/table.rb +3 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +379 -233
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +31 -16
- data/test/benchmark.rb +30 -38
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_app.rb +31 -1
- data/test/doc_props/tc_core.rb +3 -1
- data/test/drawing/tc_axis.rb +46 -3
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +17 -13
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_cat_axis_data.rb +23 -13
- data/test/drawing/tc_chart.rb +29 -11
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +9 -11
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_pic.rb +22 -2
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +11 -13
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +6 -5
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +2 -3
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +100 -0
- data/test/profile.rb +2 -1
- data/test/rels/tc_relationship.rb +1 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_gradient_fill.rb +8 -0
- data/test/stylesheet/tc_pattern_fill.rb +7 -1
- data/test/stylesheet/tc_styles.rb +163 -3
- data/test/stylesheet/tc_table_style.rb +8 -0
- data/test/stylesheet/tc_table_style_element.rb +10 -1
- data/test/tc_helper.rb +1 -0
- data/test/tc_package.rb +93 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +95 -9
- 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 +3 -11
- data/test/workbook/worksheet/tc_cell.rb +52 -18
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +9 -0
- data/test/workbook/worksheet/tc_color_scale.rb +29 -0
- data/test/workbook/worksheet/tc_comment.rb +57 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +217 -0
- data/test/workbook/worksheet/tc_data_bar.rb +39 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +11 -5
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_setup.rb +138 -0
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +44 -13
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +147 -50
- metadata +216 -148
- data/examples/example.csv +0 -1000
- data/examples/example.rb~ +0 -112
- data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/named_axis_data.rb +0 -36
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/val_axis_data.rb +0 -27
- data/lib/axlsx/stylesheet/#num_fmt.rb# +0 -69
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/ms_off_crypto.rb +0 -189
- data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
- data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
- data/lib/axlsx/util/parser.rb~ +0 -6
- data/lib/axlsx/util/storage.rb~ +0 -0
- data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
- data/lib/schema/dc.xsd~ +0 -118
- data/lib/schema/dcterms.xsd~ +0 -331
- data/lib/schema/opc-coreProperties.xsd~ +0 -50
- data/test/#benchmark.txt# +0 -7
- data/test/#tc_helper.rb# +0 -3
- data/test/benchmark.rb~ +0 -0
- data/test/benchmark.txt +0 -6
- data/test/benchmark.txt~ +0 -6
- data/test/drawing/tc_val_axis_data.rb +0 -17
- data/test/example.csv +0 -1000
- data/test/example.xlsx +0 -0
- data/test/example_streamed.xlsx +0 -0
- data/test/tc_axlsx.rb~ +0 -0
- data/test/tc_helper.rb~ +0 -3
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
|
|
3
|
+
require 'tc_helper.rb'
|
|
4
|
+
|
|
5
|
+
class TestSheetView < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
#inverse defaults for booleans
|
|
8
|
+
@boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
|
|
9
|
+
:show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false,
|
|
10
|
+
:show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => true }
|
|
11
|
+
@symbol_options = { :view => :page_break_preview }
|
|
12
|
+
@nil_options = { :color_id => 2, :top_left_cell => 'A2' }
|
|
13
|
+
@int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 }
|
|
14
|
+
@int_100 = { :zoom_scale => 10 }
|
|
15
|
+
|
|
16
|
+
@integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100)
|
|
17
|
+
@string_options = { :top_left_cell => 'A2' }
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100)
|
|
21
|
+
|
|
22
|
+
@sv = Axlsx::SheetView.new(@options)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_initialize
|
|
26
|
+
sv = Axlsx::SheetView.new
|
|
27
|
+
|
|
28
|
+
@boolean_options.each do |key, value|
|
|
29
|
+
assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}")
|
|
30
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
@nil_options.each do |key, value|
|
|
34
|
+
assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil")
|
|
35
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@int_0.each do |key, value|
|
|
39
|
+
assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0")
|
|
40
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
@int_100.each do |key, value|
|
|
44
|
+
assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100")
|
|
45
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_boolean_attribute_validation
|
|
50
|
+
@boolean_options.each do |key, value|
|
|
51
|
+
assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') }
|
|
52
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, true) }
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_string_attribute_validation
|
|
57
|
+
@string_options.each do |key, value|
|
|
58
|
+
assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) }
|
|
59
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_symbol_attribute_validation
|
|
64
|
+
@symbol_options.each do |key, value|
|
|
65
|
+
assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") }
|
|
66
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_integer_attribute_validation
|
|
71
|
+
@integer_options.each do |key, value|
|
|
72
|
+
assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") }
|
|
73
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_color_id
|
|
78
|
+
assert_raise(ArgumentError) { @sv.color_id = "10" }
|
|
79
|
+
assert_nothing_raised { @sv.color_id = 2 }
|
|
80
|
+
assert_equal(@sv.color_id, 2)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_default_grid_color
|
|
84
|
+
assert_raise(ArgumentError) { @sv.default_grid_color = "foo" }
|
|
85
|
+
assert_nothing_raised { @sv.default_grid_color = false }
|
|
86
|
+
assert_equal(@sv.default_grid_color, false)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_right_to_left
|
|
90
|
+
assert_raise(ArgumentError) { @sv.right_to_left = "foo´" }
|
|
91
|
+
assert_nothing_raised { @sv.right_to_left = true }
|
|
92
|
+
assert_equal(@sv.right_to_left, true)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_show_formulas
|
|
96
|
+
assert_raise(ArgumentError) { @sv.show_formulas = 'foo' }
|
|
97
|
+
assert_nothing_raised { @sv.show_formulas = false }
|
|
98
|
+
assert_equal(@sv.show_formulas, false)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_show_grid_lines
|
|
102
|
+
assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" }
|
|
103
|
+
assert_nothing_raised { @sv.show_grid_lines = false }
|
|
104
|
+
assert_equal(@sv.show_grid_lines, false)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_show_outline_symbols
|
|
108
|
+
assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' }
|
|
109
|
+
assert_nothing_raised { @sv.show_outline_symbols = false }
|
|
110
|
+
assert_equal(@sv.show_outline_symbols, false)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_show_row_col_headers
|
|
114
|
+
assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" }
|
|
115
|
+
assert_nothing_raised { @sv.show_row_col_headers = false }
|
|
116
|
+
assert_equal(@sv.show_row_col_headers, false)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_show_ruler
|
|
120
|
+
assert_raise(ArgumentError) { @sv.show_ruler = 'foo' }
|
|
121
|
+
assert_nothing_raised { @sv.show_ruler = false }
|
|
122
|
+
assert_equal(@sv.show_ruler, false)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_show_white_space
|
|
126
|
+
assert_raise(ArgumentError) { @sv.show_white_space = 'foo' }
|
|
127
|
+
assert_nothing_raised { @sv.show_white_space = false }
|
|
128
|
+
assert_equal(@sv.show_white_space, false)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_show_zeros
|
|
132
|
+
assert_raise(ArgumentError) { @sv.show_zeros = "foo" }
|
|
133
|
+
assert_nothing_raised { @sv.show_zeros = false }
|
|
134
|
+
assert_equal(@sv.show_zeros, false)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_tab_selected
|
|
138
|
+
assert_raise(ArgumentError) { @sv.tab_selected = "foo" }
|
|
139
|
+
assert_nothing_raised { @sv.tab_selected = false }
|
|
140
|
+
assert_equal(@sv.tab_selected, false)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def test_top_left_cell
|
|
144
|
+
assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress }
|
|
145
|
+
assert_nothing_raised { @sv.top_left_cell = "A2" }
|
|
146
|
+
assert_equal(@sv.top_left_cell, "A2")
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_view
|
|
150
|
+
assert_raise(ArgumentError) { @sv.view = 'view' }
|
|
151
|
+
assert_nothing_raised { @sv.view = :page_break_preview }
|
|
152
|
+
assert_equal(@sv.view, :page_break_preview)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_window_protection
|
|
156
|
+
assert_raise(ArgumentError) { @sv.window_protection = "foo" }
|
|
157
|
+
assert_nothing_raised { @sv.window_protection = false }
|
|
158
|
+
assert_equal(@sv.window_protection, false)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_workbook_view_id
|
|
162
|
+
assert_raise(ArgumentError) { @sv.workbook_view_id = "1" }
|
|
163
|
+
assert_nothing_raised { @sv.workbook_view_id = 1 }
|
|
164
|
+
assert_equal(@sv.workbook_view_id, 1)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_zoom_scale
|
|
168
|
+
assert_raise(ArgumentError) { @sv.zoom_scale = "50" }
|
|
169
|
+
assert_nothing_raised { @sv.zoom_scale = 50 }
|
|
170
|
+
assert_equal(@sv.zoom_scale, 50)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_zoom_scale_normal
|
|
174
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" }
|
|
175
|
+
assert_nothing_raised { @sv.zoom_scale_normal = 50 }
|
|
176
|
+
assert_equal(@sv.zoom_scale_normal, 50)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def test_zoom_scale_page_layout_view
|
|
180
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" }
|
|
181
|
+
assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 }
|
|
182
|
+
assert_equal(@sv.zoom_scale_page_layout_view, 50)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_zoom_scale_sheet_layout_view
|
|
186
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" }
|
|
187
|
+
assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 }
|
|
188
|
+
assert_equal(@sv.zoom_scale_sheet_layout_view, 50)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_to_xml
|
|
192
|
+
p = Axlsx::Package.new
|
|
193
|
+
@ws = p.workbook.add_worksheet :name => "sheetview"
|
|
194
|
+
@ws.sheet_view do |vs|
|
|
195
|
+
vs.view = :page_break_preview
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
doc = Nokogiri::XML.parse(@ws.sheet_view.to_xml_string)
|
|
199
|
+
|
|
200
|
+
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false']").size)
|
|
201
|
+
|
|
202
|
+
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false']
|
|
203
|
+
[@rightToLeft='false'][@windowProtection='false'][@showZeros='true'][@showRuler='true']
|
|
204
|
+
[@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true']
|
|
205
|
+
[@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0']
|
|
206
|
+
[@zoomScaleNormal='0'][@view='page_break_preview']").size)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def test_add_selection
|
|
210
|
+
@sv.add_selection(:top_left, :active_cell => "A1")
|
|
211
|
+
assert_equal('A1', @sv.selections[:top_left].active_cell)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
@@ -14,6 +14,14 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
14
14
|
assert_equal(ws.pn, "worksheets/sheet2.xml")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def test_name_is_html_encoded
|
|
18
|
+
@ws.name = '<foo> & <bar>'
|
|
19
|
+
assert_equal(@ws.name, '<foo> & <bar>')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_name_exception_on_colon
|
|
23
|
+
assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
|
|
24
|
+
end
|
|
17
25
|
def test_page_margins
|
|
18
26
|
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
|
19
27
|
end
|
|
@@ -25,6 +33,28 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
25
33
|
end
|
|
26
34
|
end
|
|
27
35
|
|
|
36
|
+
def test_page_setup
|
|
37
|
+
assert(@ws.page_setup.is_a? Axlsx::PageSetup)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_page_setup_yield
|
|
41
|
+
@ws.page_setup do |ps|
|
|
42
|
+
assert(ps.is_a? Axlsx::PageSetup)
|
|
43
|
+
assert(@ws.page_setup == ps)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_print_options
|
|
48
|
+
assert(@ws.print_options.is_a? Axlsx::PrintOptions)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_print_options_yield
|
|
52
|
+
@ws.print_options do |po|
|
|
53
|
+
assert(po.is_a? Axlsx::PrintOptions)
|
|
54
|
+
assert(@ws.print_options == po)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
28
58
|
def test_no_autowidth
|
|
29
59
|
@ws.workbook.use_autowidth = false
|
|
30
60
|
@ws.add_row [1,2,3,4]
|
|
@@ -33,16 +63,22 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
33
63
|
|
|
34
64
|
def test_initialization_options
|
|
35
65
|
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
|
|
67
|
+
print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
|
|
68
|
+
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :selected => true, :show_gridlines => false)
|
|
69
|
+
page_margins.keys.each do |key|
|
|
70
|
+
assert_equal(page_margins[key], optioned.page_margins.send(key))
|
|
71
|
+
end
|
|
72
|
+
page_setup.keys.each do |key|
|
|
73
|
+
assert_equal(page_setup[key], optioned.page_setup.send(key))
|
|
74
|
+
end
|
|
75
|
+
print_options.keys.each do |key|
|
|
76
|
+
assert_equal(print_options[key], optioned.print_options.send(key))
|
|
77
|
+
end
|
|
43
78
|
assert_equal(optioned.name, 'bob')
|
|
44
79
|
assert_equal(optioned.selected, true)
|
|
45
80
|
assert_equal(optioned.show_gridlines, false)
|
|
81
|
+
|
|
46
82
|
end
|
|
47
83
|
|
|
48
84
|
|
|
@@ -77,7 +113,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
77
113
|
def test_dimension
|
|
78
114
|
@ws.add_row [1, 2, 3]
|
|
79
115
|
@ws.add_row [4, 5, 6]
|
|
80
|
-
assert_equal @ws.dimension, "A1:C2"
|
|
116
|
+
assert_equal @ws.dimension.sqref, "A1:C2"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_dimension_with_empty_row
|
|
120
|
+
@ws.add_row
|
|
121
|
+
assert_equal "A1:AA200", @ws.dimension.sqref
|
|
81
122
|
end
|
|
82
123
|
|
|
83
124
|
def test_referencing
|
|
@@ -107,7 +148,9 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
107
148
|
end
|
|
108
149
|
|
|
109
150
|
def test_drawing
|
|
110
|
-
assert @ws.drawing
|
|
151
|
+
assert @ws.drawing == nil
|
|
152
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
153
|
+
assert @ws.drawing.is_a?(Axlsx::Drawing)
|
|
111
154
|
end
|
|
112
155
|
|
|
113
156
|
def test_col_style
|
|
@@ -152,10 +195,16 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
152
195
|
end
|
|
153
196
|
assert_equal(@ws.rows[1].cells[0].style, 0)
|
|
154
197
|
assert_equal(@ws.rows[2].cells[1].style, 0)
|
|
198
|
+
@ws.row_style( 1..2, 1, :col_offset => 2)
|
|
199
|
+
@ws.rows[(1..2)].each do |r|
|
|
200
|
+
r.cells[(2..-1)].each do |c|
|
|
201
|
+
assert_equal(c.style, 1)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
155
204
|
end
|
|
156
205
|
|
|
157
206
|
def test_to_xml_string_fit_to_page
|
|
158
|
-
@ws.
|
|
207
|
+
@ws.page_setup.fit_to_width = 1
|
|
159
208
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
160
209
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
|
|
161
210
|
end
|
|
@@ -166,6 +215,11 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
166
215
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
|
|
167
216
|
end
|
|
168
217
|
|
|
218
|
+
def test_fit_to_page_assignation_does_nothing
|
|
219
|
+
@ws.fit_to_page = true
|
|
220
|
+
assert_equal(@ws.fit_to_page?, false)
|
|
221
|
+
end
|
|
222
|
+
|
|
169
223
|
def test_to_xml_string_selected
|
|
170
224
|
@ws.selected = true
|
|
171
225
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -178,13 +232,6 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
178
232
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
|
|
179
233
|
end
|
|
180
234
|
|
|
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
235
|
def test_to_xml_string_auto_fit_data
|
|
189
236
|
@ws.add_row [1, "two"]
|
|
190
237
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -207,8 +254,16 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
207
254
|
def test_to_xml_string_merge_cells
|
|
208
255
|
@ws.add_row [1, "two"]
|
|
209
256
|
@ws.merge_cells "A1:D1"
|
|
257
|
+
@ws.merge_cells "E1:F1"
|
|
210
258
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
211
259
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
|
|
260
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def test_to_xml_string_sheet_protection
|
|
264
|
+
@ws.sheet_protection.password = 'fish'
|
|
265
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
266
|
+
assert(doc.xpath('//xmlns:sheetProtection'))
|
|
212
267
|
end
|
|
213
268
|
|
|
214
269
|
def test_to_xml_string_page_margins
|
|
@@ -220,8 +275,26 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
220
275
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
|
|
221
276
|
end
|
|
222
277
|
|
|
278
|
+
def test_to_xml_string_page_setup
|
|
279
|
+
@ws.page_setup do |ps|
|
|
280
|
+
ps.paper_width = "210mm"
|
|
281
|
+
ps.scale = 80
|
|
282
|
+
end
|
|
283
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
284
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def test_to_xml_string_print_options
|
|
288
|
+
@ws.print_options do |po|
|
|
289
|
+
po.grid_lines = true
|
|
290
|
+
po.horizontal_centered = true
|
|
291
|
+
end
|
|
292
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
293
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
|
|
294
|
+
end
|
|
295
|
+
|
|
223
296
|
def test_to_xml_string_drawing
|
|
224
|
-
|
|
297
|
+
@ws.add_chart Axlsx::Pie3DChart
|
|
225
298
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
226
299
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
|
|
227
300
|
end
|
|
@@ -235,58 +308,64 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
235
308
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
|
|
236
309
|
end
|
|
237
310
|
|
|
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
311
|
def test_to_xml_string
|
|
245
312
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
246
313
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
247
|
-
|
|
248
|
-
schema.validate(doc).each do |error|
|
|
249
|
-
errors.push error
|
|
250
|
-
puts error.message
|
|
251
|
-
end
|
|
252
|
-
assert(errors.empty?, "error free validation")
|
|
314
|
+
assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
|
|
253
315
|
end
|
|
254
316
|
|
|
255
|
-
def
|
|
317
|
+
def test_styles
|
|
318
|
+
assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def test_to_xml_string_with_illegal_chars
|
|
322
|
+
nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
|
|
323
|
+
@ws.add_row [nasties]
|
|
324
|
+
assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
|
|
325
|
+
assert_equal(nil,@ws.to_xml_string.index("\v"))
|
|
326
|
+
end
|
|
327
|
+
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
328
|
+
# is generated in correct order.
|
|
329
|
+
def test_valid_with_optional_elements
|
|
256
330
|
@ws.page_margins.set :left => 9
|
|
331
|
+
@ws.page_setup.set :fit_to_width => 1
|
|
332
|
+
@ws.print_options.set :headings => true
|
|
333
|
+
@ws.auto_filter = "A1:C3"
|
|
334
|
+
@ws.merge_cells "A4:A5"
|
|
335
|
+
@ws.add_chart Axlsx::Pie3DChart
|
|
336
|
+
@ws.add_table "E1:F3"
|
|
257
337
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
258
338
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
259
|
-
|
|
260
|
-
schema.validate(doc).each do |error|
|
|
261
|
-
errors.push error
|
|
262
|
-
puts error.message
|
|
263
|
-
end
|
|
264
|
-
assert(errors.empty?, "error free validation")
|
|
265
|
-
|
|
339
|
+
assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
|
|
266
340
|
end
|
|
267
341
|
|
|
268
342
|
def test_relationships
|
|
343
|
+
@ws.add_row [1,2,3]
|
|
269
344
|
assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
|
|
270
345
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
271
346
|
assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
|
|
272
347
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
273
348
|
assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
|
|
349
|
+
c = @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
|
|
350
|
+
assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
|
|
351
|
+
c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
|
|
352
|
+
assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
|
|
274
353
|
end
|
|
275
354
|
|
|
276
355
|
|
|
277
356
|
def test_name_unique
|
|
278
|
-
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=>
|
|
357
|
+
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
|
|
279
358
|
end
|
|
280
359
|
|
|
281
360
|
def test_name_size
|
|
282
|
-
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join(
|
|
283
|
-
assert_nothing_raised { @ws.name = Array.new(31, "A").join(
|
|
361
|
+
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
|
|
362
|
+
assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
|
|
284
363
|
end
|
|
285
364
|
|
|
286
365
|
def test_set_fixed_width_column
|
|
287
366
|
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
|
288
367
|
assert(@ws.column_info.size == 3, "a data item for each column")
|
|
289
|
-
assert_equal(@ws.column_info[0].width,
|
|
368
|
+
assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
|
|
290
369
|
assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
|
|
291
370
|
end
|
|
292
371
|
|
|
@@ -299,28 +378,46 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
299
378
|
@ws.add_row ["chasing windmills", "penut"]
|
|
300
379
|
@ws.column_widths nil, 0.5
|
|
301
380
|
assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
|
|
302
|
-
assert_raise(ArgumentError, 'reject invalid columns') { @ws.column_widths 2, 7, nil }
|
|
303
381
|
assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
|
|
304
382
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
|
305
383
|
end
|
|
306
384
|
|
|
385
|
+
def test_protect_range
|
|
386
|
+
assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
|
|
387
|
+
assert_equal(0, @ws.send(:protected_ranges).size)
|
|
388
|
+
@ws.protect_range('A1:A3')
|
|
389
|
+
assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def test_protect_range_with_cells
|
|
393
|
+
@ws.add_row [1, 2, 3]
|
|
394
|
+
assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
|
|
395
|
+
assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
|
|
396
|
+
|
|
397
|
+
end
|
|
307
398
|
def test_merge_cells
|
|
308
|
-
assert(@ws.merged_cells.is_a?(Array))
|
|
309
|
-
assert_equal(@ws.merged_cells.size, 0)
|
|
310
399
|
@ws.add_row [1,2,3]
|
|
311
400
|
@ws.add_row [4,5,6]
|
|
312
401
|
@ws.add_row [7,8,9]
|
|
313
402
|
@ws.merge_cells "A1:A2"
|
|
314
403
|
@ws.merge_cells "B2:C3"
|
|
315
404
|
@ws.merge_cells @ws.rows.last.cells[(0..1)]
|
|
316
|
-
assert_equal(@ws.merged_cells.size, 3)
|
|
317
|
-
assert_equal(@ws.merged_cells.last, "A3:B3")
|
|
405
|
+
assert_equal(@ws.send(:merged_cells).size, 3)
|
|
406
|
+
assert_equal(@ws.send(:merged_cells).last, "A3:B3")
|
|
318
407
|
end
|
|
319
|
-
|
|
408
|
+
|
|
409
|
+
def test_merge_cells_sorts_correctly_by_row_when_given_array
|
|
410
|
+
10.times do |i|
|
|
411
|
+
@ws.add_row [i]
|
|
412
|
+
end
|
|
413
|
+
@ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
|
|
414
|
+
assert_equal "A9:A10", @ws.send(:merged_cells).first
|
|
415
|
+
end
|
|
416
|
+
|
|
320
417
|
def test_auto_filter
|
|
321
|
-
assert(@ws.auto_filter.nil?)
|
|
418
|
+
assert(@ws.auto_filter.range.nil?)
|
|
322
419
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
323
420
|
@ws.auto_filter = "A1:D9"
|
|
324
|
-
assert_equal(@ws.auto_filter, "A1:D9")
|
|
421
|
+
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
325
422
|
end
|
|
326
423
|
end
|