FasterCSV layout

422 Views Asked by At

I need to layout my CSV into columns not rows. So going down the spreadsheet not across. For example:

Header 1, value1.1, value2.1
Header 2, value1.2, value2.2
Header 3, value1.3, value2.3

Does anyone know how to do this? I've been through the documentation and can't find anything about changing the layout to columns.

EDIT:

row_data = [];
csv_string = FasterCSV.generate do |csv|
  # header row
  row_data << ["id", "Name", "Age"]

  # data rows
  Playerapplication.find_each do |player|
    row_data << [player.id, player.name, player.age]
  end

  row_data.transpose
  csv << row_data
end

# send it to the browser
send_data csv_string,
          :type => 'text/csv; charset=iso-8859-1; header=present',
          :disposition => "attachment; filename=players_application.csv"
1

There are 1 best solutions below

3
Jakub Hampl On BEST ANSWER

Simply use Array#transpose on your data before writing to CSV.

If you modify your code like this:

row_data = [];
csv_string = FasterCSV.generate do |csv|
  # header row
  row_data << ["id", "Name", "Age"]

  # data rows
  Playerapplication.find_each do |player|
    row_data << [player.id, player.name, player.age]
  end

  row_data.transpose.each do |row|
    csv << row
  end
end

it works for me.