Class: RubyXL::Workbook
- Inherits:
-
OOXMLTopLevelObject
- Object
- OOXMLObject
- OOXMLTopLevelObject
- RubyXL::Workbook
- Includes:
- Enumerable, RelationshipSupport, WorkbookConvenienceMethods
- Defined in:
- lib/rubyXL/objects/workbook.rb
Overview
Constant Summary collapse
- CONTENT_TYPE =
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'
- CONTENT_TYPE_MACRO =
'application/vnd.ms-excel.sheet.macroEnabled.main+xml'
- REL_TYPE =
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'
- DATE1904 =
DateTime.new(1904, 1, 1)
- DATE1899 =
Subtracting one day to accomodate for erroneous 1900 leap year compatibility only for 1900 based dates
DateTime.new(1899, 12, 31) - 1
- MARCH_1_1900 =
61
- APPLICATION =
'Microsoft Macintosh Excel'
- APPVERSION =
'12.0000'
- @@debug =
nil
Constants included from WorkbookConvenienceMethods
RubyXL::WorkbookConvenienceMethods::SHEET_NAME_TEMPLATE
Constants inherited from OOXMLTopLevelObject
OOXMLTopLevelObject::ROOT, OOXMLTopLevelObject::SAVE_ORDER
Instance Attribute Summary collapse
-
#worksheets ⇒ Object
Returns the value of attribute worksheets.
Attributes included from RelationshipSupport
#generic_storage, #relationship_container
Attributes inherited from OOXMLTopLevelObject
Instance Method Summary collapse
- #before_write_xml ⇒ Object
- #content_type ⇒ Object
- #date_to_num(date) ⇒ Object
-
#initialize(worksheets = [], filepath = nil, creator = nil, modifier = nil, created_at = nil, company = '', application = APPLICATION, appversion = APPVERSION, date1904 = 0) ⇒ Workbook
constructor
A new instance of Workbook.
- #num_to_date(num) ⇒ Object
- #related_objects ⇒ Object
-
#save(filepath = nil) ⇒ Object
(also: #write)
Save the resulting XLSX file to the specified location.
-
#stream ⇒ Object
Return the resulting XLSX file in a stream (useful for sending over HTTP).
- #xlsx_path ⇒ Object
Methods included from WorkbookConvenienceMethods
#[], #add_worksheet, #application, #application=, #appversion, #appversion=, #borders, #cell_xfs, #company, #company=, #created_at, #created_at=, #creator, #creator=, #date1904, #date1904=, #each, #fills, #fonts, #get_fill_color, #modified_at, #modified_at=, #modifier, #modifier=, #modify_alignment, #modify_border, #modify_fill, #register_new_fill, #register_new_font, #register_new_xf
Methods included from RelationshipSupport
#attach_relationship, #collect_related_objects, included, #load_relationships, #store_relationship
Methods inherited from OOXMLTopLevelObject
#add_to_zip, #file_index, parse_file, set_namespaces
Methods included from OOXMLObjectInstanceMethods
#==, included, #index_in_collection, #write_xml
Constructor Details
#initialize(worksheets = [], filepath = nil, creator = nil, modifier = nil, created_at = nil, company = '', application = APPLICATION, appversion = APPVERSION, date1904 = 0) ⇒ Workbook
Returns a new instance of Workbook.
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 |
# File 'lib/rubyXL/objects/workbook.rb', line 423 def initialize(worksheets = [], filepath = nil, creator = nil, modifier = nil, created_at = nil, company = '', application = APPLICATION, appversion = APPVERSION, date1904 = 0) super() # Order of sheets in the +worksheets+ array corresponds to the order of pages in Excel UI. # SheetId's, rId's, etc. are completely unrelated to ordering. @worksheets = worksheets add_worksheet if @worksheets.empty? @theme = RubyXL::Theme.default @shared_strings_container = RubyXL::SharedStringsTable.new @stylesheet = RubyXL::Stylesheet.default @relationship_container = RubyXL::OOXMLRelationshipsFile.new @root = RubyXL::WorkbookRoot.default @root.workbook = self @root.filepath = filepath creation_time = DateTime.parse(created_at) rescue DateTime.now self.created_at = creation_time self.modified_at = creation_time self.company = company self.application = application self.appversion = appversion self.creator = creator self.modifier = modifier self.date1904 = date1904 > 0 end |
Instance Attribute Details
#worksheets ⇒ Object
Returns the value of attribute worksheets.
355 356 357 |
# File 'lib/rubyXL/objects/workbook.rb', line 355 def worksheets @worksheets end |
Instance Method Details
#before_write_xml ⇒ Object
357 358 359 360 361 362 363 364 365 366 367 |
# File 'lib/rubyXL/objects/workbook.rb', line 357 def before_write_xml self.sheets = RubyXL::Sheets.new worksheets.each_with_index { |sheet, i| rel = relationship_container.find_by_target(sheet.xlsx_path) sheets << RubyXL::Sheet.new(:name => sheet.sheet_name[0..30], # Max sheet name length is 31 char :sheet_id => sheet.sheet_id || (i + 1), :state => sheet.state, :r_id => rel.id) } true end |
#content_type ⇒ Object
306 307 308 |
# File 'lib/rubyXL/objects/workbook.rb', line 306 def content_type if macros then CONTENT_TYPE_MACRO else CONTENT_TYPE end end |
#date_to_num(date) ⇒ Object
403 404 405 |
# File 'lib/rubyXL/objects/workbook.rb', line 403 def date_to_num(date) date && (date.ajd - base_date().ajd).to_f end |
#num_to_date(num) ⇒ Object
407 408 409 410 411 412 413 414 |
# File 'lib/rubyXL/objects/workbook.rb', line 407 def num_to_date(num) # Bug-for-bug Excel compatibility (https://support.microsoft.com/kb/214058/) if num && num < MARCH_1_1900 then num += 1 unless workbook_properties && workbook_properties.date1904 end num && (base_date + num) end |
#related_objects ⇒ Object
311 312 313 |
# File 'lib/rubyXL/objects/workbook.rb', line 311 def [ calculation_chain, stylesheet, theme, shared_strings_container, macros ] + @worksheets end |
#save(filepath = nil) ⇒ Object Also known as: write
Save the resulting XLSX file to the specified location
379 380 381 382 383 384 385 386 387 388 389 390 |
# File 'lib/rubyXL/objects/workbook.rb', line 379 def save(filepath = nil) filepath ||= root.filepath extension = File.extname(filepath) unless %w{.xlsx .xlsm}.include?(extension.downcase) raise "Unsupported extension: #{extension} (only .xlsx and .xlsm files are supported)." end File.open(filepath, "wb") { |output_file| FileUtils.copy_stream(root.stream, output_file) } return filepath end |
#stream ⇒ Object
Return the resulting XLSX file in a stream (useful for sending over HTTP)
374 375 376 |
# File 'lib/rubyXL/objects/workbook.rb', line 374 def stream root.stream end |
#xlsx_path ⇒ Object
369 370 371 |
# File 'lib/rubyXL/objects/workbook.rb', line 369 def xlsx_path ROOT.join('xl', 'workbook.xml') end |