class Portable::Writers::Spreadsheet
Can write documents to an Excel file.
Constants
- VERSION
Public Instance Methods
write!(filename:, data_provider: Data::Provider.new, time: Time.now.utc)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 18 def write!(filename:, data_provider: Data::Provider.new, time: Time.now.utc) raise ArgumentError, 'filename is required' if filename.to_s.empty? time_in_seconds = Benchmark.measure do ensure_directory_exists(filename) write_file(filename, data_provider, time) end.real [Result.new(filename, time_in_seconds)] end
Private Instance Methods
add_worksheet(workbook, sheet)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 69 def add_worksheet(workbook, sheet) name = sheet.name.to_s.empty? ? 'Sheet1' : sheet.name workbook.add_worksheet(name) end
write_data_table(worksheet, sheet, data_source, time)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 53 def write_data_table(worksheet, sheet, data_source, time) row_renderer = sheet_renderer.row_renderer(sheet.name, data_source.keys) worksheet.append_row(row_renderer.headers) if sheet.include_headers? data_source.data_rows.each do |row| worksheet.append_row(row_renderer.render(row, time)) end end
write_file(filename, data_provider, time)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 32 def write_file(filename, data_provider, time) workbook = FastExcel.open(filename, constant_memory: true) document.sheets.map do |sheet| data_source = data_provider.data_source(sheet.data_source_name) worksheet = add_worksheet(workbook, sheet) write_head(worksheet, sheet, data_source) write_data_table(worksheet, sheet, data_source, time) write_foot(worksheet, sheet, data_source) end workbook.close end
write_foot(worksheet, sheet, data_source)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 63 def write_foot(worksheet, sheet, data_source) data_source.footer_rows.each { |row| worksheet.append_row(row) } sheet.footer_rows.each { |row| worksheet.append_row(row) } end
write_head(worksheet, sheet, data_source)
click to toggle source
# File lib/portable/writers/spreadsheet.rb, line 47 def write_head(worksheet, sheet, data_source) sheet.header_rows.each { |row| worksheet.append_row(row) } data_source.header_rows.each { |row| worksheet.append_row(row) } end