Class: Rspreadsheet::Workbook
- Inherits:
-
Object
- Object
- Rspreadsheet::Workbook
- Defined in:
- lib/rspreadsheet/workbook.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#filename ⇒ Object
readonly
Returns the value of attribute filename.
-
#xmlnode ⇒ Object
readonly
debug.
Worksheet 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) ⇒ Worksheet
(also: #worksheet, #sheet, #sheets)
Worksheet with given index or name.
-
#worksheets_count ⇒ Integer
(also: #worksheet_count)
Number of sheets in the workbook.
Loading and saving related methods collapse
- #flat_format? ⇒ Boolean
-
#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.
- #normal_format? ⇒ Boolean
-
#save(io = nil) ⇒ Object
(also: #save_to_io, #save_as)
Saves the worksheet.
- #to_io ⇒ Object
- #write_ods_to_io(io) ⇒ Object
Instance Method Summary collapse
Constructor Details
#initialize(afilename = nil) ⇒ Workbook
Returns a new instance of Workbook.
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rspreadsheet/workbook.rb', line 56 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.
7 8 9 |
# File 'lib/rspreadsheet/workbook.rb', line 7 def filename @filename end |
#xmlnode ⇒ Object (readonly)
debug
8 9 10 |
# File 'lib/rspreadsheet/workbook.rb', line 8 def xmlnode @xmlnode end |
Instance Method Details
#[](index_or_name) ⇒ Object
47 |
# File 'lib/rspreadsheet/workbook.rb', line 47 def [](index_or_name); self.worksheets(index_or_name) end |
#create_worksheet(name = "Sheet#{worksheets_count+1}") ⇒ Object Also known as: add_worksheet
17 18 19 20 21 |
# File 'lib/rspreadsheet/workbook.rb', line 17 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
12 13 14 15 16 |
# File 'lib/rspreadsheet/workbook.rb', line 12 def create_worksheet_from_node(source_node) sheet = Worksheet.new(source_node,self) register_worksheet(sheet) return sheet end |
#flat_format? ⇒ Boolean
111 |
# File 'lib/rspreadsheet/workbook.rb', line 111 def flat_format?; false end |
#mime ⇒ Object
Returns Mime of the file.
51 |
# File 'lib/rspreadsheet/workbook.rb', line 51 def mime; 'application/vnd.oasis.opendocument.spreadsheet'.freeze end |
#mime_preferred_extension ⇒ String Also known as: mime_default_extension
Returns Prefered file extension.
53 |
# File 'lib/rspreadsheet/workbook.rb', line 53 def mime_preferred_extension; 'ods'.freeze end |
#normal_format? ⇒ Boolean
112 |
# File 'lib/rspreadsheet/workbook.rb', line 112 def normal_format?; true end |
#save(io = nil) ⇒ Object Also known as: save_to_io, save_as
Saves the worksheet. Optionally you can provide new filename or IO stream to which the file should be saved.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/rspreadsheet/workbook.rb', line 70 def save(io=nil) case when @filename.nil? && io.nil? raise 'New file should be named on first save.' when @filename.kind_of?(String) && io.nil? Tools.output_to_zip_stream(@filename) do |input_and_output_zip| # open old file update_zip_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 io.kind_of?(IO) || io.kind_of?(String) || io.kind_of?(StringIO) Tools.output_to_zip_stream(io) do |output_io| # open output stream of file write_ods_to_io(output_io) end io.rewind if io.kind_of?(StringIO) else raise 'Ivalid combinations of parameter types in save' end end |
#to_io ⇒ Object
93 94 95 |
# File 'lib/rspreadsheet/workbook.rb', line 93 def to_io WorkbookIO.new(self) end |
#worksheet_names ⇒ String
Returns names of sheets in the workbook.
27 |
# File 'lib/rspreadsheet/workbook.rb', line 27 def worksheet_names; @worksheets.collect{ |ws| ws.name } end |
#worksheets(index_or_name) ⇒ Worksheet Also known as: worksheet, sheet, sheets
Returns worksheet with given index or name.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rspreadsheet/workbook.rb', line 30 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 Also known as: worksheet_count
Returns number of sheets in the workbook.
24 |
# File 'lib/rspreadsheet/workbook.rb', line 24 def worksheets_count; @worksheets.length end |
#write_ods_to_io(io) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/rspreadsheet/workbook.rb', line 97 def write_ods_to_io(io) if @filename.nil? Zip::File.open(TEMPLATE_FILE_NAME) do |empty_template_zip| # open empty_template file copy_internally_without_content(empty_template_zip,io) # copy empty_template internals update_zip_manifest_and_content_xml(empty_template_zip,io) # update xmls + pictures end else Zip::File.open(@filename) do | old_zip | # open old file copy_internally_without_content(old_zip,io) # copy the old internals update_zip_manifest_and_content_xml(old_zip,io) # update xmls + pictures end end end |
#xmldoc ⇒ Object
9 |
# File 'lib/rspreadsheet/workbook.rb', line 9 def xmldoc; @xmlnode.doc end |