axlsx 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/README.md +13 -5
  2. data/examples/colored_links.rb +59 -0
  3. data/examples/example.rb +421 -266
  4. data/examples/example.xlsx +0 -0
  5. data/examples/example_streamed.xlsx +0 -0
  6. data/examples/finance.rb +82 -0
  7. data/examples/finance.xlsx +0 -0
  8. data/examples/financial.xlsx +0 -0
  9. data/examples/no-use_autowidth.xlsx +0 -0
  10. data/examples/shared_strings_example.xlsx +0 -0
  11. data/examples/where_is_my_color.xlsx +0 -0
  12. data/lib/axlsx.rb +11 -4
  13. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  14. data/lib/axlsx/content_type/content_type.rb +1 -1
  15. data/lib/axlsx/content_type/default.rb +6 -37
  16. data/lib/axlsx/content_type/override.rb +6 -38
  17. data/lib/axlsx/doc_props/app.rb +7 -4
  18. data/lib/axlsx/drawing/axis.rb +3 -3
  19. data/lib/axlsx/drawing/chart.rb +2 -3
  20. data/lib/axlsx/drawing/d_lbls.rb +21 -31
  21. data/lib/axlsx/drawing/drawing.rb +6 -0
  22. data/lib/axlsx/drawing/hyperlink.rb +40 -32
  23. data/lib/axlsx/drawing/marker.rb +13 -13
  24. data/lib/axlsx/drawing/num_data.rb +6 -6
  25. data/lib/axlsx/drawing/num_data_source.rb +17 -16
  26. data/lib/axlsx/drawing/one_cell_anchor.rb +20 -22
  27. data/lib/axlsx/drawing/pic.rb +25 -27
  28. data/lib/axlsx/drawing/picture_locking.rb +12 -44
  29. data/lib/axlsx/drawing/scaling.rb +13 -13
  30. data/lib/axlsx/drawing/scatter_chart.rb +3 -3
  31. data/lib/axlsx/drawing/series.rb +3 -6
  32. data/lib/axlsx/drawing/str_data.rb +3 -3
  33. data/lib/axlsx/drawing/str_val.rb +7 -8
  34. data/lib/axlsx/drawing/view_3D.rb +51 -37
  35. data/lib/axlsx/drawing/vml_shape.rb +23 -23
  36. data/lib/axlsx/package.rb +14 -16
  37. data/lib/axlsx/stylesheet/border.rb +29 -20
  38. data/lib/axlsx/stylesheet/border_pr.rb +5 -4
  39. data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
  40. data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
  41. data/lib/axlsx/stylesheet/cell_style.rb +19 -14
  42. data/lib/axlsx/stylesheet/color.rb +19 -16
  43. data/lib/axlsx/stylesheet/dxf.rb +4 -4
  44. data/lib/axlsx/stylesheet/font.rb +22 -22
  45. data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
  46. data/lib/axlsx/stylesheet/num_fmt.rb +22 -13
  47. data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
  48. data/lib/axlsx/stylesheet/styles.rb +1 -1
  49. data/lib/axlsx/stylesheet/table_style.rb +17 -16
  50. data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
  51. data/lib/axlsx/stylesheet/table_styles.rb +14 -11
  52. data/lib/axlsx/stylesheet/xf.rb +28 -26
  53. data/lib/axlsx/util/accessors.rb +49 -0
  54. data/lib/axlsx/util/options_parser.rb +15 -0
  55. data/lib/axlsx/util/serialized_attributes.rb +46 -0
  56. data/lib/axlsx/util/simple_typed_list.rb +16 -4
  57. data/lib/axlsx/version.rb +1 -1
  58. data/lib/axlsx/workbook/defined_name.rb +13 -58
  59. data/lib/axlsx/workbook/workbook.rb +27 -1
  60. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +11 -19
  61. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +20 -27
  62. data/lib/axlsx/workbook/worksheet/cell.rb +38 -39
  63. data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
  64. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  65. data/lib/axlsx/workbook/worksheet/col.rb +34 -27
  66. data/lib/axlsx/workbook/worksheet/color_scale.rb +7 -13
  67. data/lib/axlsx/workbook/worksheet/comment.rb +14 -11
  68. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
  69. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +27 -25
  70. data/lib/axlsx/workbook/worksheet/data_bar.rb +44 -34
  71. data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
  72. data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
  73. data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
  75. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -9
  76. data/lib/axlsx/workbook/worksheet/page_setup.rb +20 -19
  77. data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
  78. data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
  79. data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
  80. data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
  81. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -26
  82. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +19 -57
  83. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
  84. data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
  85. data/lib/axlsx/workbook/worksheet/table.rb +16 -18
  86. data/lib/axlsx/workbook/worksheet/table_style_info.rb +10 -27
  87. data/lib/axlsx/workbook/worksheet/worksheet.rb +6 -7
  88. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +1 -1
  89. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +11 -33
  90. data/test/content_type/tc_default.rb +0 -11
  91. data/test/content_type/tc_override.rb +0 -13
  92. data/test/drawing/tc_d_lbls.rb +14 -4
  93. data/test/tc_axlsx.rb +20 -2
  94. data/test/workbook/tc_defined_name.rb +2 -2
  95. data/test/workbook/tc_workbook.rb +15 -0
  96. data/test/workbook/worksheet/tc_col.rb +11 -1
  97. data/test/workbook/worksheet/tc_pane.rb +5 -45
  98. data/test/workbook/worksheet/tc_selection.rb +9 -48
  99. metadata +13 -3
