class Excelgrip::Range

Range Class ==============

Public Instance Methods

==(other_range) click to toggle source
# File lib/excelgrip.rb, line 333
def ==(other_range)
  return false unless other_range.methods.include?("position")
  if (position() == other_range.position()) and 
     (h_size() == other_range.h_size) and (v_size() == other_range.v_size)
    return true
  end
  return false
end
cells(v_pos, h_pos) click to toggle source
# File lib/excelgrip.rb, line 295
def cells(v_pos, h_pos)
  Range.new(@raw_object.cells(v_pos, h_pos))
end
delete(shift=nil) click to toggle source

shift = Excel::XlShiftToLeft or Excel::XlShiftUp

# File lib/excelgrip.rb, line 374
def delete(shift=nil)
  if shift then
    @raw_object.delete({'shift'=>shift})
  else
    @raw_object.delete  # Auto Shift
  end
  @raw_object = nil
end
each_range() { |mergecells| ... } click to toggle source
# File lib/excelgrip.rb, line 308
def each_range()
  my_h_size = h_size()
  my_v_size = v_size()
  
  merge_range_array = []
  
  my_v_size.times {|v_offset|
    my_h_size.times {|h_offset|
      target_cell = Range.new(@raw_object.cells(v_offset+1, h_offset+1))
      if target_cell.MergeCells
        if operation_finished?(merge_range_array,target_cell)
          # skip
        else
          merge_range_array.push target_cell.mergeArea
          yield(target_cell.mergeArea.cells(1,1))
        end
      else
        yield(target_cell)
      end
    }
  }
end
get_cursol()
Alias for: get_cursor
get_cursor() click to toggle source
# File lib/excelgrip.rb, line 387
def get_cursor()
  RangeCursor.new(self)
end
Also aliased as: get_cursol
h_pos() click to toggle source
# File lib/excelgrip.rb, line 261
def h_pos()
  @raw_object.column
end
h_size() click to toggle source
# File lib/excelgrip.rb, line 273
def h_size
  @raw_object.columns.count
end
include?(inner_range) click to toggle source
# File lib/excelgrip.rb, line 342
def include?(inner_range)
  my_v_pos, my_h_pos = position()
  my_v_size = v_size()
  my_h_size = h_size()
  my_h_range = my_h_pos..(my_h_pos+my_h_size-1)
  my_v_range = my_v_pos..(my_v_pos+my_v_size-1)
  
  inner_v_pos, inner_h_pos = inner_range.position()
  inner_v_size = inner_range.v_size()
  inner_h_size = inner_range.h_size()
  if ( my_h_range.include?(inner_h_pos) and my_h_range.include?(inner_h_pos+inner_h_size-1) and
       my_v_range.include?(inner_v_pos) and my_v_range.include?(inner_v_pos+inner_v_size-1))
    return true
  else
    return false
  end
  
  
end
insert_here(shift=nil) click to toggle source

shift = Excel::XlShiftToRight or Excel::XlShiftDown

# File lib/excelgrip.rb, line 363
def insert_here(shift=nil)
  @raw_object.copy
  if shift then
    @raw_object.insert({'shift'=>shift})
  else
    @raw_object.insert  # Auto Shift
  end
  self
end
inspect() click to toggle source
# File lib/excelgrip.rb, line 299
def inspect()
  return self.class unless @raw_object
  if (v_size > 1) or (h_size > 1) 
    "Range:((V:#{v_pos},H:#{h_pos})-(V:#{v_pos+v_size-1},H:#{h_pos+h_size-1}))"
  else
    "Range:(V:#{v_pos},H:#{h_pos})"
  end
end
merge() click to toggle source
# File lib/excelgrip.rb, line 277
def merge()
  orig_name = name()
  @raw_object.Merge()
  Range.new(@raw_object)
end
mergearea() click to toggle source
# File lib/excelgrip.rb, line 289
def mergearea()
  Range.new(@raw_object.MergeArea)
end
name() click to toggle source
# File lib/excelgrip.rb, line 236
def name
  book = parent.parent
  name_list = book.names
  name_list.each {|name_obj|
    # puts "*** name_obj.name = #{name_obj.name}"
    if Range.new(name_obj.RefersToRange) == self
      return name_obj.name
    end
  }
  @raw_object.Address("RowAbsolute"=>false, "ColumnAbsolute"=>false, "ReferenceStyle"=>Excel::XlA1)
end
name=(range_name) click to toggle source
# File lib/excelgrip.rb, line 248
def name=(range_name)
  sheet = parent
  book = sheet.parent
  a1_address = @raw_object.Address("ReferenceStyle"=>Excel::XlA1)
  # puts "*** Range.name=#{range_name}, address=#{a1_address}"
  book.names.Add("Name"=>range_name, "RefersToLocal"=>"=#{sheet.name}!#{a1_address}")
  
end
parent() click to toggle source
# File lib/excelgrip.rb, line 383
def parent
  Worksheet.new(@raw_object.parent)
end
position() click to toggle source
# File lib/excelgrip.rb, line 265
def position()
  [@raw_object.row, @raw_object.column]
end
text()
Alias for: value
text=(text)
Alias for: value=
unmerge() click to toggle source
# File lib/excelgrip.rb, line 283
def unmerge()
  top_cell = @raw_object.cells(1,1)
  @raw_object.UnMerge()
  Range.new(top_cell)
end
v_pos() click to toggle source
# File lib/excelgrip.rb, line 257
def v_pos()
  @raw_object.row
end
v_size() click to toggle source
# File lib/excelgrip.rb, line 269
def v_size
  @raw_object.rows.count
end
value() click to toggle source

Return value of cell. If range contains multi cells, return Array of value.

# File lib/excelgrip.rb, line 205
def value
  if (h_size() == 1) and (v_size() == 1)
    return @raw_object.value
  end
  
  return_arr = []
  self.each_range {|inner_range|
    return_arr.push inner_range.raw.value
  }
  if return_arr.size == 1
    return return_arr[0]
  else
    return return_arr
  end
end
Also aliased as: text
value=(text) click to toggle source
# File lib/excelgrip.rb, line 223
def value=(text)
  if text.class == Array
    text_arr = text.dup
  else
    text_arr = [text]
  end
  
  self.each_range {|inner_range|
    inner_range.raw.value = text_arr.shift
  }
end
Also aliased as: text=

Private Instance Methods

operation_finished?(merge_range_array,target_cell) click to toggle source
# File lib/excelgrip.rb, line 393
def operation_finished?(merge_range_array,target_cell)
  merge_range_array.each {|merge_range|
    if merge_range.include?(target_cell)
      return true
    end
  }
  return false
end