Sha256: 2c05bd659d25822a26689a5ee46660d1283958a9cbe8b5d0dfa2517a70365511

Contents?: true

Size: 1.38 KB

Versions: 14

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

require "spreadsheet"

module Decidim
  module Exporters
    # Exports any serialized object (Hash) into a readable Excel file. It transforms
    # the columns using slashes in a way that can be afterwards reconstructed
    # into the original nested hash.
    #
    # For example, `{ name: { ca: "Hola", en: "Hello" } }` would result into
    # the columns: `name/ca` and `name/es`.
    #
    # It will maintain types like Integers, Floats & Dates so Excel can deal with
    # them.
    class Excel < CSV
      # Public: Exports a file in an Excel readable format.
      #
      # Returns an ExportData instance.
      def export
        book = Spreadsheet::Workbook.new
        sheet = book.create_worksheet
        sheet.name = "Export"

        sheet.row(0).default_format = Spreadsheet::Format.new(
          weight: :bold,
          pattern: 1,
          pattern_fg_color: :xls_color_14,
          horizontal_align: :center
        )

        sheet.row(0).replace headers

        headers.length.times.each do |index|
          sheet.column(index).width = 20
        end

        processed_collection.each_with_index do |resource, index|
          sheet.row(index + 1).replace(headers.map { |header| custom_sanitize(resource[header]) })
        end

        output = StringIO.new
        book.write output

        ExportData.new(output.string, "xls")
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
decidim-core-0.24.3 lib/decidim/exporters/excel.rb
decidim-core-0.23.6 lib/decidim/exporters/excel.rb
decidim-core-0.24.2 lib/decidim/exporters/excel.rb
decidim-core-0.23.5 lib/decidim/exporters/excel.rb
decidim-core-0.24.1 lib/decidim/exporters/excel.rb
decidim-core-0.24.0 lib/decidim/exporters/excel.rb
decidim-core-0.24.0.rc2 lib/decidim/exporters/excel.rb
decidim-core-0.23.4 lib/decidim/exporters/excel.rb
decidim-core-0.24.0.rc1 lib/decidim/exporters/excel.rb
decidim-core-0.23.3 lib/decidim/exporters/excel.rb
decidim-core-0.23.2 lib/decidim/exporters/excel.rb
decidim-core-0.23.1 lib/decidim/exporters/excel.rb
decidim-core-0.23.1.rc1 lib/decidim/exporters/excel.rb
decidim-core-0.23.0 lib/decidim/exporters/excel.rb