module RubyXL::LegacyWorkbook
def write(filepath = @filepath)
def write(filepath = @filepath) extension = File.extname(filepath) unless %w{.xlsx .xlsm}.include?(extension) raise "Only xlsx and xlsm files are supported. Unsupported extension: #{extension}" end dirpath = File.dirname(filepath) temppath = File.join(dirpath, Dir::Tmpname.make_tmpname([ File.basename(filepath), '.tmp' ], nil)) FileUtils.mkdir_p(temppath) zippath = File.join(temppath, 'file.zip') ::Zip::File.open(zippath, ::Zip::File::CREATE) { |zipfile| [ Writer::ContentTypesWriter, Writer::RootRelsWriter, Writer::CoreWriter, Writer::ThemeWriter, Writer::WorkbookWriter, Writer::StylesWriter ].each { |writer_class| writer_class.new(self).add_to_zip(zipfile) } calculation_chain && calculation_chain.add_to_zip(zipfile) shared_strings_container && shared_strings_container.add_to_zip(zipfile) document_properties.add_to_zip(zipfile) relationship_container.workbook = self relationship_container.add_to_zip(zipfile) [ @media, @external_links, @external_links_rels, @drawings, @drawings_rels, @charts, @chart_rels, @printer_settings, @worksheet_rels, @chartsheet_rels, @macros ].each { |s| s.add_to_zip(zipfile) } @worksheets.each { |sheet| sheet.add_to_zip(zipfile) } } FileUtils.mv(zippath, filepath) FileUtils.rm_rf(temppath) if File.exist?(filepath) return filepath end