Sha256: 9d95aab7373ac6223c80239296bad5b181b61f43cbf88e9318b8a50c1a94eb35

Contents?: true

Size: 1.8 KB

Versions: 47

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

require "rubyXL"

require "rubyXL/convenience_methods/cell"
require "rubyXL/convenience_methods/font"
require "rubyXL/convenience_methods/workbook"
require "rubyXL/convenience_methods/worksheet"

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
        workbook = RubyXL::Workbook.new
        worksheet = workbook[0]

        headers.each_with_index.map do |header, index|
          worksheet.change_column_width(index, 20)
          worksheet.add_cell(0, index, header)
        end

        worksheet.change_row_fill(0, "c0c0c0")
        worksheet.change_row_bold(0, true)
        worksheet.change_row_horizontal_alignment(0, "center")

        processed_collection.each_with_index do |resource, index|
          headers.each_with_index do |header, j|
            if resource[header].respond_to?(:strftime)
              cell = worksheet.add_cell(index + 1, j, custom_sanitize(resource[header]))
              resource[header].is_a?(Date) ? cell.set_number_format("dd.mm.yyyy") : cell.set_number_format("dd.mm.yyyy HH:MM:SS")
              next
            end
            worksheet.add_cell(index + 1, j, custom_sanitize(resource[header]))
          end
        end

        ExportData.new(workbook.stream.string, "xlsx")
      end
    end
  end
end

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
decidim-core-0.30.0.rc1 lib/decidim/exporters/excel.rb
decidim-core-0.29.2 lib/decidim/exporters/excel.rb
decidim-core-0.28.5 lib/decidim/exporters/excel.rb
decidim-core-0.29.1 lib/decidim/exporters/excel.rb
decidim-core-0.28.4 lib/decidim/exporters/excel.rb
decidim-core-0.27.9 lib/decidim/exporters/excel.rb
decidim-core-0.29.0 lib/decidim/exporters/excel.rb
decidim-core-0.28.3 lib/decidim/exporters/excel.rb
decidim-core-0.27.8 lib/decidim/exporters/excel.rb
decidim-core-0.29.0.rc4 lib/decidim/exporters/excel.rb
decidim-core-0.29.0.rc3 lib/decidim/exporters/excel.rb
decidim-core-0.29.0.rc2 lib/decidim/exporters/excel.rb
decidim-core-0.29.0.rc1 lib/decidim/exporters/excel.rb
decidim-core-0.28.2 lib/decidim/exporters/excel.rb
decidim-core-0.27.7 lib/decidim/exporters/excel.rb
decidim-core-0.28.1 lib/decidim/exporters/excel.rb
decidim-core-0.27.6 lib/decidim/exporters/excel.rb
decidim-core-0.26.10 lib/decidim/exporters/excel.rb
decidim-core-0.26.9 lib/decidim/exporters/excel.rb
decidim-core-0.28.0 lib/decidim/exporters/excel.rb