axlsx 1.1.6 → 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 +97 -46
- data/Rakefile +3 -2
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +18 -3
- data/examples/example.rb +118 -42
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +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/examples/sheet_view.rb +34 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +21 -12
- data/lib/axlsx/content_type/override.rb +22 -11
- data/lib/axlsx/doc_props/app.rb +36 -32
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +7 -6
- data/lib/axlsx/drawing/axis.rb +64 -25
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +1 -0
- data/lib/axlsx/drawing/cat_axis.rb +43 -39
- data/lib/axlsx/drawing/chart.rb +65 -54
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +7 -5
- data/lib/axlsx/drawing/graphic_frame.rb +2 -2
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/num_data.rb +2 -2
- data/lib/axlsx/drawing/num_data_source.rb +1 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +41 -9
- data/lib/axlsx/drawing/view_3D.rb +41 -31
- data/lib/axlsx/drawing/vml_drawing.rb +1 -1
- data/lib/axlsx/package.rb +20 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/util/constants.rb +4 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -8
- data/lib/axlsx/util/validators.rb +28 -4
- 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 +46 -17
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +28 -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_bar.rb +1 -1
- 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/page_setup.rb +10 -1
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -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 +1 -1
- 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_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +315 -291
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +24 -16
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_core.rb +1 -1
- data/test/drawing/tc_axis.rb +27 -2
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +1 -2
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_chart.rb +8 -6
- 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_num_data.rb +5 -1
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- 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/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/tc_package.rb +41 -4
- data/test/util/tc_validators.rb +68 -11
- 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_page_setup.rb +20 -3
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +2 -2
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +53 -41
- metadata +104 -97
- data/examples/chart_colors.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/doc/_index.html +0 -84
- data/examples/doc/class_list.html +0 -47
- data/examples/doc/css/common.css +0 -1
- data/examples/doc/css/full_list.css +0 -55
- data/examples/doc/css/style.css +0 -322
- data/examples/doc/file_list.html +0 -46
- data/examples/doc/frames.html +0 -13
- data/examples/doc/index.html +0 -84
- data/examples/doc/js/app.js +0 -205
- data/examples/doc/js/full_list.js +0 -173
- data/examples/doc/js/jquery.js +0 -16
- data/examples/doc/method_list.html +0 -46
- data/examples/doc/top-level-namespace.html +0 -95
- data/examples/examples_saved.xlsx +0 -0
- data/examples/fish.xlsx +0 -0
- data/examples/pareto.rb +0 -28
- data/examples/pareto.xlsx +0 -0
- data/examples/pie_chart.rb +0 -16
- data/examples/pie_chart.xlsx +0 -0
- data/examples/pie_chart_saved.xlsx +0 -0
- data/examples/sheet_protection.xlsx +0 -0
- data/examples/two_cell_anchor_image.xlsx +0 -0
- data/examples/~$pie_chart_saved.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
- data/lib/axlsx/drawing/data_source.rb~ +0 -51
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/num_data.rb~ +0 -51
- data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
- data/lib/axlsx/drawing/num_val.rb~ +0 -40
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/ref.rb~ +0 -41
- data/lib/axlsx/drawing/str_data.rb~ +0 -58
- data/lib/axlsx/drawing/str_val.rb~ +0 -35
- data/lib/axlsx/drawing/vml_drawing.rb~ +0 -6
- data/lib/axlsx/drawing/vml_shape.rb~ +0 -61
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/font_tables.rb~ +0 -0
- 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/cfvo.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
- data/lib/axlsx/workbook/worksheet/comment.rb~ +0 -91
- data/lib/axlsx/workbook/worksheet/comments.rb~ +0 -86
- data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
- 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/drawing/tc_data_source.rb~ +0 -30
- data/test/drawing/tc_num_data.rb~ +0 -35
- data/test/drawing/tc_num_val.rb~ +0 -29
- data/test/drawing/tc_str_data.rb~ +0 -30
- data/test/drawing/tc_str_val.rb~ +0 -26
- data/test/drawing/tc_vml_drawing.rb~ +0 -0
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
- data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
- data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
- data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
data/test/tc_package.rb
CHANGED
|
@@ -7,11 +7,48 @@ 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)
|
|
11
|
+
ws.protect_range('A1:C1')
|
|
12
|
+
ws.protect_range(ws.rows.last.cells)
|
|
10
13
|
ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
|
|
11
14
|
ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
|
|
15
|
+
ws.sheet_view do |vs|
|
|
16
|
+
vs.pane do |p|
|
|
17
|
+
p.active_pane = :top_right
|
|
18
|
+
p.state = :split
|
|
19
|
+
p.x_split = 11080
|
|
20
|
+
p.y_split = 5000
|
|
21
|
+
p.top_left_cell = 'C44'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
|
|
25
|
+
vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
|
|
26
|
+
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
27
|
+
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
|
|
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
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
|
|
38
|
+
chart.valAxis.title = 'bob'
|
|
39
|
+
chart.d_lbls.show_val = true
|
|
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
|
|
12
51
|
|
|
13
|
-
chart = ws.add_chart Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]
|
|
14
|
-
chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
|
|
15
52
|
@fname = 'axlsx_test_serialization.xlsx'
|
|
16
53
|
img = File.expand_path('../../examples/image1.jpeg', __FILE__)
|
|
17
54
|
ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
|
@@ -100,7 +137,7 @@ class TestPackage < Test::Unit::TestCase
|
|
|
100
137
|
|
|
101
138
|
|
|
102
139
|
#no mystery parts
|
|
103
|
-
assert_equal(p.size,
|
|
140
|
+
assert_equal(p.size, 21)
|
|
104
141
|
|
|
105
142
|
end
|
|
106
143
|
|
|
@@ -143,7 +180,7 @@ class TestPackage < Test::Unit::TestCase
|
|
|
143
180
|
# in testing.
|
|
144
181
|
assert(stream.size > 80000)
|
|
145
182
|
end
|
|
146
|
-
|
|
183
|
+
|
|
147
184
|
def test_encrypt
|
|
148
185
|
# this is no where near close to ready yet
|
|
149
186
|
assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
|
data/test/util/tc_validators.rb
CHANGED
|
@@ -83,15 +83,25 @@ class TestValidators < Test::Unit::TestCase
|
|
|
83
83
|
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
|
|
84
84
|
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
|
|
85
85
|
|
|
86
|
-
#
|
|
87
|
-
assert_nothing_raised { Axlsx.
|
|
88
|
-
assert_nothing_raised { Axlsx.
|
|
89
|
-
assert_nothing_raised { Axlsx.
|
|
90
|
-
assert_raise(ArgumentError) { Axlsx.
|
|
91
|
-
assert_raise(ArgumentError) { Axlsx.
|
|
92
|
-
assert_raise(ArgumentError) { Axlsx.
|
|
93
|
-
assert_raise(ArgumentError) { Axlsx.
|
|
94
|
-
|
|
86
|
+
#scale_10_400
|
|
87
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
|
|
88
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
|
|
89
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
|
|
90
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
|
|
91
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
|
|
92
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
|
|
93
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
|
|
94
|
+
|
|
95
|
+
#scale_0_10_400
|
|
96
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
|
|
97
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
|
|
98
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
|
|
99
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
|
|
100
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
|
|
101
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
|
|
102
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
|
|
103
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
|
|
104
|
+
|
|
95
105
|
#page_orientation
|
|
96
106
|
assert_nothing_raised { Axlsx.validate_page_orientation :default }
|
|
97
107
|
assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
|
|
@@ -99,6 +109,53 @@ class TestValidators < Test::Unit::TestCase
|
|
|
99
109
|
assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
|
|
100
110
|
assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
|
|
101
111
|
assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
|
|
112
|
+
|
|
113
|
+
#data_validation_error_style
|
|
114
|
+
[:information, :stop, :warning].each do |sym|
|
|
115
|
+
assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
|
|
116
|
+
end
|
|
117
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
118
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
|
|
119
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
120
|
+
|
|
121
|
+
#data_validation_operator
|
|
122
|
+
[:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
|
|
123
|
+
assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
|
|
124
|
+
end
|
|
125
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
126
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
|
|
127
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
128
|
+
|
|
129
|
+
#data_validation_type
|
|
130
|
+
[:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
|
|
131
|
+
assert_nothing_raised { Axlsx.validate_data_validation_type sym }
|
|
132
|
+
end
|
|
133
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
134
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
|
|
135
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
136
|
+
|
|
137
|
+
#sheet_view_type
|
|
138
|
+
[:normal, :page_break_preview, :page_layout].each do |sym|
|
|
139
|
+
assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
|
|
140
|
+
end
|
|
141
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
142
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
|
|
143
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
144
|
+
|
|
145
|
+
#active_pane_type
|
|
146
|
+
[:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
|
|
147
|
+
assert_nothing_raised { Axlsx.validate_pane_type sym }
|
|
148
|
+
end
|
|
149
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
|
|
150
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
|
|
151
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
|
|
152
|
+
|
|
153
|
+
#split_state_type
|
|
154
|
+
[:frozen, :frozen_split, :split].each do |sym|
|
|
155
|
+
assert_nothing_raised { Axlsx.validate_split_state_type sym }
|
|
156
|
+
end
|
|
157
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
|
|
158
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
|
|
159
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
|
|
102
160
|
end
|
|
103
|
-
end
|
|
104
|
-
|
|
161
|
+
end
|
|
@@ -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
|
|
@@ -54,6 +54,23 @@ class TestPageSetup < Test::Unit::TestCase
|
|
|
54
54
|
assert_equal(nil, @ps.scale)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
def test_default_fit_to_page?
|
|
58
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
59
|
+
assert(@ps.fit_to_page? == false)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_with_height_fit_to_page?
|
|
63
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
64
|
+
@ps.set(:fit_to_height => 1)
|
|
65
|
+
assert(@ps.fit_to_page?)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_with_width_fit_to_page?
|
|
69
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
70
|
+
@ps.set(:fit_to_width => 1)
|
|
71
|
+
assert(@ps.fit_to_page?)
|
|
72
|
+
end
|
|
73
|
+
|
|
57
74
|
def test_to_xml_all_values
|
|
58
75
|
@ps.set(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
|
|
59
76
|
doc = Nokogiri::XML.parse(@ps.to_xml_string)
|
|
@@ -106,7 +123,7 @@ class TestPageSetup < Test::Unit::TestCase
|
|
|
106
123
|
assert_nothing_raised { @ps.scale = 99 }
|
|
107
124
|
assert_equal(99, @ps.scale)
|
|
108
125
|
end
|
|
109
|
-
|
|
126
|
+
|
|
110
127
|
def test_fit_to
|
|
111
128
|
fits = @ps.fit_to(:width => 1)
|
|
112
129
|
assert_equal([1, 9999], fits)
|
|
@@ -115,7 +132,7 @@ class TestPageSetup < Test::Unit::TestCase
|
|
|
115
132
|
fits = @ps.fit_to :height => 7, :width => 2
|
|
116
133
|
assert_equal(fits, [2, 7])
|
|
117
134
|
assert_raise(ArgumentError) { puts @ps.fit_to(:width => true)}
|
|
118
|
-
|
|
119
|
-
|
|
135
|
+
|
|
136
|
+
|
|
120
137
|
end
|
|
121
138
|
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
|
|
3
|
+
require 'tc_helper.rb'
|
|
4
|
+
|
|
5
|
+
class TestPane < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
#inverse defaults for booleans
|
|
8
|
+
@nil_options = { :active_pane => :bottom_left, :state => :frozen, :top_left_cell => 'A2' }
|
|
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
|
+
|
|
17
|
+
@pane = Axlsx::Pane.new(@options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize
|
|
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
|
+
|
|
55
|
+
def test_active_pane
|
|
56
|
+
assert_raise(ArgumentError) { @pane.active_pane = "10" }
|
|
57
|
+
assert_nothing_raised { @pane.active_pane = :top_left }
|
|
58
|
+
assert_equal(@pane.active_pane, :top_left)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_state
|
|
62
|
+
assert_raise(ArgumentError) { @pane.state = "foo" }
|
|
63
|
+
assert_nothing_raised { @pane.state = :frozen_split }
|
|
64
|
+
assert_equal(@pane.state, :frozen_split)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_x_split
|
|
68
|
+
assert_raise(ArgumentError) { @pane.x_split = "foo´" }
|
|
69
|
+
assert_nothing_raised { @pane.x_split = 200 }
|
|
70
|
+
assert_equal(@pane.x_split, 200)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_y_split
|
|
74
|
+
assert_raise(ArgumentError) { @pane.y_split = 'foo' }
|
|
75
|
+
assert_nothing_raised { @pane.y_split = 300 }
|
|
76
|
+
assert_equal(@pane.y_split, 300)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_top_left_cell
|
|
80
|
+
assert_raise(ArgumentError) { @pane.top_left_cell = :cell }
|
|
81
|
+
assert_nothing_raised { @pane.top_left_cell = "A2" }
|
|
82
|
+
assert_equal(@pane.top_left_cell, "A2")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_to_xml
|
|
86
|
+
doc = Nokogiri::XML.parse(@pane.to_xml_string)
|
|
87
|
+
assert_equal(1, doc.xpath("//pane[@ySplit=2][@xSplit='2'][@topLeftCell='A2'][@state='frozen'][@activePane='bottomLeft']").size)
|
|
88
|
+
end
|
|
89
|
+
def test_to_xml_frozen
|
|
90
|
+
pane = Axlsx::Pane.new :state => :frozen, :y_split => 2
|
|
91
|
+
doc = Nokogiri::XML(pane.to_xml_string)
|
|
92
|
+
assert_equal(1, doc.xpath("//pane[@topLeftCell='A3']").size)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
class TestProtectedRange < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@p = Axlsx::Package.new
|
|
6
|
+
@ws = @p.workbook.add_worksheet { |sheet| sheet.add_row [1,2,3,4,5,6,7,8,9] }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_initialize_options
|
|
10
|
+
assert_nothing_raised {Axlsx::ProtectedRange.new(:sqref => 'A1:B1', :name => "only bob")}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_range
|
|
14
|
+
r = @ws.protect_range('A1:B1')
|
|
15
|
+
assert_equal('A1:B1', r.sqref)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -38,8 +38,8 @@ class TestRow < Test::Unit::TestCase
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def test_add_cell_autowidth_info
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
cell = @row.add_cell("this is the cell of cells")
|
|
42
|
+
width = cell.send(:autowidth)
|
|
43
43
|
assert_equal(@ws.column_info.last.width, width)
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
|
|
4
|
+
class TestSelection < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@nil_options = { :active_cell => 'A2', :active_cell_id => 1, :pane => :top_left, :sqref => 'A2' }
|
|
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
|
+
|
|
13
|
+
@selection = Axlsx::Selection.new(@options)
|
|
14
|
+
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
|
+
|
|
46
|
+
def test_active_cell
|
|
47
|
+
assert_raise(ArgumentError) { @selection.active_cell = :active_cell }
|
|
48
|
+
assert_nothing_raised { @selection.active_cell = "F5" }
|
|
49
|
+
assert_equal(@selection.active_cell, "F5")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_active_cell_id
|
|
53
|
+
assert_raise(ArgumentError) { @selection.active_cell_id = "foo" }
|
|
54
|
+
assert_nothing_raised { @selection.active_cell_id = 11 }
|
|
55
|
+
assert_equal(@selection.active_cell_id, 11)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_pane
|
|
59
|
+
assert_raise(ArgumentError) { @selection.pane = "foo´" }
|
|
60
|
+
assert_nothing_raised { @selection.pane = :bottom_right }
|
|
61
|
+
assert_equal(@selection.pane, :bottom_right)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_sqref
|
|
65
|
+
assert_raise(ArgumentError) { @selection.sqref = :sqref }
|
|
66
|
+
assert_nothing_raised { @selection.sqref = "G32" }
|
|
67
|
+
assert_equal(@selection.sqref, "G32")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_to_xml
|
|
71
|
+
p = Axlsx::Package.new
|
|
72
|
+
@ws = p.workbook.add_worksheet :name => "sheetview"
|
|
73
|
+
@ws.sheet_view do |vs|
|
|
74
|
+
vs.add_selection(:top_left, { :active_cell => 'B2', :sqref => 'B2' })
|
|
75
|
+
vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
|
|
76
|
+
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
77
|
+
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
81
|
+
|
|
82
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']").size)
|
|
83
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']")
|
|
84
|
+
|
|
85
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']").size)
|
|
86
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']")
|
|
87
|
+
|
|
88
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']").size)
|
|
89
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']")
|
|
90
|
+
|
|
91
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']").size)
|
|
92
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']")
|
|
93
|
+
end
|
|
94
|
+
end
|