DEV Community

Yaroslav Shmarov
Yaroslav Shmarov

Posted on • Originally published at blog.corsego.com on

Export from database table to Excel Workbook. Level 1

Use the gem caxlsx to download and format data into XLSX.

  • XLS - proprietary Microsoft Excel format
  • XLSX - free format

Gemfile

gem 'caxlsx'
gem 'caxlsx_rails'
Enter fullscreen mode Exit fullscreen mode

/app/controllers/posts_controller.rb

  def index
    respond_to do |format|
      format.html do
        @posts = Post.order(created_at: :desc)
      end
      format.xlsx do
        @posts = Post.all
        render xlsx: 'posts', template: 'posts/whatever'
      end
    end
  end
Enter fullscreen mode Exit fullscreen mode

/app/views/posts/whatever.xlsx.axlsx

wb = xlsx_package.workbook

wb.add_worksheet(name: "Post") do |sheet|
  sheet.add_row ['name', 'creation date']
  @posts.each do |post|
    sheet.add_row [post.name, post.created_at]
  end
end
Enter fullscreen mode Exit fullscreen mode

any view:

= link_to 'xlsx', posts_path(format: :xlsx), target: :_blank
Enter fullscreen mode Exit fullscreen mode

That's it! Now you can export you posts to Excel!

Here is a more detailed article (that initially inspired me): https://www.sitepoint.com/generate-excel-spreadsheets-rails-axlsx-gem/

Top comments (2)

Collapse
 
kalashnikovisme profile image
Pavel Kalashnikov

Looks like, we can just add gem 'caxlsx_rails'.

gem 'caxlsx' is a dependency and will be installed :)

Collapse
 
eminarium profile image
Merdan Durdyyev

Unfortunately it does not install automatically.
I had an hour of misunderstanding because of this.
We have to explicitly include

`gem 'caxlsx_rails'`
Enter fullscreen mode Exit fullscreen mode

in Gemfile.