Class: Rspreadsheet::Worksheet

Inherits:
Object
  • Object
show all
Defined in:
lib/rspreadsheet/worksheet.rb

Instance Attribute Summary collapse

XMLTiedArray related methods collapse

images collapse

XMLTiedArray_WithRepeatableItems connected methods collapse

How to get to cells? (syntactic sugar) collapse

Constructor Details

#initialize(xmlnode_or_sheet_name, workbook) ⇒ Worksheet

workbook is here ONLY because of inserting images - to find unique name - it would be much better if it should bot be there



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rspreadsheet/worksheet.rb', line 20

def initialize(xmlnode_or_sheet_name,workbook) # workbook is here ONLY because of inserting images - to find unique name - it would be much better if it should bot be there
  initialize_xml_tied_array
  # set up the @xmlnode according to parameter
  case xmlnode_or_sheet_name
    when LibXML::XML::Node
      @xmlnode = xmlnode_or_sheet_name
    when String
      @xmlnode = Tools.prepare_ns_node('table','table')
      self.name = xmlnode_or_sheet_name
    else raise 'Provide name or xml node to create a Worksheet object'
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object

Allows syntax like sheet.F15. TO catch errors easier, allows only up to three uppercase letters in colum part, althought it won't be necessarry to restrict.



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/rspreadsheet/worksheet.rb', line 124

def method_missing method_name, *args, &block
  if method_name.to_s.match(/^([A-Z]{1,3})(\d{1,8})(=?)$/)
    row,col = Rspreadsheet::Tools.convert_cell_address_to_coordinates($~[1],$~[2])
    assignchar = $~[3]
    if assignchar == '='
      self.cells(row,col).value = args.first
    else
      self.cells(row,col).value
    end
  else
    super
  end
end

Instance Attribute Details

#xmlnodeObject

Returns the value of attribute xmlnode.



12
13
14
# File 'lib/rspreadsheet/worksheet.rb', line 12

def xmlnode
  @xmlnode
end

Instance Method Details

#[](*params) ⇒ Object

Returns value of the cell given either by row,column integer coordinates of by address.

Parameters:

  • either ((Integer,Integer), String)

    row and column of the cell (i.e. 3,5) or a string containing it address i.e. 'F12'



91
92
93
# File 'lib/rspreadsheet/worksheet.rb', line 91

def [](*params)
  cells(*params).andand.value
end

#[]=(*params) ⇒ Object

Sets value of the cell given either by row,column integer coordinates of by address. It also sets the type of the cell according to type of the value. For details #see Cell.value= This also allows syntax like

 @sheet[1] = ['Jan', 'Feb', 'Mar']


99
100
101
102
103
104
105
# File 'lib/rspreadsheet/worksheet.rb', line 99

def []=(*params)
  if (params.size == 2) and params[0].kind_of?(Integer) 
    rows(params[0]).cellvalues = params[1]
  else
    cells(*params[0..-2]).andand.value = params.last 
  end
end

#add_row_above(arowi) ⇒ Object



46
47
48
# File 'lib/rspreadsheet/worksheet.rb', line 46

def add_row_above(arowi)
  insert_new_empty_subitem_before(arowi)
end

#cells(*params) ⇒ Object Also known as: cell

Returns a Cell object placed in row and column or on a Cell on string address

Parameters:

  • either ((Integer,Integer), String)

    row and column of the cell (i.e. 3,5) or a string containing it address i.e. 'F12'



108
109
110
111
112
113
114
115
116
117
# File 'lib/rspreadsheet/worksheet.rb', line 108

def cells(*params)
  case params.length 
    when 0 then raise 'Not implemented yet' #TODO: return list of all cells
    when 1..2
      r,c = Rspreadsheet::Tools.a2c(*params)
      arow = row(r)
      arow.andand.cell(c)
    else raise ArgumentError.new('Wrong number of arguments.')
  end
end

