2010-01-20 2 views
1

J'utilise http://spreadsheet.rubyforge.org pour générer une feuille de calcul et j'ai des problèmes avec quelque chose. J'ouvre un classeur existant et y ajoute des données.Ruby spreadshet gem, comment puis-je centrer aligner un nombre

Je manged pour obtenir le nombre Mise en forme dans une certaine mesure, au moins Excel est de voir ces données comme un nombre, mais (très non Excel comme) le client souhaite que le nombre aligné au centre :(

Mon code actuel ressemble à ceci:

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

peut-être un peu farfelue, mais se demandaient si quelqu'un peut aider

  • feuille de calcul ne modifie pas mise en forme à l'heure actuelle T. chapeau signifie en particulier que si vous définissez la valeur d'une cellule sur une date, elle ne peut être lue comme date que si son format a été correctement défini avant la modification.

Modifier pour Trevoke

Merci de nous aider à cet égard. J'ai essayé votre code et ça marche bien. Je suppose que la différence est que je suis en train de modifier une feuille de calcul existante, auquel cas le formatage est ignoré. Essayez ceci:

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' 
+0

Yup .. On dirait bien que vous avez trouvé un bug! Ça ne marche pas pour moi non plus. – Trevoke

+0

J'ai enregistré un enregistrement de bogue https://rubyforge.org/tracker/index.php?func=detail&aid=27719&group_id=678&atid=2677. Encore une fois merci pour votre aide :) – tsdbrown

+0

Comment poussons-nous à une cellule particulière ... avec le numéro de ligne et de colonne ?? –

Répondre

2

Eh bien, voici le code pour les méthodes de format de la bibliothèque: format.rb. La dernière fois que j'ai utilisé cette gemme, elle n'a pas très bien formaté, mais on dirait qu'elle a été mise à jour depuis.

Vous pouvez essayer ceci:

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! Informations supplémentaires

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' 

Cela a fonctionné pour moi. Essayez-le - avec les deux: centre et: centre. Faites le moi savoir.

+0

Merci, j'ai déjà essayé de régler cela, mais cela ne semble pas fonctionner. J'ai ajouté un commentaire que j'ai trouvé dans le guide de ma question. Bien que je ne comprenne pas complètement le sens qu'il indique, il ne modifie pas la mise en forme, même si mon fichier original a un alignement central, écrire de nouvelles données semble remplacer cela. – tsdbrown

+0

C'est "format de données" pas "format d'affichage". Le format des données est la date, la monnaie, etc. L'affichage est .. Eh bien, cassé, je suppose. Il est temps de leur envoyer un rapport de bug! – Trevoke

+0

Avant de faire cela, je ferais mieux de vérifier (si cela ne vous dérange pas) que j'ai compris comment l'utiliser correctement! enum ajoute une méthode d'instance à la classe de format right? Avec le premier argument étant le défaut (: par défaut). J'ai essayé de passer: horizontal_align =>: centre dans l'appel à Format.new et l'appelant aussi après avoir créé l'objet format (nmft), aucun travail. – tsdbrown