I'm using http://spreadsheet.rubyforge.org to generate a spreadsheet and I'm having trouble with something. I'm opening an existing workbook and adding data to it.
I have manged to get number formatting working to some extent, at least excel is seeing this data as a number, but (very un-excel like) the client would like the number aligned in the center :(
My current code looks something like this:
nfmt = Spreadsheet::Format.new :number_format => '0.00'
row = sheet.row(1)
row[0] = "Result"
row[1] = 45.55
row.set_format 1, nfmt
Maybe a little far fetched but wondered if anybody can help?
Edit for Trevoke
Thanks for helping with this. I've tried your code and it works fine. I guess the difference is I'm editing an existing spreadsheet, in which case the formatting is ignored. Try this:
require 'rubygems'
require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet.open "edit_me.xls" # Blank spreadsheet
sheet1 = book.worksheet 0
format = Spreadsheet::Format.new :horizontal_align => :centre
sheet1.row(0).default_format = format
sheet1.row(0).push 'I rule 2!', 43.56
book.write 'edited_you.xls'
Well, here's the code for the library's format methods: format.rb. Last time I used that gem, it didn't do formatting very well, but it looks like it's been updated since.
You can try this:
54 # Horizontal alignment
55 # Valid values: :default, :left, :center, :right, :fill, :justify, :merge,
56 # :distributed
57 # Default: :default
58 enum :horizontal_align, :default, :left, :center, :right, :fill, :justify,
59 :merge, :distributed,
60 :center => :centre,
61 :merge => [ :center_across, :centre_across ],
62 :distributed => :equal_space
EDIT! Additional information
require 'rubygems'
require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => 'test'
format = Spreadsheet::Format.new :horizontal_align => :centre
sheet1.row(0).default_format = format
sheet1.row(0).push 'I rule!'
book.write 'test.xls'
This worked for me. Try it - with both :centre and :center. Let me know.