axlsx 1.1.3 → 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 +60 -0
- data/LICENSE +1 -1
- data/README.md +115 -415
- data/Rakefile +11 -3
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +299 -155
- 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/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/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 +92 -37
- 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 +2 -8
- 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/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/util/constants.rb +28 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -21
- data/lib/axlsx/util/validators.rb +81 -8
- 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 +65 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +35 -7
- data/lib/axlsx/workbook/worksheet/col.rb +17 -1
- 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_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- 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/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 +67 -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 +377 -255
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +30 -15
- 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 +38 -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/rels/tc_relationship.rb +1 -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 +3 -4
- 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 +30 -6
- data/test/workbook/worksheet/tc_col.rb +9 -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 +44 -0
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +265 -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 +36 -12
- 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 +138 -48
- metadata +164 -52
- data/examples/example.csv +0 -1000
- 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/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/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_val_axis_data.rb +0 -17
- 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
|
@@ -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)
|
|
@@ -213,6 +260,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
213
260
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
|
|
214
261
|
end
|
|
215
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'))
|
|
267
|
+
end
|
|
268
|
+
|
|
216
269
|
def test_to_xml_string_page_margins
|
|
217
270
|
@ws.page_margins do |pm|
|
|
218
271
|
pm.left = 9
|
|
@@ -222,8 +275,26 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
222
275
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
|
|
223
276
|
end
|
|
224
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
|
+
|
|
225
296
|
def test_to_xml_string_drawing
|
|
226
|
-
|
|
297
|
+
@ws.add_chart Axlsx::Pie3DChart
|
|
227
298
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
228
299
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
|
|
229
300
|
end
|
|
@@ -237,64 +308,64 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
237
308
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
|
|
238
309
|
end
|
|
239
310
|
|
|
240
|
-
def test_abs_auto_filter
|
|
241
|
-
@ws.add_row [1, "two", 3]
|
|
242
|
-
@ws.auto_filter = "A1:C1"
|
|
243
|
-
assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
|
|
244
|
-
end
|
|
245
|
-
|
|
246
311
|
def test_to_xml_string
|
|
247
312
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
248
313
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
249
|
-
|
|
250
|
-
schema.validate(doc).each do |error|
|
|
251
|
-
errors.push error
|
|
252
|
-
puts error.message
|
|
253
|
-
end
|
|
254
|
-
assert(errors.empty?, "error free validation")
|
|
314
|
+
assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
|
|
255
315
|
end
|
|
256
316
|
|
|
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
|
|
257
327
|
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
258
328
|
# is generated in correct order.
|
|
259
329
|
def test_valid_with_optional_elements
|
|
260
330
|
@ws.page_margins.set :left => 9
|
|
331
|
+
@ws.page_setup.set :fit_to_width => 1
|
|
332
|
+
@ws.print_options.set :headings => true
|
|
261
333
|
@ws.auto_filter = "A1:C3"
|
|
262
334
|
@ws.merge_cells "A4:A5"
|
|
263
335
|
@ws.add_chart Axlsx::Pie3DChart
|
|
264
336
|
@ws.add_table "E1:F3"
|
|
265
337
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
266
338
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
267
|
-
|
|
268
|
-
schema.validate(doc).each do |error|
|
|
269
|
-
errors.push error
|
|
270
|
-
puts error.message
|
|
271
|
-
end
|
|
272
|
-
assert(errors.empty?, "error free validation")
|
|
273
|
-
|
|
339
|
+
assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
|
|
274
340
|
end
|
|
275
341
|
|
|
276
342
|
def test_relationships
|
|
343
|
+
@ws.add_row [1,2,3]
|
|
277
344
|
assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
|
|
278
345
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
279
346
|
assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
|
|
280
347
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
281
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")
|
|
282
353
|
end
|
|
283
354
|
|
|
284
355
|
|
|
285
356
|
def test_name_unique
|
|
286
|
-
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) }
|
|
287
358
|
end
|
|
288
359
|
|
|
289
360
|
def test_name_size
|
|
290
|
-
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join(
|
|
291
|
-
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() }
|
|
292
363
|
end
|
|
293
364
|
|
|
294
365
|
def test_set_fixed_width_column
|
|
295
366
|
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
|
296
367
|
assert(@ws.column_info.size == 3, "a data item for each column")
|
|
297
|
-
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")
|
|
298
369
|
assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
|
|
299
370
|
end
|
|
300
371
|
|
|
@@ -311,23 +382,42 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
311
382
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
|
312
383
|
end
|
|
313
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
|
|
314
398
|
def test_merge_cells
|
|
315
|
-
assert(@ws.merged_cells.is_a?(Array))
|
|
316
|
-
assert_equal(@ws.merged_cells.size, 0)
|
|
317
399
|
@ws.add_row [1,2,3]
|
|
318
400
|
@ws.add_row [4,5,6]
|
|
319
401
|
@ws.add_row [7,8,9]
|
|
320
402
|
@ws.merge_cells "A1:A2"
|
|
321
403
|
@ws.merge_cells "B2:C3"
|
|
322
404
|
@ws.merge_cells @ws.rows.last.cells[(0..1)]
|
|
323
|
-
assert_equal(@ws.merged_cells.size, 3)
|
|
324
|
-
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")
|
|
325
407
|
end
|
|
326
|
-
|
|
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
|
+
|
|
327
417
|
def test_auto_filter
|
|
328
|
-
assert(@ws.auto_filter.nil?)
|
|
418
|
+
assert(@ws.auto_filter.range.nil?)
|
|
329
419
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
330
420
|
@ws.auto_filter = "A1:D9"
|
|
331
|
-
assert_equal(@ws.auto_filter, "A1:D9")
|
|
421
|
+
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
332
422
|
end
|
|
333
423
|
end
|