ruby-on-railsrubyspreadsheetspreadsheet-gem

Ruby spreadshet gem, how can I center align a number


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'

Solution

  • 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.