Sha256: aa6d25204883910dee1ab87659403d5e2bcaf0ed1ed1ae68dd4186e3b669787f

Contents?: true

Size: 1.35 KB

Versions: 24

Compression:

Stored size: 1.35 KB

Contents

require 'spreadsheet'
require 'htmlentities'

class Array

  def to_xls(options = {}, &block)

    return '' if self.empty? && options[:prepend].blank?

    columns = []
    options.reverse_merge!(:header => true)

    xls_report = StringIO.new
    book = Spreadsheet::Workbook.new
    sheet = book.create_worksheet

    if options[:only]
      columns = Array(options[:only]).map(&:to_sym)
    elsif !self.empty?
      columns = self.first.class.column_names.map(&:to_sym) - Array(options[:except]).map(&:to_sym)
    end

    return '' if columns.empty? && options[:prepend].blank?

    sheet_index = 0

    unless options[:prepend].blank?
      options[:prepend].each do |array|
        sheet.row(sheet_index).concat(array)
        sheet_index += 1
      end
    end

    if options[:header]
      sheet.row(sheet_index).concat(options[:header_columns].blank? ? columns.map(&:to_s).map(&:humanize) : options[:header_columns])
      sheet_index += 1
    end

    self.each_with_index do |obj, index|
      if block
        sheet.row(sheet_index).replace(columns.map { |column| block.call(column, obj.send(column), index) })
      else
        sheet.row(sheet_index).replace(columns.map { |column| HTMLEntities.new().decode(obj.send(column).to_s).gsub(/\r\n?/, "").strip_tags })
      end
      sheet_index += 1
    end

    book.write(xls_report)

    xls_report.string
  end

end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
my_admin-0.1.13 lib/my_admin/to_xls.rb
my_admin-0.1.12 lib/my_admin/to_xls.rb
my_admin-0.1.11 lib/my_admin/to_xls.rb
my_admin-0.1.10 lib/my_admin/to_xls.rb
my_admin-0.1.9 lib/my_admin/to_xls.rb
my_admin-0.1.8 lib/my_admin/to_xls.rb
my_admin-0.1.7 lib/my_admin/to_xls.rb
my_admin-0.1.6 lib/my_admin/to_xls.rb
my_admin-0.1.5 lib/my_admin/to_xls.rb
my_admin-0.1.4 lib/my_admin/to_xls.rb
my_admin-0.1.3 lib/my_admin/to_xls.rb
my_admin-0.1.2 lib/my_admin/to_xls.rb
my_admin-0.1.1 lib/my_admin/to_xls.rb
my_admin-0.0.12 lib/my_admin/to_xls.rb
my_admin-0.0.11 lib/my_admin/to_xls.rb
my_admin-0.0.10 lib/my_admin/to_xls.rb
my_admin-0.0.9 lib/my_admin/to_xls.rb
my_admin-0.0.8 lib/my_admin/to_xls.rb
my_admin-0.0.7 lib/my_admin/to_xls.rb
my_admin-0.0.6 lib/my_admin/to_xls.rb