class POI::Area

Public Class Methods

new(reference, version) click to toggle source
# File lib/poi/workbook/area.rb, line 3
def initialize reference, version
  @ref = reference
  @version = version
end

Public Instance Methods

in(workbook) click to toggle source
# File lib/poi/workbook/area.rb, line 8
def in workbook
  if single_cell_reference?
    ref = area.all_referenced_cells.first
    return [workbook.single_cell(ref)]
  end

  begin
    by_column = {}
    # refs = area.all_referenced_cells
    # slices = refs.enum_slice(refs.length/15)
    # slices.collect do |cell_refs|
    #   Thread.start do
    #     cell_refs.each do |cell_ref|
    #       first = workbook.worksheets[cell_ref.sheet_name].first_row
    #       last  = workbook.worksheets[cell_ref.sheet_name].last_row
    #       next unless cell_ref.row >= first && cell_ref.row <= last
    #
    #       # ref = POI::CELL_REF.new(c.format_as_string)
    #       cell = workbook.single_cell cell_ref
    #       (by_column[cell_ref.cell_ref_parts.collect.last] ||= []) << cell
    #     end
    #   end
    # end.each {|t| t.join}

    area.all_referenced_cells.each do |cell_ref|
      first = workbook.worksheets[cell_ref.sheet_name].first_row
      last  = workbook.worksheets[cell_ref.sheet_name].last_row
      next unless cell_ref.row >= first && cell_ref.row <= last

      # ref = POI::CELL_REF.new(c.format_as_string)
      cell = workbook.single_cell cell_ref
      (by_column[cell_ref.cell_ref_parts.to_a.last] ||= []) << cell
    end

    by_column.each do |key, cells|
      by_column[key] = cells.compact
    end

    if by_column.length == 1
      by_column.values.flatten
    else
      by_column
    end
  rescue
    []
  end
end
single_cell_reference?() click to toggle source
# File lib/poi/workbook/area.rb, line 56
def single_cell_reference?
  area.single_cell? #@ref == getFirstCell.formatAsString rescue false
end

Private Instance Methods

area() click to toggle source
# File lib/poi/workbook/area.rb, line 61
def area
  @area ||= new_area_reference
end
column_reference() click to toggle source
# File lib/poi/workbook/area.rb, line 75
def column_reference
  sheet_parts = @ref.split('!')
  area_parts  = sheet_parts.last.split(':')
  area_start  = "#{sheet_parts.first}!#{area_parts.first}"
  area_end    = area_parts.last

  POI::AREA_REF.getWholeColumn(@version, area_start, area_end)
end
new_area_reference() click to toggle source
# File lib/poi/workbook/area.rb, line 65
def new_area_reference
  begin
    return column_reference
  rescue => x
    return POI::AREA_REF.new(@ref, @version)
  rescue
    raise "could not determine area reference for #{@ref}: #{$!.message}"
  end
end