Nenhum sistema vive sozinho. Mais cedo ou mais tarde, alguém vai pedir para exportar uma planilha com dados ou importar informações vindas do time comercial, financeiro ou de um cliente.
E é nessa hora que muitos devs se enrolam. Arquivos quebrados, colunas desalinhadas, importações que travam a aplicação… quem nunca?
A boa notícia é que no Rails dá pra lidar com CSV e Excel de um jeito simples e profissional. Nesse artigo, vou te mostrar como.
Exportando dados para CSV no Rails
O CSV é o formato mais comum para troca de informações entre sistemas. E no Rails, você não precisa de nenhuma gem extra para começar — o Ruby já traz suporte nativo.
Um exemplo simples de exportação:
require "csv"
class ProductsController < ApplicationController
def export_csv
products = Product.all
csv_data = CSV.generate("", col_sep: ";") do |csv|
csv << ["ID", "Nome", "Preço"]
products.each do |product|
csv << [product.id, product.name, product.price]
end
end
send_data csv_data, filename: "products.csv"
end
endA partir do Ruby 3.4.x o CSV foi extraído como uma gem. Os comandos continuam os mesmos, para adicionar no Gemfile gem "csv".
Aqui criamos um endpoint que gera um CSV com os dados dos produtos. Ao acessar a rota, o navegador já baixa o arquivo pronto.
Importando dados de CSV
Exportar é fácil, mas muitas vezes você também precisa importar dados para dentro do sistema.
No Rails, dá pra fazer isso lendo linha por linha com CSV.foreach:
def import_csv
file = params[:file]
CSV.foreach(file.path, headers: true) do |row|
Product.create!(
name: row["Nome"],
price: row["Preço"]
)
end
endDica: antes de salvar direto no banco, sempre valide os dados. Um erro comum é importar sem checar duplicatas ou campos obrigatórios.
Exportando dados para Excel (XLSX)
Muitas empresas preferem Excel em vez de CSV, porque além dos dados, precisam de formatação.
Para isso, podemos usar a gem axlsx_rails.
# Gemfile
gem "axlsx_rails"Depois criamos um template:
# app/views/products/export.xlsx.axlsx
wb = xlsx_package.workbook
wb.add_worksheet(name: "Produtos") do |sheet|
sheet.add_row ["ID", "Nome", "Preço"]
@products.each do |product|
sheet.add_row [product.id, product.name, product.price]
end
endE no controller:
def export_xlsx
@products = Product.all
respond_to do |format|
format.xlsx { render xlsx: "export", filename: "products.xlsx" }
end
endPronto: agora você tem um arquivo Excel bonitinho com uma aba e todos os registros.
Uso prático: relatórios para clientes, exportar dados para times não técnicos, integração com departamentos que trabalham direto no Excel.
Até onde dá para ir?
O que mostramos aqui já é nível profissional — dá pra colocar em produção hoje mesmo e resolver a maioria das demandas de importação e exportação de dados.
Mas existem cenários que exigem mais:
Múltiplas abas em um mesmo arquivo Excel
Formatação avançada (cores, bordas, filtros automáticos)
Importações de milhares ou milhões de linhas sem travar o app
Processamento em segundo plano com feedback para o usuário
Esses são os casos em que a brincadeira vira nível JEDI. 😉
Conclusão
O Rails oferece recursos poderosos para trabalhar com planilhas, e o melhor: sem complicação.
Você já viu como exportar CSV, importar dados e até gerar Excel de forma profissional.
Agora, se o seu sistema precisa dar o próximo passo — relatórios corporativos complexos, planilhas formatadas e importações gigantes — aí entramos em técnicas mais avançadas, que quase não aparecem na documentação oficial.
Para os membros da Academia do Ruby, esse é só o começo. A Parte 2 desse conteúdo já vem aí, exclusiva para quem faz parte da comunidade, mostrando o jeito JEDI de trabalhar com planilhas no Rails.
Ainda não há comentários. Seja o primeiro a comentar!