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.


120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/rspreadsheet/worksheet.rb', line 120

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'


87
88
89
# File 'lib/rspreadsheet/worksheet.rb', line 87

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']

95
96
97
98
99
100
101
# File 'lib/rspreadsheet/worksheet.rb', line 95

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


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

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'


104
105
106
107
108
109
110
111
112
113
# File 'lib/rspreadsheet/worksheet.rb', line 104

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


115
116
117
118
# File 'lib/rspreadsheet/worksheet.rb', line 115

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

#detach_row_in_xml(rowi) ⇒ Object


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

def detach_row_in_xml(rowi)
  return detach_my_subnode_respect_repeated(rowi)
end

#first_unused_row_indexObject


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

def first_unused_row_index
  first_unused_subitem_index
end

#images(*params) ⇒ Object


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

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

#images_countObject


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

def images_count
  worksheet_images.size
end

#insert_cell_before(arowi, acoli) ⇒ Object

TODO: maybe move this to row level


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

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


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

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

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


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

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


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

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

#prepare_subitem(rowi) ⇒ Object


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

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

#rowcacheObject


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

def rowcache; @itemcache end

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


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

def rows(*params); subitems(*params) 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


134
135
136
# File 'lib/rspreadsheet/worksheet.rb', line 134

def used_rows_range
  1..self.rowcount
end

#worksheet_imagesObject


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

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