Creating Excel Documents with Ruby On Rails
Generating an excel document is not so difficult to achieve but limited unfortunately. You cannot write formulas or generate charts via the existing available tools but you can achieve usable results overall. Here is a snippet I used to generate sales forecasts involving data pulled together from two active record objects. Here is the gem you'll need.
- Update: the link I was posting to prior points to a new Ruby project. The correct link can be found here.
# Builds an excel report.
def report
# Grab time span for report
get_span
# Define stats levels to include.
status = %w(high medium low lost won)
# Create workbook.
file = "#{session[:user_id]}_#{Time.now.strftime("%m%d%G%s")}_forecast.xls"
workbook = Excel.new("#{RAILS_ROOT}/reports/#{file}")
heading = Format.new(
:color => "green",
:bold => true,
:underline => true
)
data = Format.new(
:color => "black",
:bold => false,
:underline => false
)
workbook.add_format(heading)
workbook.add_format(data)
# Cycle through each status level
status.each do |status|
start_column, start_row = 2, 3
worksheet = workbook.add_worksheet(status)
opportunities = get_opportunities_that_are(status)
#Cycle through the opportunities
row = start_row
totals, dates = [], []
for opp in opportunities
worksheet.write(row,start_column,opp.client,heading)
column = start_column + 1
opp.find_forecasts_within(@span[0],@span[-1]).each do |i|
worksheet.write(row,column,i.volume,data)
totals[column] = i.volume + totals[column].to_i
dates[column] = i.date.strftime("%b '%y")
column += 1
end
row += 1
end
# Generate the totals row and monthly headings
column = start_column+1
@span.length.times do
worksheet.write(row,column,totals[column],heading)
worksheet.write(start_row-1,column,dates[column],heading)
column += 1
end
end
workbook.close
redirect_to :action => 'show'
end