class RubyXL::Worksheet

def self.parse(param)

def self.parse(param)
  sheet_obj = super
  sheet_obj.sheet_data.rows.each { |r|
    next if r.nil?
    r.worksheet = sheet_obj
    r.cells.each { |c| c.worksheet = sheet_obj unless c.nil? }
  }
  sheet_obj
end

def before_write_xml # This method may need to be moved higher in the hierarchy

This method may need to be moved higher in the hierarchy
def before_write_xml # This method may need to be moved higher in the hierarchy

  first_nonempty_row = nil
  last_nonempty_row = 0
  first_nonempty_column = nil
  last_nonempty_column = 0
  if sheet_data then
    sheet_data.rows.each_with_index { |row, row_index|
      next if row.nil? || row.cells.empty?
      first_nonempty_cell = nil
      last_nonempty_cell = 0
      row.cells.each_with_index { |cell, col_index|
        next if cell.nil?
        cell.r = RubyXL::Reference.new(row_index, col_index)
        first_nonempty_cell ||= col_index
        last_nonempty_cell = col_index
      }
      if first_nonempty_cell then # If there's nothing in this row, then +first_nonempty_cell+ will be +nil+.

        last_nonempty_row = row_index
        first_nonempty_row ||= row_index
        first_nonempty_column ||= first_nonempty_cell
        last_nonempty_column = last_nonempty_cell if last_nonempty_cell > last_nonempty_column
      end
      row.r = row_index + 1
      row.spans = "#{first_nonempty_cell + 1}:#{last_nonempty_cell + 1}" unless first_nonempty_cell.nil?
      row.custom_format = (row.style_index.to_i != 0)
    }
    if first_nonempty_row then
      self.dimension ||= RubyXL::WorksheetDimensions.new
      self.dimension.ref = RubyXL::Reference.new(first_nonempty_row, last_nonempty_row,
                                                 first_nonempty_column, last_nonempty_column)
    end
  end
  true
end

def related_objects

def related_objects
  comments + printer_settings
end

def xlsx_path

def xlsx_path
  File.join('xl', 'worksheets', "sheet#{file_index}.xml")
end