summaryrefslogtreecommitdiffhomepage
path: root/lib/axlsx/workbook/worksheet/dimension.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/axlsx/workbook/worksheet/dimension.rb')
-rw-r--r--lib/axlsx/workbook/worksheet/dimension.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/axlsx/workbook/worksheet/dimension.rb b/lib/axlsx/workbook/worksheet/dimension.rb
new file mode 100644
index 00000000..838b4ffa
--- /dev/null
+++ b/lib/axlsx/workbook/worksheet/dimension.rb
@@ -0,0 +1,49 @@
+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
+
+
+ def self.default_first
+ @@default_first ||= 'A1'
+ end
+
+ def self.default_last
+ @@default_last ||= 'AA200'
+ end
+
+
+ def initialize(worksheet)
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
+ @worksheet = worksheet
+ end
+
+ attr_reader :worksheet
+
+ def sqref
+ "#{first_cell_reference}:#{last_cell_reference}"
+ end
+
+ def to_xml_string(str = '')
+ return if worksheet.rows.empty?
+ str << "<dimension ref=\"%s\"></dimension>" % sqref
+ end
+
+ def first_cell_reference
+ dimension_reference(worksheet.rows.first.cells.first, Dimension.default_first)
+ end
+
+ def last_cell_reference
+ dimension_reference(worksheet.rows.last.cells.last, Dimension.default_last)
+ end
+
+ private
+
+ def dimension_reference(cell, default)
+ return default unless cell.respond_to?(:r)
+ cell.r
+ end
+ end
+end