@@ -5,18 +5,7 @@ module Axlsx
5
5
  # @see README for examples
6
6
  class Table
7
7
 
8
-
9
- # The reference to the table data
10
- # @return [String]
11
- attr_reader :ref
12
-
13
- # The name of the table.
14
- # @return [String]
15
- attr_reader :name
16
-
17
- # The style for the table.
18
- # @return [TableStyle]
19
- attr_reader :style
8
+ include Axlsx::OptionsParser
20
9
 
21
10
  # Creates a new Table object
22
11
  # @param [String] ref The reference to the table data like 'A1:G24'.
@@ -30,12 +19,22 @@ module Axlsx
30
19
  @sheet.workbook.tables << self
31
20
  @table_style_info = TableStyleInfo.new(options[:style_info]) if options[:style_info]
32
21
  @name = "Table#{index+1}"
33
- options.each do |o|
34
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
35
- end
22
+ parse_options options
36
23
  yield self if block_given?
37
24
  end
38
25
 
26
+ # The reference to the table data
27
+ # @return [String]
28
+ attr_reader :ref
29
+
30
+ # The name of the table.
31
+ # @return [String]
32
+ attr_reader :name
33
+
34
+ # The style for the table.
35
+ # @return [TableStyle]
36
+ attr_reader :style
37
+
39
38
  # The index of this chart in the workbooks charts collection
40
39
  # @return [Integer]
41
40
  def index
@@ -63,7 +62,7 @@ module Axlsx
63
62
  @name = v
64
63
  end
65
64
  end
66
-
65
+
67
66
  # TableStyleInfo for the table.
68
67
  # initialization can be fed via the :style_info option
69
68
  def table_style_info
@@ -83,8 +82,7 @@ module Axlsx
83
82
  str << '<tableColumn id ="' << (index+1).to_s << '" name="' << cell.value << '"/>'
84
83
  end
85
84
  str << '</tableColumns>'
86
- #TODO implement tableStyleInfo
87
- table_style_info.to_xml_string(str) # '<tableStyleInfo showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0" name="TableStyleMedium9" />'
85
+ table_style_info.to_xml_string(str)
88
86
  str << '</table>'
89
87
  end
90
88
 
@@ -3,10 +3,9 @@ module Axlsx
3
3
  # The table style info class manages style attributes for defined tables in
4
4
  # a worksheet
5
5
  class TableStyleInfo
6
-
7
- # boolean attributes for this object
8
- BOOLEAN_ATTRIBUTES = %w(show_first_column show_last_column show_row_stripes show_column_stripes)
9
-
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::SerializedAttributes
8
+ include Axlsx::Accessors
10
9
  # creates a new TableStyleInfo instance
11
10
  # @param [Hash] options
12
11
  # @option [Boolean] show_first_column indicates if the first column should
@@ -22,32 +21,18 @@ module Axlsx
22
21
  def initialize(options = {})
23
22
  initialize_defaults
24
23
  @name = 'TableStyleMedium9'
