Class: Excelgrip::Range

Inherits:
GripWrapper show all
Defined in:
lib/excelgrip.rb

Overview

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

Direct Known Subclasses

RangeCursor

Instance Method Summary collapse

Methods inherited from GripWrapper

#initialize, #raw

Constructor Details

This class inherits a constructor from Excelgrip::GripWrapper

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Excelgrip::GripWrapper

Instance Method Details

#==(other_range) ⇒ Object



333
334
335
336
337
338
339
340
# 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) ⇒ Object



295
296
297
# 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) ⇒ Object

shift = Excel::XlShiftToLeft or Excel::XlShiftUp



374
375
376
377
378
379
380
381
# 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_rangeObject



308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
# 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_cursorObject Also known as: get_cursol



387
388
389
# File 'lib/excelgrip.rb', line 387

def get_cursor()
  RangeCursor.new(self)
end

#h_posObject



261
262
263
# File 'lib/excelgrip.rb', line 261

def h_pos()
  @raw_object.column
end

#h_sizeObject



273
274
275
# File 'lib/excelgrip.rb', line 273

def h_size
  @raw_object.columns.count
end

#include?(inner_range) ⇒ Boolean

Returns:

  • (Boolean)


342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
# 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) ⇒ Object

shift = Excel::XlShiftToRight or Excel::XlShiftDown



363
364
365
366
367
368
369
370
371
# 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

#inspectObject



299
300
301
302
303
304
305
306
# 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

#mergeObject



277
278
279
280
281
# File 'lib/excelgrip.rb', line 277

def merge()
  orig_name = name()
  @raw_object.Merge()
  Range.new(@raw_object)
end

#mergeareaObject



289
290
291
# File 'lib/excelgrip.rb', line 289

def mergearea()
  Range.new(@raw_object.MergeArea)
end

#nameObject



236
237
238
239
240
241
242
243
244
245
246
# 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) ⇒ Object



248
249
250
251
252
253
254
255
# 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

#parentObject



383
384
385
# File 'lib/excelgrip.rb', line 383

def parent
  Worksheet.new(@raw_object.parent)
end

#positionObject



265
266
267
# File 'lib/excelgrip.rb', line 265

def position()
  [@raw_object.row, @raw_object.column]
end

#unmergeObject



283
284
285
286
287
# File 'lib/excelgrip.rb', line 283

def unmerge()
  top_cell = @raw_object.cells(1,1)
  @raw_object.UnMerge()
  Range.new(top_cell)
end

#v_posObject



257
258
259
# File 'lib/excelgrip.rb', line 257

def v_pos()
  @raw_object.row
end

#v_sizeObject



269
270
271
# File 'lib/excelgrip.rb', line 269

def v_size
  @raw_object.rows.count
end

#valueObject Also known as: text

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



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# 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

#value=(text) ⇒ Object Also known as: text=



223
224
225
226
227
228
229
230
231
232
233
# 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