DEV Community

Yaroslav Shmarov
Yaroslav Shmarov

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

1

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/

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

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.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs