Class: Rspreadsheet::Workbook

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

Instance Attribute Summary collapse

Worskheets methods collapse

Instance Method Summary collapse

Constructor Details

#initialize(afilename = nil) ⇒ Workbook

Returns a new instance of Workbook.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/rspreadsheet/workbook.rb', line 8

def initialize(afilename=nil)
  @worksheets=[]
  @filename = afilename
  @content_xml = Zip::File.open(@filename || File.dirname(__FILE__)+'/empty_file_template.ods') do |zip|
    LibXML::XML::Document.io zip.get_input_stream('content.xml')
  end
  @xmlnode = @content_xml.find_first('//office:spreadsheet')
  @xmlnode.find('./table:table').each do |node|
    create_worksheet_from_node(node)
  end
end

Instance Attribute Details

#filenameObject (readonly)

Returns the value of attribute filename.



6
7
8
# File 'lib/rspreadsheet/workbook.rb', line 6

def filename
  @filename
end

#xmlnodeObject (readonly)

debug



7
8
9
# File 'lib/rspreadsheet/workbook.rb', line 7

def xmlnode
  @xmlnode
end

Instance Method Details

#[](index_or_name) ⇒ Object



66
# File 'lib/rspreadsheet/workbook.rb', line 66

def [](index_or_name); self.worksheets(index_or_name) end

#create_worksheet(name = "Strana #{worksheets_count}") ⇒ Object



41
42
43
44
45
# File 'lib/rspreadsheet/workbook.rb', line 41

def create_worksheet(name = "Strana #{worksheets_count}")
  sheet = Worksheet.new(name)
  register_worksheet(sheet)
  return sheet
end

#create_worksheet_from_node(source_node) ⇒ Object



36
37
38
39
40
# File 'lib/rspreadsheet/workbook.rb', line 36

def create_worksheet_from_node(source_node)
  sheet = Worksheet.new(source_node)
  register_worksheet(sheet)
  return sheet
end

#save(new_filename = nil) ⇒ Object



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

def save(new_filename=nil)
  if @filename.nil? and new_filename.nil? then raise 'New file should be named on first save.' end
  # if the filename has changed than first copy the original file to new location (or template if it is a new file)
  if new_filename
    FileUtils.cp(@filename || File.dirname(__FILE__)+'/empty_file_template.ods', new_filename)
    @filename = new_filename
  end
  Zip::File.open(@filename) do |zip|
    # it is easy, because @xmlnode in in sync with contents all the time
    zip.get_output_stream('content.xml') do |f|
      f.write @content_xml.to_s(:indent => false)
    end
  end
end

#worksheet_namesString

Returns names of sheets in the workbook.

Returns:

  • (String)

    names of sheets in the workbook



49
# File 'lib/rspreadsheet/workbook.rb', line 49

def worksheet_names; @worksheets.collect{ |ws| ws.name } end

#worksheets(index_or_name) ⇒ Worskheet

Returns worksheet with given index or name.

Parameters:

  • (Integer, String)

Returns:

  • (Worskheet)

    worksheet with given index or name



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rspreadsheet/workbook.rb', line 52

def worksheets(index_or_name)
  case index_or_name
    when Integer then begin
      case index_or_name
        when 0 then nil 
        when 1..Float::INFINITY then @worksheets[index_or_name-1]
        when -Float::INFINITY..-1 then @worksheets[index_or_name]    # zaporne indexy znamenaji pocitani zezadu
      end  
    end
    when String then @worksheets.select{|ws| ws.name == index_or_name}.first
    when NilClass then nil
    else raise 'method worksheets requires Integer index of the sheet or its String name'
  end
end

#worksheets_countInteger

Returns number of sheets in the workbook.

Returns:

  • (Integer)

    number of sheets in the workbook



47
# File 'lib/rspreadsheet/workbook.rb', line 47

def worksheets_count; @worksheets.length end

#xmldocObject



33
# File 'lib/rspreadsheet/workbook.rb', line 33

def xmldoc; @xmlnode.doc end