25
- options.each do |k, v|
26
- send("#{k}=", v) if respond_to? "#{k}="
27
- end
24
+ parse_options options
28
25
  end
29
26
 
30
- # Dynamically create accessors for boolean attriubtes
31
- BOOLEAN_ATTRIBUTES.each do |attr|
32
- class_eval %{
33
- # The #{attr} attribute reader
34
- # @return [Boolean]
35
- attr_reader :#{attr}
36
-
37
- # The #{attr} writer
38
- # @param [Boolean] value The value to assign to #{attr}
39
- # @return [Boolean]
40
- def #{attr}=(value)
41
- Axlsx::validate_boolean(value)
42
- @#{attr} = value
43
- end
44
- }
45
- end
27
+ # boolean attributes for this object
28
+ boolean_attr_accessor :show_first_column, :show_last_column, :show_row_stripes, :show_column_stripes
29
+ serializable_attributes :show_first_column, :show_last_column, :show_row_stripes, :show_column_stripes,
30
+ :name
46
31
 
47
32
  # Initialize all the values to false as Excel requires them to
48
33
  # explicitly be disabled or all will show.
49
34
  def initialize_defaults
50
- BOOLEAN_ATTRIBUTES.each do |attr|
35
+ %w(show_first_column show_last_column show_row_stripes show_column_stripes).each do |attr|
51
36
  self.send("#{attr}=", 0)
52
37
  end
53
38
  end
@@ -59,9 +44,7 @@ module Axlsx
59
44
  # @param [String] str the string to contact this objects serialization to.
60
45
  def to_xml_string(str = '')
61
46
  str << '<tableStyleInfo '
62
- instance_values.each do |key, value|
63
- str << Axlsx::camel(key, false) << "='#{value}' "
64
- end
47
+ serialized_attributes str
65
48
  str << '/>'
66
49
  end
67
50
  end
@@ -3,6 +3,7 @@ module Axlsx
3
3
 
4
4
  # The Worksheet class represents a worksheet in the workbook.
5
5
  class Worksheet
6
+ include Axlsx::OptionsParser
6
7
 
7
8
  # definition of characters which are less than the maximum width of 0-9 in the default font for use in String#count.
8
9
  # This is used for autowidth calculations
@@ -24,9 +25,7 @@ module Axlsx
24
25
  @sheet_protection = nil
25
26
 
26
27
  initialize_page_options(options)
27
- options.each do |o|
28
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
29
- end
28
+ parse_options options
30
29
  end
31
30
 
32
31
  # Initalizes page margin, setup and print options
@@ -238,7 +237,7 @@ module Axlsx
238
237
  # Indicates if gridlines should be shown in the sheet.
239
238
  # This is true by default.
240
239
  # @return [Boolean]
241
- # @deprecated Use {SheetView#show_grid_lines=} instead.
240
+ # @deprecated Use SheetView#show_grid_lines= instead.
242
241
  def show_gridlines=(v)
243
242
  warn('axlsx::DEPRECIATED: Worksheet#show_gridlines= has been depreciated. This value can be set over SheetView#show_grid_lines=.')
244
243
  Axlsx::validate_boolean v
@@ -247,7 +246,7 @@ module Axlsx
247
246
 
248
247
  # @see selected
249
248
  # @return [Boolean]
250
- # @deprecated Use {SheetView#tab_selected=} instead.
249
+ # @deprecated Use SheetView#tab_selected= instead.
251
250
  def selected=(v)
252
251
  warn('axlsx::DEPRECIATED: Worksheet#selected= has been depreciated. This value can be set over SheetView#tab_selected=.')
253
252
  Axlsx::validate_boolean v
@@ -256,7 +255,7 @@ module Axlsx
256
255
 
257
256
  # Indicates if the worksheet should show gridlines or not
258
257
  # @return Boolean
259
- # @deprecated Use {SheetView#show_grid_lines} instead.
258
+ # @deprecated Use SheetView#show_grid_lines instead.
260
259
  def show_gridlines
261
260
  warn('axlsx::DEPRECIATED: Worksheet#show_gridlines has been depreciated. This value can get over SheetView#show_grid_lines.')
262
261
  sheet_view.show_grid_lines
@@ -266,7 +265,7 @@ module Axlsx
266
265
  # It is possible to have more than one worksheet selected, however it might cause issues