#column(param) ⇒ Object



119
120
121
122
# File 'lib/rspreadsheet/worksheet.rb', line 119

def column(param)
  _,coli = Rspreadsheet::Tools.a2c(1,param)
  Column.new(self,coli)
end

#detach_row_in_xml(rowi) ⇒ Object



55
56
57
# File 'lib/rspreadsheet/worksheet.rb', line 55

def detach_row_in_xml(rowi)
  return detach_my_subnode_respect_repeated(rowi)
end

#first_unused_row_indexObject



42
43
44
# File 'lib/rspreadsheet/worksheet.rb', line 42

def first_unused_row_index
  first_unused_subitem_index
end

#images(*params) ⇒ Object



70
71
72
# File 'lib/rspreadsheet/worksheet.rb', line 70

def images(*params)
  worksheet_images.subitems(*params) 
end

#images_countObject



67
68
69
# File 'lib/rspreadsheet/worksheet.rb', line 67

def images_count
  worksheet_images.size
end

#insert_cell_before(arowi, acoli) ⇒ Object

TODO: maybe move this to row level



50
51
52
53
# File 'lib/rspreadsheet/worksheet.rb', line 50

def insert_cell_before(arowi,acoli)        # TODO: maybe move this to row level
  detach_row_in_xml(arowi)
  rows(arowi).insert_new_item(acoli)  
end

#insert_image(filename, mime = 'image/png') ⇒ Object



73
74
75
# File 'lib/rspreadsheet/worksheet.rb', line 73

def insert_image(filename,mime='image/png')
  worksheet_images.insert_image(filename,mime)
end

#insert_image_to(x, y, filename, mime = 'image/png') ⇒ Object



76
77
78
79
80
# File 'lib/rspreadsheet/worksheet.rb', line 76

def insert_image_to(x,y,filename,mime='image/png')
  img = insert_image(filename,mime)
  img.move_to(x,y)
  img
end

#nameObject

name of the worksheet



35
# File 'lib/rspreadsheet/worksheet.rb', line 35

def name; Tools.get_ns_attribute_value(@xmlnode,'table','name') end

#name=(value) ⇒ Object



36
# File 'lib/rspreadsheet/worksheet.rb', line 36

def name=(value); Tools.set_ns_attribute(@xmlnode,'table','name', value) end

#nonemptycellsObject



59
60
61
# File 'lib/rspreadsheet/worksheet.rb', line 59

def nonemptycells
  used_rows_range.collect{ |rowi| rows(rowi).nonemptycells }.flatten
end

#prepare_subitem(rowi) ⇒ Object



85
# File 'lib/rspreadsheet/worksheet.rb', line 85

def prepare_subitem(rowi); Row.new(self,rowi) end

#rowcacheObject



86
# File 'lib/rspreadsheet/worksheet.rb', line 86

def rowcache; @itemcache end

#rows(*params) ⇒ Object Also known as: row



83
# File 'lib/rspreadsheet/worksheet.rb', line 83

def rows(*params); subitems(*params) end

#rowxmlnode(rowi) ⇒ Object



38
39
40
# File 'lib/rspreadsheet/worksheet.rb', line 38

def rowxmlnode(rowi)
  my_subnode(rowi)
end

#subnode_optionsObject



14
15
16
17
18
# File 'lib/rspreadsheet/worksheet.rb', line 14

def subnode_options; {
  :node_name => 'table-row', 
  :ignore_groupings => ['table-header-rows'], 
  :repeated_attribute => 'number-rows-repeated'
} end

#used_rows_rangeObject



138
139
140
# File 'lib/rspreadsheet/worksheet.rb', line 138

def used_rows_range
  1..self.rowcount
end

#worksheet_imagesObject



64
65
66
# File 'lib/rspreadsheet/worksheet.rb', line 64

def worksheet_images
  @worksheet_images ||= WorksheetImages.new(self)
end