= Ekuseru

Ekuseru is a plugin to generate Microsoft Excel documents with Rails.
This plugin
provides templating abilities to create excel documents using Spreadsheet gem.

Having a template is very convenient, because we can define how our file looks
like in the views, and we can access all helper methods defined in rails.

== Installation

=== Spreadsheet gem

You will need to install Spreadsheet gem to use this plugin.

* Edit your config/environtment.rb, add:

  config.gem "spreadsheet"

* Install Spreadsheet gem if you haven't, run:

  rake gems:install

* or just install it with:

  sudo gem install spreadsheet

=== Ekuseru plugin

Run the following command in your RAILS_ROOT:

  ./script/plugin install git://github.com/xinuc/ekuseru.git

Or, simply get the tarball at:

  http://github.com/xinuc/ekuseru/tarball/master

extract it to your vendor/plugins and rename it to 'ekuseru'

== Usage

=== Controller

To generate xls document, add <code>format.xls</code> in your controller.

Example:

  class ProductsController < ApplicationController
    def index
      @products = Product.all

      respond_to do |format|
        format.html
        format.xls # add this line to generate xls document
      end
    end

    ...

  end

=== Template

Ekuseru will use .eku files as the template. So, with the example above,
we will need to create 'index.xls.eku' in app/views/products/.
Basically it's just an ordinary ruby file.
In the template, we will get a <code>xls</code> variable which is a
Spreadsheet::Workbook object ready to be modified like whatever we want.

Consult the Spreadsheet documentation to create the template.

http://spreadsheet.rubyforge.org/files/GUIDE_txt.html

You can set the filename sent to the user with <code>__filename</code> variable.

In the template :

  # set the filename sent to the user with __filename variable
  # this is optional, if you don't set it, the name will be like products.xls

  __filename = "Products Catalog.xls"

  # we get 'xls' variable which is a Workbook object
  # then we can create some worksheet to work with, with create_worksheet method

  sheet1 = xls.create_worksheet

  # fill the [0, 0] cell

  sheet1[0, 0] = "Products Catalog"

  # Worksheet#row will return a Row object. We can modify it just like an Array.
  # this code will return the second row and fill the cells.

  sheet1.row(1).concat ["Name", "Price", "Stock", "Description"]

  # we can access the instance variable we set in the controller, just like
  # in erb template

  @products.each_with_index do |p, i|
    sheet1.update_row i+2, p.name, p.price, p.stock, p.description
  end

  # we can add some formatting using Spreadsheet::Format object

  title_format = Spreadsheet::Format.new(:color => :blue, :weight =>
:bold, :size => 18)
  sheet1.row(0).set_format(0, title_format)

  bold = Spreadsheet::Format.new(:weight => :bold)
  sheet1.row(1).default_format = bold

That's it. Then you can create a link to the xls file if you want, like:

  <%= link_to 'Excel', products_path(:format => :xls) %>

Kirim email ke