caxlsx 3.0.1 → 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +112 -30
- data/README.md +73 -180
- data/examples/colored_links.rb +38 -52
- data/examples/example.rb +16 -1
- data/lib/axlsx.rb +0 -2
- data/lib/axlsx/drawing/bar_chart.rb +3 -3
- data/lib/axlsx/drawing/bar_series.rb +3 -5
- data/lib/axlsx/drawing/d_lbls.rb +1 -1
- data/lib/axlsx/drawing/series_title.rb +3 -1
- data/lib/axlsx/drawing/title.rb +3 -2
- data/lib/axlsx/package.rb +3 -11
- data/lib/axlsx/stylesheet/font.rb +10 -2
- data/lib/axlsx/util/validators.rb +1 -1
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/workbook.rb +0 -9
- data/lib/axlsx/workbook/worksheet/cell.rb +23 -2
- data/lib/axlsx/workbook/worksheet/col.rb +8 -4
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +1 -1
- data/lib/axlsx/workbook/worksheet/row.rb +2 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +11 -4
- data/test/drawing/tc_series_title.rb +21 -0
- data/test/drawing/tc_title.rb +16 -0
- data/test/stylesheet/tc_font.rb +14 -2
- data/test/stylesheet/tc_styles.rb +27 -1
- data/test/tc_axlsx.rb +6 -0
- data/test/workbook/worksheet/tc_cell.rb +30 -2
- data/test/workbook/worksheet/tc_col.rb +16 -1
- data/test/workbook/worksheet/tc_rich_text_run.rb +3 -2
- data/test/workbook/worksheet/tc_row.rb +17 -0
- data/test/workbook/worksheet/tc_worksheet.rb +11 -0
- metadata +95 -95
- data/lib/axlsx/util/parser.rb +0 -44
@@ -215,7 +215,7 @@ module Axlsx
|
|
215
215
|
# - scaling is not linear as font sizes increase
|
216
216
|
def string_width(string, font_size)
|
217
217
|
font_scale = font_size / 10.0
|
218
|
-
string.
|
218
|
+
string.size * font_scale
|
219
219
|
end
|
220
220
|
|
221
221
|
# we scale the font size if bold style is applied to either the style font or
|
@@ -147,10 +147,11 @@ module Axlsx
|
|
147
147
|
# @option options [Array, Integer] style
|
148
148
|
def array_to_cells(values, options={})
|
149
149
|
DataTypeValidator.validate :array_to_cells, Array, values
|
150
|
-
types, style, formula_values = options.delete(:types), options.delete(:style), options.delete(:formula_values)
|
150
|
+
types, style, formula_values, escape_formulas = options.delete(:types), options.delete(:style), options.delete(:formula_values), options.delete(:escape_formulas)
|
151
151
|
values.each_with_index do |value, index|
|
152
152
|
options[:style] = style.is_a?(Array) ? style[index] : style if style
|
153
153
|
options[:type] = types.is_a?(Array) ? types[index] : types if types
|
154
|
+
options[:escape_formulas] = escape_formulas.is_a?(Array) ? escape_formulas[index] : escape_formulas if escape_formulas
|
154
155
|
options[:formula_value] = formula_values[index] if formula_values.is_a?(Array)
|
155
156
|
|
156
157
|
self[index] = Cell.new(self, value, options)
|
@@ -5,9 +5,6 @@ module Axlsx
|
|
5
5
|
class Worksheet
|
6
6
|
include Axlsx::OptionsParser
|
7
7
|
include Axlsx::SerializedAttributes
|
8
|
-
# definition of characters which are less than the maximum width of 0-9 in the default font for use in String#count.
|
9
|
-
# This is used for autowidth calculations
|
10
|
-
THIN_CHARS = '^.acfijklrstxzFIJL()-'.freeze
|
11
8
|
|
12
9
|
# Creates a new worksheet.
|
13
10
|
# @note the recommended way to manage worksheets is Workbook#add_worksheet
|
@@ -390,6 +387,12 @@ module Axlsx
|
|
390
387
|
# @example - use << alias
|
391
388
|
# ws << [3, 4, 5], :types => [nil, :float]
|
392
389
|
#
|
390
|
+
# @example - specify whether a row should escape formulas or not
|
391
|
+
# ws.add_row ['=IF(2+2=4,4,5)', 2, 3], :escape_formulas=>true
|
392
|
+
#
|
393
|
+
# @example - specify whether a certain cells in a row should escape formulas or not
|
394
|
+
# ws.add_row ['=IF(2+2=4,4,5)', '=IF(13+13=4,4,5)'], :escape_formulas=>[true, false]
|
395
|
+
#
|
393
396
|
# @see Worksheet#column_widths
|
394
397
|
# @return [Row]
|
395
398
|
# @option options [Array] values
|
@@ -397,6 +400,10 @@ module Axlsx
|
|
397
400
|
# @option options [Array, Integer] style
|
398
401
|
# @option options [Array] widths each member of the widths array will affect how auto_fit behavies.
|
399
402
|
# @option options [Float] height the row's height (in points)
|
403
|
+
# @option options [Array, Boolean] escape_formulas - Whether to treat a value starting with an equal
|
404
|
+
# sign as formula (default) or as simple string.
|
405
|
+
# Allowing user generated data to be interpreted as formulas can be dangerous
|
406
|
+
# (see https://www.owasp.org/index.php/CSV_Injection for details).
|
400
407
|
def add_row(values=[], options={})
|
401
408
|
row = Row.new(self, values, options)
|
402
409
|
update_column_info row, options.delete(:widths)
|
@@ -656,7 +663,7 @@ module Axlsx
|
|
656
663
|
|
657
664
|
def validate_sheet_name(name)
|
658
665
|
DataTypeValidator.validate :worksheet_name, String, name
|
659
|
-
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.
|
666
|
+
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.bytesize > 31
|
660
667
|
raise ArgumentError, (ERR_SHEET_NAME_CHARACTER_FORBIDDEN % name) if '[]*/\?:'.chars.any? { |char| name.include? char }
|
661
668
|
name = Axlsx::coder.encode(name)
|
662
669
|
sheet_names = @workbook.worksheets.reject { |s| s == self }.map { |s| s.name }
|
@@ -30,4 +30,25 @@ class TestSeriesTitle < Test::Unit::TestCase
|
|
30
30
|
assert(@title.text == "one")
|
31
31
|
end
|
32
32
|
|
33
|
+
def test_to_xml_string_for_special_characters
|
34
|
+
@chart.add_series(title: @title, data: [3, 7], labels: ['A', 'B'])
|
35
|
+
|
36
|
+
@title.text = "&><'\""
|
37
|
+
|
38
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
39
|
+
errors = doc.errors
|
40
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_to_xml_string_for_special_characters_in_cell
|
44
|
+
@chart.add_series(title: @title, data: [3, 7], labels: ['A', 'B'])
|
45
|
+
|
46
|
+
cell = @row.cells.first
|
47
|
+
cell.value = "&><'\""
|
48
|
+
@title.cell = cell
|
49
|
+
|
50
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
51
|
+
errors = doc.errors
|
52
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
53
|
+
end
|
33
54
|
end
|
data/test/drawing/tc_title.rb
CHANGED
@@ -51,4 +51,20 @@ class TestTitle < Test::Unit::TestCase
|
|
51
51
|
assert_equal(1, doc.xpath('//c:v[text()="one"]').size)
|
52
52
|
end
|
53
53
|
|
54
|
+
def test_to_xml_string_for_special_characters
|
55
|
+
@chart.title.text = "&><'\""
|
56
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
57
|
+
errors = doc.errors
|
58
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_to_xml_string_for_special_characters_in_cell
|
62
|
+
cell = @row.cells.first
|
63
|
+
cell.value = "&><'\""
|
64
|
+
|
65
|
+
@chart.title.cell = cell
|
66
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
67
|
+
errors = doc.errors
|
68
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
69
|
+
end
|
54
70
|
end
|
data/test/stylesheet/tc_font.rb
CHANGED
@@ -62,11 +62,23 @@ class TestFont < Test::Unit::TestCase
|
|
62
62
|
assert_equal(@item.i, true)
|
63
63
|
end
|
64
64
|
|
65
|
-
# def u=(v) Axlsx::
|
65
|
+
# def u=(v) Axlsx::validate_cell_u v; @u = v end
|
66
66
|
def test_u
|
67
67
|
assert_raise(ArgumentError) { @item.u = -7 }
|
68
|
+
assert_nothing_raised { @item.u = :single }
|
69
|
+
assert_equal(@item.u, :single)
|
70
|
+
doc = Nokogiri::XML(@item.to_xml_string)
|
71
|
+
assert(doc.xpath('//u[@val="single"]'))
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_u_backward_compatibility
|
75
|
+
# backward compatibility for true
|
68
76
|
assert_nothing_raised { @item.u = true }
|
69
|
-
assert_equal(@item.u,
|
77
|
+
assert_equal(@item.u, :single)
|
78
|
+
|
79
|
+
# backward compatibility for false
|
80
|
+
assert_nothing_raised { @item.u = false }
|
81
|
+
assert_equal(@item.u, :none)
|
70
82
|
end
|
71
83
|
|
72
84
|
# def strike=(v) Axlsx::validate_boolean v; @strike = v end
|
@@ -124,7 +124,7 @@ class TestStyles < Test::Unit::TestCase
|
|
124
124
|
:sz => 20,
|
125
125
|
:b => 1,
|
126
126
|
:i => 1,
|
127
|
-
:u =>
|
127
|
+
:u => :single,
|
128
128
|
:strike => 1,
|
129
129
|
:outline => 1,
|
130
130
|
:shadow => 1,
|
@@ -232,4 +232,30 @@ class TestStyles < Test::Unit::TestCase
|
|
232
232
|
style = @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :alignment=>{:horizontal=>:left}, :border=>{:style => :thin, :color => "FFFF0000"}, :hidden=>true, :locked=>true, :type => :dxf
|
233
233
|
assert_equal(1, style, "returns the second dxfId")
|
234
234
|
end
|
235
|
+
|
236
|
+
def test_valid_document_with_font_options
|
237
|
+
font_options = {
|
238
|
+
:fg_color => "FF050505",
|
239
|
+
:sz => 20,
|
240
|
+
:b => 1,
|
241
|
+
:i => 1,
|
242
|
+
:u => :single,
|
243
|
+
:strike => 1,
|
244
|
+
:outline => 1,
|
245
|
+
:shadow => 1,
|
246
|
+
:charset => 9,
|
247
|
+
:family => 1,
|
248
|
+
:font_name => "woot font"
|
249
|
+
}
|
250
|
+
@styles.add_style font_options
|
251
|
+
|
252
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
253
|
+
doc = Nokogiri::XML(@styles.to_xml_string)
|
254
|
+
errors = []
|
255
|
+
schema.validate(doc).each do |error|
|
256
|
+
errors.push error
|
257
|
+
puts error.message
|
258
|
+
end
|
259
|
+
assert(errors.size == 0)
|
260
|
+
end
|
235
261
|
end
|
data/test/tc_axlsx.rb
CHANGED
@@ -24,8 +24,14 @@ class TestAxlsx < Test::Unit::TestCase
|
|
24
24
|
|
25
25
|
|
26
26
|
def test_trust_input_can_be_set_to_true
|
27
|
+
# Class variables like this are not reset between test runs, so we have
|
28
|
+
# to save and restore the original value manually.
|
29
|
+
old = Axlsx.trust_input
|
30
|
+
|
27
31
|
Axlsx.trust_input = true
|
28
32
|
assert_equal true, Axlsx.trust_input
|
33
|
+
|
34
|
+
Axlsx.trust_input = old
|
29
35
|
end
|
30
36
|
def test_cell_range_relative
|
31
37
|
p = Axlsx::Package.new
|
@@ -8,7 +8,7 @@ class TestCell < Test::Unit::TestCase
|
|
8
8
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
9
9
|
p.workbook.styles.add_style :sz=>20
|
10
10
|
@row = @ws.add_row
|
11
|
-
@c = @row.add_cell 1, :type=>:float, :style=>1
|
11
|
+
@c = @row.add_cell 1, :type=>:float, :style=>1, :escape_formulas=>true
|
12
12
|
data = (0..26).map { |index| index }
|
13
13
|
@ws.add_row data
|
14
14
|
@cAA = @ws["AA2"]
|
@@ -19,6 +19,7 @@ class TestCell < Test::Unit::TestCase
|
|
19
19
|
assert_equal(@c.type, :float, "type option is applied")
|
20
20
|
assert_equal(@c.style, 1, "style option is applied")
|
21
21
|
assert_equal(@c.value, 1.0, "type option is applied and value is casted")
|
22
|
+
assert_equal(@c.escape_formulas, true, "escape formulas option is applied")
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_style_date_data
|
@@ -60,7 +61,7 @@ class TestCell < Test::Unit::TestCase
|
|
60
61
|
def test_autowidth
|
61
62
|
style = @c.row.worksheet.workbook.styles.add_style({:alignment => {:horizontal => :center, :vertical => :center, :wrap_text => true}} )
|
62
63
|
@c.style = style
|
63
|
-
|
64
|
+
assert_in_delta(6.6, @c.autowidth, 0.01)
|
64
65
|
end
|
65
66
|
|
66
67
|
def test_time
|
@@ -321,6 +322,33 @@ class TestCell < Test::Unit::TestCase
|
|
321
322
|
assert(doc.xpath("//f[text()='IF(2+2=4,4,5)']").any?)
|
322
323
|
end
|
323
324
|
|
325
|
+
def test_to_xml_string_formula_escaped
|
326
|
+
p = Axlsx::Package.new
|
327
|
+
ws = p.workbook.add_worksheet do |sheet|
|
328
|
+
sheet.add_row ["=IF(2+2=4,4,5)"], escape_formulas: true
|
329
|
+
end
|
330
|
+
doc = Nokogiri::XML(ws.to_xml_string)
|
331
|
+
doc.remove_namespaces!
|
332
|
+
assert(doc.xpath("//t[text()='=IF(2+2=4,4,5)']").any?)
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_to_xml_string_formula_escape_array_parameter
|
336
|
+
p = Axlsx::Package.new
|
337
|
+
ws = p.workbook.add_worksheet do |sheet|
|
338
|
+
sheet.add_row [
|
339
|
+
"=IF(2+2=4,4,5)",
|
340
|
+
"=IF(13+13=4,4,5)",
|
341
|
+
"=IF(99+99=4,4,5)"
|
342
|
+
], escape_formulas: [true, false, true]
|
343
|
+
end
|
344
|
+
doc = Nokogiri::XML(ws.to_xml_string)
|
345
|
+
doc.remove_namespaces!
|
346
|
+
|
347
|
+
assert(doc.xpath("//t[text()='=IF(2+2=4,4,5)']").any?)
|
348
|
+
assert(doc.xpath("//f[text()='IF(13+13=4,4,5)']").any?)
|
349
|
+
assert(doc.xpath("//t[text()='=IF(99+99=4,4,5)']").any?)
|
350
|
+
end
|
351
|
+
|
324
352
|
def test_to_xml_string_array_formula
|
325
353
|
p = Axlsx::Package.new
|
326
354
|
ws = p.workbook.add_worksheet do |sheet|
|
@@ -7,7 +7,7 @@ class TestCol < Test::Unit::TestCase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_initialize
|
10
|
-
options = { :width => 12, :collapsed => true, :hidden => true, :outline_level => 1, :phonetic => true, :style => 1}
|
10
|
+
options = { :width => 12, :collapsed => true, :hidden => true, :outline_level => 1, :phonetic => true, :style => 1}
|
11
11
|
|
12
12
|
col = Axlsx::Col.new 0, 0, options
|
13
13
|
options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
|
@@ -39,6 +39,21 @@ class TestCol < Test::Unit::TestCase
|
|
39
39
|
assert_equal(@col.customWidth, true, 'customWidth is true when width is set')
|
40
40
|
end
|
41
41
|
|
42
|
+
def test_widthUnderLimit
|
43
|
+
@col.width = 3
|
44
|
+
assert_equal(@col.width, 3, 'width is set to exact value')
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_widthOverLimit
|
48
|
+
@col.width = 31337
|
49
|
+
assert_equal(@col.width, 255, 'width is set to maximum allowed value')
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_widthSetToNil
|
53
|
+
@col.width = nil
|
54
|
+
assert_equal(@col.width, nil, 'width is set to unspecified value')
|
55
|
+
end
|
56
|
+
|
42
57
|
def test_hidden
|
43
58
|
assert_equal(@col.hidden, nil)
|
44
59
|
assert_raise(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = 'bob' }
|
@@ -148,8 +148,9 @@ class RichTextRun < Test::Unit::TestCase
|
|
148
148
|
@ws.add_row [rt], :style => wrap
|
149
149
|
ar = [0]
|
150
150
|
awtr.autowidth(ar)
|
151
|
-
assert_equal(ar.length
|
152
|
-
assert_equal(
|
151
|
+
assert_equal(2, ar.length)
|
152
|
+
assert_equal(13.2, ar[0])
|
153
|
+
assert_equal(0, ar[1])
|
153
154
|
end
|
154
155
|
|
155
156
|
def test_to_xml
|
@@ -60,6 +60,23 @@ class TestRow < Test::Unit::TestCase
|
|
60
60
|
|
61
61
|
end
|
62
62
|
|
63
|
+
def test_array_to_cells_with_escape_formulas
|
64
|
+
row = ['=HYPERLINK("http://www.example.com", "CSV Payload")', '=Bar']
|
65
|
+
@ws.add_row row, escape_formulas: true
|
66
|
+
|
67
|
+
assert_equal @ws.rows.last.cells[0].escape_formulas, true
|
68
|
+
assert_equal @ws.rows.last.cells[1].escape_formulas, true
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_array_to_cells_with_escape_formulas_as_an_array
|
72
|
+
row = ['=HYPERLINK("http://www.example.com", "CSV Payload")', '+Foo', '-Bar']
|
73
|
+
@ws.add_row row, escape_formulas: [true, false, true]
|
74
|
+
|
75
|
+
assert_equal @ws.rows.last.cells.first.escape_formulas, true
|
76
|
+
assert_equal @ws.rows.last.cells[1].escape_formulas, false
|
77
|
+
assert_equal @ws.rows.last.cells[2].escape_formulas, true
|
78
|
+
end
|
79
|
+
|
63
80
|
def test_custom_height
|
64
81
|
@row.height = 20
|
65
82
|
assert(@row.custom_height)
|
@@ -29,6 +29,17 @@ class TestWorksheet < Test::Unit::TestCase
|
|
29
29
|
assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
|
30
30
|
end
|
31
31
|
|
32
|
+
def test_exception_if_name_too_long
|
33
|
+
assert_nothing_raised { @ws.name = 'x' * 31 }
|
34
|
+
assert_raises(ArgumentError) { @ws.name = 'x' * 32 }
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_exception_if_name_too_long_because_of_multibyte_characters
|
38
|
+
three_byte_character = "✔"
|
39
|
+
assert_nothing_raised { @ws.name = 'x' * 28 + three_byte_character}
|
40
|
+
assert_raises(ArgumentError) { @ws.name = 'x' * 29 + three_byte_character }
|
41
|
+
end
|
42
|
+
|
32
43
|
def test_page_margins
|
33
44
|
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
34
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caxlsx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Randy Morgan
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -252,7 +252,6 @@ files:
|
|
252
252
|
- lib/axlsx/util/constants.rb
|
253
253
|
- lib/axlsx/util/mime_type_utils.rb
|
254
254
|
- lib/axlsx/util/options_parser.rb
|
255
|
-
- lib/axlsx/util/parser.rb
|
256
255
|
- lib/axlsx/util/serialized_attributes.rb
|
257
256
|
- lib/axlsx/util/simple_typed_list.rb
|
258
257
|
- lib/axlsx/util/storage.rb
|
@@ -493,127 +492,128 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
493
492
|
- !ruby/object:Gem::Version
|
494
493
|
version: '0'
|
495
494
|
requirements: []
|
496
|
-
|
495
|
+
rubyforge_project:
|
496
|
+
rubygems_version: 2.6.12
|
497
497
|
signing_key:
|
498
498
|
specification_version: 4
|
499
499
|
summary: Excel OOXML (xlsx) with charts, styles, images and autowidth columns.
|
500
500
|
test_files:
|
501
|
-
- test/
|
502
|
-
- test/
|
503
|
-
- test/
|
504
|
-
- test/
|
505
|
-
- test/
|
506
|
-
- test/
|
507
|
-
- test/drawing/
|
501
|
+
- test/benchmark.rb
|
502
|
+
- test/content_type/tc_content_type.rb
|
503
|
+
- test/content_type/tc_default.rb
|
504
|
+
- test/content_type/tc_override.rb
|
505
|
+
- test/doc_props/tc_app.rb
|
506
|
+
- test/doc_props/tc_core.rb
|
507
|
+
- test/drawing/tc_area_chart.rb
|
508
|
+
- test/drawing/tc_area_series.rb
|
509
|
+
- test/drawing/tc_axes.rb
|
508
510
|
- test/drawing/tc_axis.rb
|
509
|
-
- test/drawing/
|
510
|
-
- test/drawing/
|
511
|
+
- test/drawing/tc_bar_3D_chart.rb
|
512
|
+
- test/drawing/tc_bar_chart.rb
|
513
|
+
- test/drawing/tc_bar_series.rb
|
514
|
+
- test/drawing/tc_bubble_chart.rb
|
511
515
|
- test/drawing/tc_bubble_series.rb
|
516
|
+
- test/drawing/tc_cat_axis.rb
|
517
|
+
- test/drawing/tc_cat_axis_data.rb
|
518
|
+
- test/drawing/tc_chart.rb
|
512
519
|
- test/drawing/tc_d_lbls.rb
|
513
|
-
- test/drawing/
|
514
|
-
- test/drawing/
|
520
|
+
- test/drawing/tc_data_source.rb
|
521
|
+
- test/drawing/tc_drawing.rb
|
522
|
+
- test/drawing/tc_graphic_frame.rb
|
523
|
+
- test/drawing/tc_hyperlink.rb
|
515
524
|
- test/drawing/tc_line_3d_chart.rb
|
516
|
-
- test/drawing/
|
517
|
-
- test/drawing/tc_area_chart.rb
|
525
|
+
- test/drawing/tc_line_chart.rb
|
518
526
|
- test/drawing/tc_line_series.rb
|
519
|
-
- test/drawing/
|
520
|
-
- test/drawing/tc_bar_series.rb
|
521
|
-
- test/drawing/tc_hyperlink.rb
|
522
|
-
- test/drawing/tc_pic.rb
|
527
|
+
- test/drawing/tc_marker.rb
|
523
528
|
- test/drawing/tc_named_axis_data.rb
|
524
|
-
- test/drawing/
|
525
|
-
- test/drawing/
|
526
|
-
- test/drawing/
|
529
|
+
- test/drawing/tc_num_data.rb
|
530
|
+
- test/drawing/tc_num_val.rb
|
531
|
+
- test/drawing/tc_one_cell_anchor.rb
|
532
|
+
- test/drawing/tc_pic.rb
|
533
|
+
- test/drawing/tc_picture_locking.rb
|
534
|
+
- test/drawing/tc_pie_3D_chart.rb
|
535
|
+
- test/drawing/tc_pie_series.rb
|
536
|
+
- test/drawing/tc_scaling.rb
|
527
537
|
- test/drawing/tc_scatter_chart.rb
|
538
|
+
- test/drawing/tc_scatter_series.rb
|
539
|
+
- test/drawing/tc_ser_axis.rb
|
528
540
|
- test/drawing/tc_series.rb
|
541
|
+
- test/drawing/tc_series_title.rb
|
542
|
+
- test/drawing/tc_str_data.rb
|
543
|
+
- test/drawing/tc_str_val.rb
|
529
544
|
- test/drawing/tc_title.rb
|
530
|
-
- test/drawing/
|
531
|
-
- test/drawing/tc_picture_locking.rb
|
532
|
-
- test/drawing/tc_pie_series.rb
|
533
|
-
- test/drawing/tc_vml_shape.rb
|
534
|
-
- test/drawing/tc_axes.rb
|
535
|
-
- test/drawing/tc_vml_drawing.rb
|
536
|
-
- test/drawing/tc_pie_3D_chart.rb
|
537
|
-
- test/drawing/tc_area_series.rb
|
538
|
-
- test/drawing/tc_graphic_frame.rb
|
539
|
-
- test/drawing/tc_one_cell_anchor.rb
|
540
|
-
- test/drawing/tc_data_source.rb
|
545
|
+
- test/drawing/tc_two_cell_anchor.rb
|
541
546
|
- test/drawing/tc_val_axis.rb
|
542
|
-
- test/drawing/
|
543
|
-
- test/drawing/
|
544
|
-
- test/
|
545
|
-
- test/
|
546
|
-
- test/
|
547
|
-
- test/
|
548
|
-
- test/tc_axlsx.rb
|
549
|
-
- test/stylesheet/tc_fill.rb
|
547
|
+
- test/drawing/tc_view_3D.rb
|
548
|
+
- test/drawing/tc_vml_drawing.rb
|
549
|
+
- test/drawing/tc_vml_shape.rb
|
550
|
+
- test/profile.rb
|
551
|
+
- test/rels/tc_relationship.rb
|
552
|
+
- test/rels/tc_relationships.rb
|
550
553
|
- test/stylesheet/tc_border.rb
|
551
|
-
- test/stylesheet/tc_gradient_stop.rb
|
552
|
-
- test/stylesheet/tc_gradient_fill.rb
|
553
|
-
- test/stylesheet/tc_table_style.rb
|
554
|
-
- test/stylesheet/tc_font.rb
|
555
|
-
- test/stylesheet/tc_pattern_fill.rb
|
556
|
-
- test/stylesheet/tc_color.rb
|
557
|
-
- test/stylesheet/tc_num_fmt.rb
|
558
|
-
- test/stylesheet/tc_styles.rb
|
559
554
|
- test/stylesheet/tc_border_pr.rb
|
555
|
+
- test/stylesheet/tc_cell_alignment.rb
|
560
556
|
- test/stylesheet/tc_cell_protection.rb
|
561
|
-
- test/stylesheet/tc_xf.rb
|
562
557
|
- test/stylesheet/tc_cell_style.rb
|
563
|
-
- test/stylesheet/
|
558
|
+
- test/stylesheet/tc_color.rb
|
564
559
|
- test/stylesheet/tc_dxf.rb
|
560
|
+
- test/stylesheet/tc_fill.rb
|
561
|
+
- test/stylesheet/tc_font.rb
|
562
|
+
- test/stylesheet/tc_gradient_fill.rb
|
563
|
+
- test/stylesheet/tc_gradient_stop.rb
|
564
|
+
- test/stylesheet/tc_num_fmt.rb
|
565
|
+
- test/stylesheet/tc_pattern_fill.rb
|
566
|
+
- test/stylesheet/tc_styles.rb
|
567
|
+
- test/stylesheet/tc_table_style.rb
|
565
568
|
- test/stylesheet/tc_table_style_element.rb
|
566
|
-
- test/stylesheet/
|
569
|
+
- test/stylesheet/tc_table_styles.rb
|
570
|
+
- test/stylesheet/tc_xf.rb
|
571
|
+
- test/tc_axlsx.rb
|
567
572
|
- test/tc_helper.rb
|
568
|
-
- test/doc_props/tc_core.rb
|
569
|
-
- test/doc_props/tc_app.rb
|
570
|
-
- test/content_type/tc_override.rb
|
571
|
-
- test/content_type/tc_content_type.rb
|
572
|
-
- test/content_type/tc_default.rb
|
573
|
-
- test/rels/tc_relationship.rb
|
574
|
-
- test/rels/tc_relationships.rb
|
575
|
-
- test/profile.rb
|
576
|
-
- test/benchmark.rb
|
577
573
|
- test/tc_package.rb
|
578
|
-
- test/
|
574
|
+
- test/util/tc_mime_type_utils.rb
|
575
|
+
- test/util/tc_serialized_attributes.rb
|
576
|
+
- test/util/tc_simple_typed_list.rb
|
577
|
+
- test/util/tc_validators.rb
|
579
578
|
- test/workbook/tc_defined_name.rb
|
579
|
+
- test/workbook/tc_shared_strings_table.rb
|
580
|
+
- test/workbook/tc_workbook.rb
|
581
|
+
- test/workbook/tc_workbook_view.rb
|
582
|
+
- test/workbook/worksheet/auto_filter/tc_auto_filter.rb
|
583
|
+
- test/workbook/worksheet/auto_filter/tc_filter_column.rb
|
584
|
+
- test/workbook/worksheet/auto_filter/tc_filters.rb
|
585
|
+
- test/workbook/worksheet/tc_break.rb
|
586
|
+
- test/workbook/worksheet/tc_cell.rb
|
587
|
+
- test/workbook/worksheet/tc_cfvo.rb
|
588
|
+
- test/workbook/worksheet/tc_col.rb
|
589
|
+
- test/workbook/worksheet/tc_color_scale.rb
|
590
|
+
- test/workbook/worksheet/tc_comment.rb
|
591
|
+
- test/workbook/worksheet/tc_comments.rb
|
592
|
+
- test/workbook/worksheet/tc_conditional_formatting.rb
|
580
593
|
- test/workbook/worksheet/tc_data_bar.rb
|
581
|
-
- test/workbook/worksheet/tc_worksheet_hyperlink.rb
|
582
594
|
- test/workbook/worksheet/tc_data_validation.rb
|
595
|
+
- test/workbook/worksheet/tc_date_time_converter.rb
|
596
|
+
- test/workbook/worksheet/tc_header_footer.rb
|
597
|
+
- test/workbook/worksheet/tc_icon_set.rb
|
598
|
+
- test/workbook/worksheet/tc_outline_pr.rb
|
599
|
+
- test/workbook/worksheet/tc_page_margins.rb
|
600
|
+
- test/workbook/worksheet/tc_page_set_up_pr.rb
|
601
|
+
- test/workbook/worksheet/tc_page_setup.rb
|
602
|
+
- test/workbook/worksheet/tc_pane.rb
|
603
|
+
- test/workbook/worksheet/tc_pivot_table.rb
|
583
604
|
- test/workbook/worksheet/tc_pivot_table_cache_definition.rb
|
605
|
+
- test/workbook/worksheet/tc_print_options.rb
|
584
606
|
- test/workbook/worksheet/tc_protected_range.rb
|
585
|
-
- test/workbook/worksheet/tc_selection.rb
|
586
607
|
- test/workbook/worksheet/tc_rich_text.rb
|
587
|
-
- test/workbook/worksheet/tc_date_time_converter.rb
|
588
|
-
- test/workbook/worksheet/tc_table_style_info.rb
|
589
|
-
- test/workbook/worksheet/tc_conditional_formatting.rb
|
590
|
-
- test/workbook/worksheet/tc_page_setup.rb
|
591
|
-
- test/workbook/worksheet/tc_comments.rb
|
592
|
-
- test/workbook/worksheet/tc_sheet_view.rb
|
593
|
-
- test/workbook/worksheet/tc_sheet_calc_pr.rb
|
594
|
-
- test/workbook/worksheet/tc_color_scale.rb
|
595
|
-
- test/workbook/worksheet/tc_worksheet.rb
|
596
608
|
- test/workbook/worksheet/tc_rich_text_run.rb
|
609
|
+
- test/workbook/worksheet/tc_row.rb
|
610
|
+
- test/workbook/worksheet/tc_selection.rb
|
611
|
+
- test/workbook/worksheet/tc_sheet_calc_pr.rb
|
612
|
+
- test/workbook/worksheet/tc_sheet_format_pr.rb
|
597
613
|
- test/workbook/worksheet/tc_sheet_pr.rb
|
598
|
-
- test/workbook/worksheet/auto_filter/tc_filters.rb
|
599
|
-
- test/workbook/worksheet/auto_filter/tc_auto_filter.rb
|
600
|
-
- test/workbook/worksheet/auto_filter/tc_filter_column.rb
|
601
|
-
- test/workbook/worksheet/tc_cell.rb
|
602
614
|
- test/workbook/worksheet/tc_sheet_protection.rb
|
603
|
-
- test/workbook/worksheet/
|
604
|
-
- test/workbook/worksheet/tc_header_footer.rb
|
615
|
+
- test/workbook/worksheet/tc_sheet_view.rb
|
605
616
|
- test/workbook/worksheet/tc_table.rb
|
606
|
-
- test/workbook/worksheet/
|
607
|
-
- test/workbook/worksheet/
|
608
|
-
- test/workbook/worksheet/
|
609
|
-
- test/workbook/worksheet/tc_pivot_table.rb
|
610
|
-
- test/workbook/worksheet/tc_break.rb
|
611
|
-
- test/workbook/worksheet/tc_sheet_format_pr.rb
|
612
|
-
- test/workbook/worksheet/tc_print_options.rb
|
613
|
-
- test/workbook/worksheet/tc_comment.rb
|
614
|
-
- test/workbook/worksheet/tc_outline_pr.rb
|
615
|
-
- test/workbook/worksheet/tc_row.rb
|
616
|
-
- test/workbook/worksheet/tc_icon_set.rb
|
617
|
-
- test/workbook/worksheet/tc_page_set_up_pr.rb
|
618
|
-
- test/workbook/tc_shared_strings_table.rb
|
619
|
-
- test/workbook/tc_workbook.rb
|
617
|
+
- test/workbook/worksheet/tc_table_style_info.rb
|
618
|
+
- test/workbook/worksheet/tc_worksheet.rb
|
619
|
+
- test/workbook/worksheet/tc_worksheet_hyperlink.rb
|