267
266
  # in some older versions of excel when using copy and paste.
268
267
  # @return Boolean
269
- # @deprecated Use {SheetView#tab_selected} instead.
268
+ # @deprecated Use SheetView#tab_selected instead.
270
269
  def selected
271
270
  warn('axlsx::DEPRECIATED: Worksheet#selected has been depreciated. This value can get over SheetView#tab_selected.')
272
271
  sheet_view.tab_selected
@@ -10,7 +10,7 @@ module Axlsx
10
10
  # @param [Worksheet] worksheet
11
11
  def initialize(worksheet)
12
12
  raise ArgumentError, 'you must provide a worksheet' unless worksheet.is_a?(Worksheet)
13
- @worksheet = worksheet
13
+ @worksheet = worksheet
14
14
  @drawing = nil
15
15
  end
16
16
 
@@ -3,6 +3,9 @@ module Axlsx
3
3
  # A worksheet hyperlink object. Note that this is not the same as a drawing hyperlink object.
4
4
  class WorksheetHyperlink
5
5
 
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::Accessors
8
+ include Axlsx::SerializedAttributes
6
9
  # Creates a new hyperlink object.
7
10
  # @note the preferred way to add hyperlinks to your worksheet is the Worksheet#add_hyperlink method
8
11
  # @param [Worksheet] worksheet the Worksheet that owns this hyperlink
@@ -16,14 +19,13 @@ module Axlsx
16
19
  DataTypeValidator.validate "Hyperlink.worksheet", [Worksheet], worksheet
17
20
  @worksheet = worksheet
18
21
  @target = :external
19
- options.each do |o|
20
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
21
- end
22
+ parse_options options
22
23
  yield self if block_given?
23
24
  end
24
25
 
25
- # String attributes for this object
26
- STRING_ATTRIBUTES = %w(display location tooltip)
26
+ string_attr_accessor :display, :location, :tooltip
27
+
28
+ serializable_attributes :display, :tooltip, :ref
27
29
 
28
30
  #Cell location of hyperlink on worksheet.
29
31
  # @return [String]
@@ -39,29 +41,11 @@ module Axlsx
39
41
  # @param [String|Cell] cell_reference The string reference or cell that defines where this hyperlink shows in the worksheet.
40
42
  def ref=(cell_reference)
41
43
  cell_reference = cell_reference.r if cell_reference.is_a?(Cell)
42
-
43
44
  Axlsx::validate_string cell_reference
44
45
  @ref = cell_reference
45
46
  end
46
47
 
47
- # Dynamically create string attribute accessors
48
- STRING_ATTRIBUTES.each do |attr|
49
- class_eval %{
50
- # The #{attr} attribute reader
51
- # @return [String]
52
- attr_reader :#{attr}
53
-
54
- # The #{attr} writer
55
- # @param [String] value The value to assign to #{attr}
56
- # @return [String]
57
- def #{attr}=(value)
58
- Axlsx::validate_string(value)
59
- @#{attr}= value
60
- end
61
- }
62
- end
63
-
64
- # The relationship required by this hyperlink when the taget is :external
48
+ # The relationship required by this hyperlink when the taget is :external
65
49
  # @return [Relationship]
66
50
  def relationship
67
51
  return unless @target == :external
@@ -80,7 +64,7 @@ module Axlsx
80
64
  # @return [String]
81
65
  def to_xml_string(str='')
82
66
  str << '<hyperlink '
83
- serialization_values.map { |key, value| str << key.to_s << '="' << value.to_s << '" ' }
67
+ serialized_attributes str, location_or_id
84
68
  str << '/>'
85
69
  end
86
70
 
@@ -88,14 +72,8 @@ module Axlsx
88
72
  # location should only be specified for non-external targets.
89
73
  # r:id should only be specified for external targets.
90
74
  # @return [Hash]
91
- def serialization_values
92
- h = instance_values.reject { |key, value| !%w(display ref tooltip).include?(key) }
93
- if @target == :external
94
- h['r:id'] = id
95
- else
96
- h['location'] = location
97
- end
98
- h
75
+ def location_or_id
76
+ @target == :external ? { :"r:id" => id } : { :location => location }
99
77
  end
100
78
  end
101
79
  end
@@ -3,14 +3,6 @@ require 'tc_helper.rb'
3
3
 
