Sha256: 2d261cd2dd063d5f9b0e3491be2b0d1c8b4145f8c5dc8b96b4a6f7a4519a6c72

Contents?: true

Size: 1.37 KB

Versions: 14

Compression:

Stored size: 1.37 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| 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.9.3 lib/decidim/exporters/excel.rb
decidim-core-0.9.2 lib/decidim/exporters/excel.rb
decidim-core-0.9.1 lib/decidim/exporters/excel.rb
decidim-core-0.9.0 lib/decidim/exporters/excel.rb
decidim-core-0.8.4 lib/decidim/exporters/excel.rb
decidim-core-0.8.3 lib/decidim/exporters/excel.rb
decidim-core-0.8.2 lib/decidim/exporters/excel.rb
decidim-core-0.8.1 lib/decidim/exporters/excel.rb
decidim-core-0.8.0 lib/decidim/exporters/excel.rb
decidim-core-0.7.4 lib/decidim/exporters/excel.rb
decidim-core-0.7.3 lib/decidim/exporters/excel.rb
decidim-core-0.7.2 lib/decidim/exporters/excel.rb
decidim-core-0.7.1 lib/decidim/exporters/excel.rb
decidim-core-0.7.0 lib/decidim/exporters/excel.rb