class Array def to_xls(options = {}) output = '' if self.any? instance = self.first attributes = instance.attributes.keys.sort.map { |c| c.to_sym } if options[:only] # the "& attributes" get rid of invalid columns columns = Array(options[:only]) & attributes else columns = attributes - Array(options[:except]) end columns += options[:methods].to_a if columns.any? unless options[:headers] == false output << "" columns.each do |column| output << "#{instance.class.human_attribute_name(column)}" end output << "" end self.each do |item| output << "" columns.each do |column| value = item.send(column) output << "#{value}" end output << "" end end end output << '
' end end