Method: Array#write_excel

Defined in:
lib/crudboy/ext/array.rb

#write_excel(filename, *fields, **options) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/crudboy/ext/array.rb', line 102

def write_excel(filename, *fields, **options)
  sheet_name = options[:sheet_name] || 'Sheet1'
  generate_excel(filename) do |workbook|
    workbook.add_worksheet(name: sheet_name) do |sheet|
      if size > 0 && first.is_a?(ActiveRecord::Base)
        if fields.empty?
          fields = first.attributes.keys
        else
          fields = fields.map(&:to_s)
        end
        sheet.add_row(fields, types: [:string] * fields.size)
      end
      if size > 0 && first.is_a?(Hash)
        if fields.empty?
          fields = first.keys
        end
        sheet.add_row(fields, types: [:string] * fields.size)
      end
      each do |row|
        if row.is_a?(Array)
          sheet.add_row(row.map(&:to_s), types: [:string] * row.size)
        else
          sheet.add_row(row.slice(*fields).values.map(&:to_s), types: [:string] * fields.size)
        end
      end
    end
  end
end