Руби спредшет гем, как можно по центру выровнять число - PullRequest
1 голос
/ 20 января 2010

Я использую http://spreadsheet.rubyforge.org для создания электронной таблицы, и у меня возникли проблемы с чем-то. Я открываю существующую книгу и добавляю в нее данные.

Мне удалось до некоторой степени работать с форматированием чисел, по крайней мере, Excel видит эти данные как число, но (очень непохоже на), клиент хотел бы, чтобы число выровнялось по центру :(

Мой текущий код выглядит примерно так:

nfmt = Spreadsheet::Format.new :number_format => '0.00'
row = sheet.row(1)
row[0] = "Result"
row[1] = 45.55
row.set_format 1, nfmt

Может быть, немного надуманным, но интересно, может ли кто-нибудь помочь?

  • В настоящее время электронная таблица не изменяет форматирование. Это означает, в частности, что если вы установите значение ячейки в дату, оно может быть прочитано только как Дата, если ее формат был установлен правильно до изменения.

Редактировать для Trevoke

Спасибо за помощь в этом. Я попробовал ваш код, и он отлично работает. Я думаю, разница в том, что я редактирую существующую электронную таблицу, и в этом случае форматирование игнорируется. Попробуйте это:

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'

1 Ответ

2 голосов
/ 20 января 2010

Итак, вот код для методов форматирования библиотеки: format.rb . В прошлый раз, когда я использовал этот драгоценный камень, он не очень хорошо отформатировал, но, похоже, он был обновлен с тех пор.

Вы можете попробовать это:

  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! Дополнительная информация

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'

Это сработало для меня. Попробуйте - как с центром, так и с центром. Дайте мне знать.

...