caxlsx 3.0.1 → 3.0.2
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.
- 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
|