Users hate your CSV dumps

Excel and csv horrible experience 4 5b18fb673acb76b4e489fb97a07ce740c807bc0f9df70e6148a047e4bbbd899e

The horrible CSV & Excel user experience in a nutshell

No UTF-8 - Seriously!

Messed up i18n characters.
Frustrates your international users.

Looks messy

It's quite literally a "dump".
Inconsistent formatting of data.

Fixed width columns

Cuts of and hides data.
Requires users to resize columns.

Cloudxls turns CSV into formatted and native Excel files

No boilerplate. No configuration. No quirks... No-brainer!

The cloudxls HTTP API converts your CSV and you receive a nicely formatted Excel spreadsheet. Native and cross-platform xls or xlsx.

Cloudxls.write(csv: "hello,world")

So that you and your users can focus on actual work

Excel and csv horrible experience after full 78c3fe45c334fef17893cc02cb7549caab4510696245bb1293ad132907b5277f

Cloudxls supports following operations:

Read Excel

Convert xls, xlsx to json or csv.
Scrape excel files or simplify data imports.

Write Excel

Turn messy CSV dumps into user-friendly and native Excel spreadsheets.

Modify Excel

Only update specific areas of an Excel file. Great for creating reports.


Writes xls(x) at 3MB/sec on a c4.large EC2 VM

Supports Large Files

Writes large files (> 100MB) without a problem.


Reads also the technically incompatible files


Cloudxls is not a library, but a standalone API that runs over HTTP. So you can read/write/modify Excel from any language.

The API server operates directly on the HTTP stream to optimize turn-around speed.

Cloudxls on premises or cloud 8c271d741c2543d17dd550a2539a3f7d5a38bcc0663e32189a39f66dc8db9cfd

Use cloudxls as SaaS or on-premises

Cloudxls has been used by small and large companies for years as a SaaS cloud service. Our API server is a standalone binary that you can run on-premises or on a single-tenant environment managed by us.

10 minute tutorial for Ruby on Rails


Install the cloudxls gem via your Gemfile.

# Gemfile
gem "cloudxls", '~> 2.0.1'

Sign up here (no credit card required) to get an API Key for our test sandbox. Configure api-key in environment variable CLOUDXLS_API_KEY or configure it manually:

# config/initalizers/cloudxls.rb
# Or configure through ENV variable CLOUDXLS_API_KEY
Cloudxls.api_key = "YOUR-API-KEY"

Add xls and xlsx mime-types to config/initalizers/mime_types.rb

# config/initalizers/mime_types.rb
Mime::Type.register "application/", :xls
Mime::Type.register "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", :xlsx

Don't forget to bundle install and restart your app.

Adding the xls and xlsx exports

Add a xls and xlsx export to your controllers. Assign the response object to self.response_body for streaming response.

# app/controllers/users_controller.rb
def index
  csv_data = "hello,world\nlorem,ipsum"

  headers["Content-Type"] = Mime::Type.lookup_by_extension(params[:format])

  respond_to do |format|
    format.csv  { self.response_body = csv_data }
    format.xls  { self.response_body = Cloudxls.write(csv: csv_data).as_xls }
    format.xlsx { self.response_body = Cloudxls.write(csv: csv_data).as_xlsx }

Inside your templates link to your resource with the desired format parameter.

<%= link_to "export to csv",  users_path(format: :csv) %>
<%= link_to "export to xls",  users_path(format: :xls) %>
<%= link_to "export to xlsx", users_path(format: :xlsx) %>

Deploy to production

To get a production API Key , subscribe to any plan in the dashboard dashboard . You will get a free 14-day trial.

Start Free Trial

Maybe Later...