def write_from_scratch workbook, io
sanitize_worksheets workbook.worksheets
collect_formats workbook
sheets = worksheets workbook
buffer1 = StringIO.new ''
write_bof workbook, buffer1, :globals
write_encoding workbook, buffer1
write_dsf workbook, buffer1
write_tabid workbook, buffer1
write_protect workbook, buffer1
write_password workbook, buffer1
write_window1 workbook, buffer1
write_datemode workbook, buffer1
write_precision workbook, buffer1
write_refreshall workbook, buffer1
write_bookbool workbook, buffer1
write_fonts workbook, buffer1
write_formats workbook, buffer1
write_xfs workbook, buffer1
write_styles workbook, buffer1
buffer1.rewind
buffer2 = StringIO.new ''
write_sst workbook, buffer2, buffer1.size
write_eof workbook, buffer2
buffer2.rewind
sheets.each do |worksheet| worksheet.write_from_scratch end
Ole::Storage.open io do |ole|
ole.file.open 'Workbook', 'w' do |writer|
writer.write buffer1.read
write_boundsheets workbook, writer, buffer1.size + buffer2.size
writer.write buffer2.read
sheets.each do |worksheet|
writer.write worksheet.data
end
end
end
end