lib/rspreadsheet/worksheet.rb in rspreadsheet-0.2.3 vs lib/rspreadsheet/worksheet.rb in rspreadsheet-0.2.4
- old
+ new
@@ -4,66 +4,82 @@
module Rspreadsheet
class Worksheet
include XMLTiedArray
- attr_accessor :name, :xmlnode
+ attr_accessor :xmlnode
def subitem_xml_options; {:xml_items_node_name => 'table-row', :xml_repeated_attribute => 'number-rows-repeated'} end
def initialize(xmlnode_or_sheet_name)
@itemcache = Hash.new #TODO: move to module XMLTiedArray
# 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.create_ns_node('table','table')
- Tools.set_ns_attribute(@xmlnode,'table','name', xmlnode_or_sheet_name)
+ @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
+ # name of the worksheet
+ # @returns [String]
+ def name; Tools.get_ns_attribute_value(@xmlnode,'table','name') end
+ def name=(value); Tools.set_ns_attribute(@xmlnode,'table','name', value) end
+
def rowxmlnode(rowi)
find_my_subnode_respect_repeated(rowi, {:xml_items_node_name => 'table-row', :xml_repeated_attribute => 'number-rows-repeated'})
end
def first_unused_row_index
find_first_unused_index_respect_repeated({:xml_items_node_name => 'table-row', :xml_repeated_attribute => 'number-rows-repeated'})
end
- def insert_row_above(arowi)
- insert_subitem_before(arowi)
+ def add_row_above(arowi)
+ add_empty_subitem_before(arowi)
end
def insert_cell_before(arowi,acoli)
detach_row_in_xml(arowi)
- rows(arowi).insert_subitem_before(acoli)
+ rows(arowi).add_empty_subitem_before(acoli)
end
def detach_row_in_xml(rowi)
return detach_my_subnode_respect_repeated(rowi, {:xml_items_node_name => 'table-row', :xml_repeated_attribute => 'number-rows-repeated'})
end
def nonemptycells
used_rows_range.collect{ |rowi| rows(rowi).nonemptycells }.flatten
end
- # rozšíření XMLTiedArray
- def rows(rowi); subitem(rowi) end
+ #@!group XMLTiedArray connected methods
+ def rows(*params); subitems(*params) end
def prepare_subitem(rowi); Row.new(self,rowi) end
def rowcache; @itemcache end
- ## syntactic sugar follows
- def [](r,c)
- cells(r,c).andand.value
+ #@!group How to get to cells? (syntactic sugar)
+ # Returns value of the cell given either by row,column integer coordinates of by address.
+ # @param [(Integer,Integer), String] either row and column of the cell (i.e. 3,5) or a string containing it address i.e. 'F12'
+ def [](*params)
+ cells(*params).andand.value
end
- def []=(r,c,avalue)
- cells(r,c).andand.value=avalue
+ # Aets 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=
+ def []=(*params)
+ cells(*params[0..-2]).andand.value = params.last
end
- def cells(r,c)
- rows(r).andand.cells(c)
+ # Returns a Cell object placed in row and column or on a Cell on string address
+ # @param [(Integer,Integer), String] either row and column of the cell (i.e. 3,5) or a string containing it address i.e. 'F12'
+ 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)
+ rows(r).andand.cells(c)
+ else raise Exception.new('Wrong number of arguments.')
+ end
end
- # allows syntax like sheet.F15
+ # 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.
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 == '='