Class: Rspreadsheet::Workbook
- Inherits:
-
Object
- Object
- Rspreadsheet::Workbook
- Defined in:
- lib/rspreadsheet/workbook.rb
Instance Attribute Summary collapse
-
#filename ⇒ Object
readonly
Returns the value of attribute filename.
-
#xmlnode ⇒ Object
readonly
debug.
Worskheets methods collapse
- #[](index_or_name) ⇒ Object
- #create_worksheet(name = "Sheet#{worksheets_count+1}") ⇒ Object (also: #add_worksheet)
- #create_worksheet_from_node(source_node) ⇒ Object
-
#worksheet_names ⇒ String
Names of sheets in the workbook.
-
#worksheets(index_or_name) ⇒ Worskheet
(also: #worksheet, #sheet, #sheets)
Worksheet with given index or name.
-
#worksheets_count ⇒ Integer
Number of sheets in the workbook.
Loading and saving related methods collapse
-
#initialize(afilename = nil) ⇒ Workbook
constructor
A new instance of Workbook.
-
#mime ⇒ Object
Mime of the file.
-
#mime_preferred_extension ⇒ String
(also: #mime_default_extension)
Prefered file extension.
-
#save(io = nil) ⇒ Object
(also: #to_io, #save_to_io)
Saves the worksheet.
Instance Method Summary collapse
Constructor Details
#initialize(afilename = nil) ⇒ Workbook
Returns a new instance of Workbook.
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rspreadsheet/workbook.rb', line 54 def initialize(afilename=nil) @worksheets=[] @filename = afilename @content_xml = Zip::File.open(@filename || TEMPLATE_FILE_NAME) do |zip| LibXML::XML::Document.io zip.get_input_stream(CONTENT_FILE_NAME) 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
#filename ⇒ Object (readonly)
Returns the value of attribute filename.
6 7 8 |
# File 'lib/rspreadsheet/workbook.rb', line 6 def filename @filename end |
#xmlnode ⇒ Object (readonly)
debug
7 8 9 |
# File 'lib/rspreadsheet/workbook.rb', line 7 def xmlnode @xmlnode end |
Instance Method Details
#[](index_or_name) ⇒ Object
45 |
# File 'lib/rspreadsheet/workbook.rb', line 45 def [](index_or_name); self.worksheets(index_or_name) end |
#create_worksheet(name = "Sheet#{worksheets_count+1}") ⇒ Object Also known as: add_worksheet
16 17 18 19 20 |
# File 'lib/rspreadsheet/workbook.rb', line 16 def create_worksheet(name = "Sheet#{worksheets_count+1}") sheet = Worksheet.new(name,self) register_worksheet(sheet) return sheet end |
#create_worksheet_from_node(source_node) ⇒ Object
11 12 13 14 15 |
# File 'lib/rspreadsheet/workbook.rb', line 11 def create_worksheet_from_node(source_node) sheet = Worksheet.new(source_node,self) register_worksheet(sheet) return sheet end |
#mime ⇒ Object
Returns Mime of the file.
49 |
# File 'lib/rspreadsheet/workbook.rb', line 49 def mime; 'application/vnd.oasis.opendocument.spreadsheet'.freeze end |
#mime_preferred_extension ⇒ String Also known as: mime_default_extension
Returns Prefered file extension.
51 |
# File 'lib/rspreadsheet/workbook.rb', line 51 def mime_preferred_extension; 'ods'.freeze end |
#save(io = nil) ⇒ Object Also known as: to_io, save_to_io
Saves the worksheet. Optionally you can provide new filename or IO stream to which the file should be saved.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rspreadsheet/workbook.rb', line 69 def save(io=nil) case when @filename.nil? && io.nil? raise 'New file should be named on first save.' when @filename.nil? && (io.kind_of?(String) || io.kind_of?(File) || io.kind_of?(IO) || io.kind_of?(StringIO)) Zip::File.open(TEMPLATE_FILE_NAME) do |empty_template_zip| # open empty_template file write_zip_to(io) do |output_zip| # open output stream of file copy_internally_without_content(empty_template_zip,output_zip) # copy empty_template internals update_manifest_and_content_xml(empty_template_zip,output_zip) # update xmls + pictures end end when @filename.kind_of?(String) && io.nil? write_zip_to(@filename) do |input_and_output_zip| # open old file update_manifest_and_content_xml(input_and_output_zip,input_and_output_zip) # input and output are identical end when @filename.kind_of?(String) && (io.kind_of?(String) || io.kind_of?(File)) io = io.path if io.kind_of?(File) # convert file to its filename FileUtils.cp(@filename , io) # copy file externally @filename = io # remember new name save_to_io(nil) # continue modyfying file on spot when @filename.kind_of?(String) && (io.kind_of?(IO) || io.kind_of?(StringIO)) Zip::File.open(@filename) do | old_zip | # open old file write_zip_to(io) do |output_zip_stream| # open output stream copy_internally_without_content(old_zip,output_zip_stream) # copy the old internals update_manifest_and_content_xml(old_zip,output_zip_stream) # update xmls + pictures end end # rewind result io.rewind else end end |
#worksheet_names ⇒ String
Returns names of sheets in the workbook.
25 |
# File 'lib/rspreadsheet/workbook.rb', line 25 def worksheet_names; @worksheets.collect{ |ws| ws.name } end |
#worksheets(index_or_name) ⇒ Worskheet Also known as: worksheet, sheet, sheets
Returns worksheet with given index or name.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/rspreadsheet/workbook.rb', line 28 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_count ⇒ Integer
Returns number of sheets in the workbook.
23 |
# File 'lib/rspreadsheet/workbook.rb', line 23 def worksheets_count; @worksheets.length end |
#xmldoc ⇒ Object
8 |
# File 'lib/rspreadsheet/workbook.rb', line 8 def xmldoc; @xmlnode.doc end |