Skip to content

asanghi/excel_rails

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

excel_rails
=================

A Rails plugin to generate xls documents by using rxls templates.

Based on Defv's railsxls plugin (http://github.com/DefV/railsxls) without the Java part.

Also inspired heavily from prawn_rails gem (http://github.com/Volundr/prawn-rails).

The gem has a new cool feature which lets you pick a hand-crafted excel file as a template in your
view. Pass the path to your excel template using the :template_path option and instead of creating
a blank spreadsheet for you to fill, your excel file will be parsed and yielded for you to fill in the blank.
Thanks to Stepan Filatov @ https://github.com/sfilatov

Installation
============

Note that this gem works only with Rails 3

Put the following line in your Gemfile
gem 'excel_rails'

Run 'bundle install'

Name your views as action.xls.rxls (See below for usage)

Make a request to your application with .xls extension to respond to excel.

Dependencies
============

ruby-ole
spreadsheet
iconv

Example
=======

Example spreadsheet usage as found here: http://github.com/jacobat/ruby-spreadsheet

-- in the view "index.xls.rxls"

excel_document(:filename => "all_lines.xls") do |workbook|
  sheet = workbook.create_worksheet
  sheet.name = "What's in a name"

  sheet.row(0).concat %w{Name Country Acknowlegement}
  sheet[1,0] = 'Japan'
  row = sheet.row(1)
  row.push 'Creator of Ruby'
  row.unshift 'Yukihiro Matsumoto'
  sheet.row(2).replace [ 'Daniel J. Berger', 'U.S.A.',
                         'Author of original code for Spreadsheet::Excel' ]
  sheet.row(3).push 'Charles Lowe', 'Author of the ruby-ole Library'
  sheet.row(3).insert 1, 'Unknown'
  sheet.update_row 4, 'Hannes Wyss', 'Switzerland', 'Author'

  sheet.row(0).height = 18

  format = Spreadsheet::Format.new :color => :blue,
                                   :weight => :bold,
                                   :size => 18
  sheet.row(0).default_format = format

  bold = Spreadsheet::Format.new :weight => :bold
  4.times do |x| sheet.row(x + 1).set_format(0, bold) end
end

In the above file excel_document yields a new Spreadsheet:Workbook object to the block.
If you provide a :filename option to the excel_document method, a filename will be provided to the downloaded file.
If your browser supports it you can inline the excel document as well.

If you provide :template_path - path to existed xls file, workbook will be loaded from the file.

excel_document(:filename => "report.xls", :template_path => "/tmp/report_template.xls") do |workbook|
    sheet = workbook.worksheet 0
    ... # any staff form previous example
end

If you provide a :renderer option to the excel_document method, you can use your customized Spreadsheet::Workbook to create a new excel file.

Your view "index.xls.rxls" file could look like this:

excel_document(:filename => "foobar.xls", :renderer => Spreadsheet::CustomWorkbook) do |workbook|
  workbook.new_worksheet("#{t_model(Product)}")
end

And the renderer class ("lib/spreadsheet"):

module Spreadsheet
  class CustomWorkbook < Spreadsheet::Workbook

    attr_accessor :sheet

    def new_worksheet
      @sheet = workbook.create_worksheet
      @sheet.name = "What's in a name"
    end
  end 
end

-- in the controller

def index
  @lines = Line.find(:all)

  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @lines }
    format.xls
  end
end


Copyright (c) 2010 Aditya Sanghi, released under the MIT license

About

rxls views for Rails 3

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages