blob: f27404b613f38a55562b792407276eece4d5850e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# frozen_string_literal: true
module Axlsx
# This class manages the dimensions for a worksheet.
# While this node is optional in the specification some readers like
# LibraOffice require this node to render the sheet
class Dimension
# the default value for the first cell in the dimension
# @return [String]
def self.default_first
@@default_first ||= 'A1'
end
# the default value for the last cell in the dimension
# @return [String]
def self.default_last
@@default_last ||= 'AA200'
end
# Creates a new dimension object
# @param[Worksheet] worksheet - the worksheet this dimension applies
# to.
def initialize(worksheet)
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
@worksheet = worksheet
end
attr_reader :worksheet
# the full refernece for this dimension
# @return [String]
def sqref
"#{first_cell_reference}:#{last_cell_reference}"
end
# serialize the object
# @return [String]
def to_xml_string(str = +'')
return if worksheet.rows.empty?
str << '<dimension ref="' << sqref << '"></dimension>'
end
# The first cell in the dimension
# @return [String]
def first_cell_reference
dimension_reference(worksheet.rows.first.first, Dimension.default_first)
end
# the last cell in the dimension
# @return [String]
def last_cell_reference
dimension_reference(worksheet.rows.last.last, Dimension.default_last)
end
private
# Returns the reference of a cell or the default specified
# @return [String]
def dimension_reference(cell, default)
return default unless cell.respond_to?(:r)
cell.r
end
end
end
|