4
4
  class TestDefault < Test::Unit::TestCase
5
5
 
6
- def test_initialization_requires_Extension_and_ContentType
7
- assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new }
8
- assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new :Extension=>"xml" }
9
- assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new :ContentType=>"asdf" }
10
-
11
- assert_nothing_raised {Axlsx::Default.new :Extension=>"foo", :ContentType=>Axlsx::XML_CT}
12
-
13
- end
14
6
  def test_content_type_restriction
15
7
  assert_raise(ArgumentError, "raises argument error if invlalid ContentType is") { Axlsx::Default.new :ContentType=>"asdf" }
16
8
  end
@@ -20,8 +12,5 @@ class TestDefault < Test::Unit::TestCase
20
12
  doc = Nokogiri::XML(type.to_xml_string)
21
13
  assert_equal(doc.xpath("Default[@ContentType='#{Axlsx::XML_CT}']").size, 1)
22
14
  assert_equal(doc.xpath("Default[@Extension='xml']").size, 1)
23
-
24
15
  end
25
-
26
-
27
16
  end
@@ -1,16 +1,6 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'tc_helper.rb'
3
-
4
2
  class TestOverride < Test::Unit::TestCase
5
3
 
6
- def test_initialization_requires_Extension_and_ContentType
7
- err = "requires PartName and ContentType options"
8
- assert_raise(ArgumentError, err) { Axlsx::Override.new }
9
- assert_raise(ArgumentError, err) { Axlsx::Override.new :PartName=>"xml" }
10
- assert_raise(ArgumentError, err) { Axlsx::Override.new :ContentType=>"asdf" }
11
- assert_nothing_raised {Axlsx::Override.new :PartName=>"foo", :ContentType=>Axlsx::CHART_CT}
12
- end
13
-
14
4
  def test_content_type_restriction
15
5
  assert_raise(ArgumentError, "requires known content type") { Axlsx::Override.new :ContentType=>"asdf" }
16
6
  end
@@ -20,8 +10,5 @@ class TestOverride < Test::Unit::TestCase
20
10
  doc = Nokogiri::XML(type.to_xml_string)
21
11
  assert_equal(doc.xpath("Override[@ContentType='#{Axlsx::CHART_CT}']").size, 1)
22
12
  assert_equal(doc.xpath("Override[@PartName='somechart.xml']").size, 1)
23
-
24
13
  end
25
-
26
-
27
14
  end
@@ -4,19 +4,29 @@ class TestDLbls < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
6
  @d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart)
7
+ @boolean_attributes =[:show_legend_key,
8
+ :show_val,
9
+ :show_cat_name,
10
+ :show_ser_name,
11
+ :show_percent,
12
+ :show_bubble_size,
13
+ :show_leader_lines]
7
14
  end
8
15
 
9
16
  def test_initialization
10
17
  assert_equal(:bestFit, @d_lbls.d_lbl_pos)
11
- Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
18
+ @boolean_attributes.each do |attr|
12
19
  assert_equal(false, @d_lbls.send(attr))
13
20
  end
14
21
  end
15
22
 
16
23
  def test_initialization_with_optoins
17
- options_hash = Hash[*[Axlsx::DLbls::BOOLEAN_ATTRIBUTES.map { |name| [name, true] }] ]
24
+
25
+ options_hash = Hash[*[@boolean_attributes.map { |name| [name, true] }] ]
26
+
18
27
  d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart, options_hash.merge( { :d_lbl_pos => :t }))
19
- Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
28
+
29
+ @boolean_attributes.each do |attr|
20
30
  assert_equal(true, d_lbls.send(attr), "boolean attributes set by options")
21
31
  end
22
32
  assert_equal(:t, d_lbls.d_lbl_pos, "d_lbl_pos set by options")
@@ -27,7 +37,7 @@ class TestDLbls < Test::Unit::TestCase
27
37
  end
28
38
 
29
39
  def test_boolean_attributes
30
- Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
40
+ @boolean_attributes.each do |attr|
31
41
  assert_raise(ArgumentError, "rejects non boolean value for #{attr}") { @d_lbls.send("#{attr}=", :foo) }
32
42
  assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", true) }
33
43
  assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", false) }
@@ -14,8 +14,26 @@ class TestAxlsx < Test::Unit::TestCase
14
14
  }
15
15
  end
16
16
 
17
- def test_cell_range
18
- #To do
17
+ def test_cell_range_empty_if_no_cell
18
+ assert_equal(Axlsx.cell_range([]), "")
19
+ end
20
+
21
+ def test_cell_range_relative
22
+ p = Axlsx::Package.new
23
+ ws = p.workbook.add_worksheet
24
+ row = ws.add_row
25
+ c1 = row.add_cell
26
+ c2 = row.add_cell
27
+ assert_equal(Axlsx.cell_range([c2, c1], false), "A1:B1")
28
+ end
29
+
30
+ def test_cell_range_absolute
31
+ p = Axlsx::Package.new
32
+ ws = p.workbook.add_worksheet :name => "Sheet <'>\" 1"
33
+ row = ws.add_row
34
+ c1 = row.add_cell
35
+ c2 = row.add_cell
36
+ assert_equal(Axlsx.cell_range([c2, c1], true), "'Sheet &lt;''&gt;&quot; 1'!$A$1:$B$1")
19
37
  end
20
38
 
21
39
  def test_name_to_indices
@@ -10,14 +10,14 @@ class TestDefinedNames < Test::Unit::TestCase
10
10
  end
11
11
 
12
12
  def test_string_attributes
13
- Axlsx::DefinedName::STRING_ATTRIBUTES.each do |attr|
13
+ %w(short_cut_key status_bar help description custom_menu comment).each do |attr|
14
14
  assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
15
15
  assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
16
16
  end
17
17
  end
18
18
 
19
19
  def test_boolean_attributes
20
- Axlsx::DefinedName::BOOLEAN_ATTRIBUTES.each do |attr|
20
+ %w(workbook_parameter publish_to_server xlm vb_proceedure function hidden).each do |attr|
21
21
  assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
22
22
  assert_nothing_raised { @dn.send("#{attr}=", 1) }
23
23
  end
@@ -16,6 +16,13 @@ class TestWorkbook < Test::Unit::TestCase
16
16
  assert_equal(@wb.use_autowidth, false)
17
17
  end
18
18
 
19
+
20
+ def test_sheet_by_name_retrieval
21
+ @wb.add_worksheet(:name=>'foo')
22
+ @wb.add_worksheet(:name=>'bar')
23
+ assert_equal('foo', @wb.sheet_by_name('foo').name)
24
+
25
+ end
19
26
  def test_date1904
20
27
  assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
21
28
  @wb.date1904 = :false
@@ -42,6 +49,14 @@ class TestWorkbook < Test::Unit::TestCase
42
49
  assert_equal(@wb.worksheets.first, ws, "the worksheet returned is the worksheet added")
43
50
  assert_equal(ws.name, "bob", "name option gets passed to worksheet")
44
51
  end
52
+
53
+ def test_insert_worksheet
54
+ @wb.add_worksheet(:name => 'A')
55
+ @wb.add_worksheet(:name => 'B')
56
+ ws3 = @wb.insert_worksheet(0, :name => 'C')
57
+ assert_equal(ws3.name, @wb.worksheets.first.name)
58
+ end
59
+
45
60
  def test_relationships
46
61
  #current relationship size is 1 due to style relation
47
62
  assert(@wb.relationships.size == 1)
@@ -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, :outlineLevel => 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) }
@@ -58,6 +58,16 @@ class TestCol < Test::Unit::TestCase
58
58
  assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
59
59
  end
60
60
 
61
+ def test_to_xml_string
62
+ @col.width = 100
63
+ doc = Nokogiri::XML(@col.to_xml_string)
64
+ assert_equal(1, doc.xpath("//col [@bestFit='#{@col.best_fit}']").size)
65
+ assert_equal(1, doc.xpath("//col [@max=#{@col.max}]").size)
66
+ assert_equal(1, doc.xpath("//col [@min=#{@col.min}]").size)
67
+ assert_equal(1, doc.xpath("//col [@width=#{@col.width}]").size)
68
+ assert_equal(1, doc.xpath("//col [@customWidth='#{@col.custom_width}']").size)
69
+ end
70
+
61
71
  def test_style
62
72
  assert_equal(@col.style, nil)
63
73
  @col.style = 1