Float in Spreadsheet

J

Jim Burgess

Hi,
I am using the ruby spreadsheet gem to create Excel files from within
Ruby.
Could someone tell me how to write a decimal value (in this case 34.00)
to an Excel cell.
I have looked in the documentation (http://spreadsheet.rubyforge.org/)
and found the method write_number.
I guess this will do what i want, but I cannot for the life of me get it
to work.
Thanks for any help.
 
J

Jim Burgess

Can no one help me?
Could someone at least tell me if there is a place (forum or mailing
list or whatever) where I can ask for help.
Thanks.
 
J

Jayce Meade

Sometimes some things don't get responses, I guess. Sorry. D:

What's your problem?
 
J

Jim Burgess

Sometimes some things don't get responses, I guess. Sorry. D:
No worries, it's just that spent ages writing this app and everything
works fine except this one thing, so it would be a shame if I couldn't
sort it out.

All I want to do is write a decimal to a cell in a spreadsheet generated
using the ruby spreadsheet gem.

Currently I'm writing:
@invoice.row(32+i).push '',i, groups[i-1],'',groups_ue[i-1], 34, tot

Instead of 34 I want to write 34.00
However when I write:
@invoice.row(32+i).push '',i, groups[i-1],'',groups_ue[i-1], 34.00, tot

The program still writes 34 (without the decimal) to the cell.

Cheers for your help.
 
V

Victor H. Goff III

[Note: parts of this message were removed to make it a legal post.]

This looks like a formatting problem. I don't have an answer for you, but
if the format for that cell has no trailing zeros, then this would be the
affect you are seeing.
I hope it helps... Sorry, I have not confirmed this.

Warmest Regards,

Victor H. Goff III
 
L

Lars Christensen

The program still writes 34 (without the decimal) to the cell.

Excel treats 34 and 34.00 as the same number (and Ruby treat 34.0 and
34.00 the same).

fmt = Spreadsheet::Format.new:)number_format => '0.00')
sheet1.row(1).set_format(1,fmt)
 
H

Hannes Wyss

Jim, Victor,

This looks like a formatting problem. I don't have an answer for you, but
if the format for that cell has no trailing zeros, then this would be the
affect you are seeing.

That's exactly right. Add a Format:

fmt = Spreadsheet::Format.new :number_format => '0.0'
row = @invoice.row(32+i)
row.push '',i, groups[i-1],'',groups_ue[i-1], 34.00, tot
row.set_format 5, fmt

(There is also a Column Default-Format, but that seems not to work atm
- will fix asap.)

hth
Hannes
 
J

Jim Burgess

Thanks ever so much for the replies.
The formatting now works perfectly.
I guess that the moral of the story is that Thursday morning is a good
time to post questions :)
Thanks again.
Jim
 
R

Rick DeNatale

[Note: parts of this message were removed to make it a legal post.]

I guess that the moral of the story is that Thursday morning is a good
time to post questions :)

Might I suggest is that the real moral is that the community is much more
able, and therefore willing, to answer questions which provide enough
context, like what you've tried and wnat's not working, than just something
like "I read the documentation and I can't get it to work."

http://catb.org/~esr/faqs/smart-questions.html#beprecise
 
J

Jim Burgess

Might I suggest is that the real moral is that the community is much
more
able, and therefore willing, to answer questions which provide enough
context, like what you've tried and wnat's not working, than just
something
like "I read the documentation and I can't get it to work."

Uh, get off your moral high horse Rick.
I can never understand people who make posts like this.
I tried for ages to get this to work, read the documentation, surfed the
net looking for solutions and essentially drew a blank before posting
here.
Maybe my initial question wasn't precise enough for you, but apart from
that I don't see what more I could have done.
 
R

Rick DeNatale

[Note: parts of this message were removed to make it a legal post.]

Uh, get off your moral high horse Rick.
I can never understand people who make posts like this.
I tried for ages to get this to work, read the documentation, surfed the
net looking for solutions and essentially drew a blank before posting
here.
Maybe my initial question wasn't precise enough for you, but apart from
that I don't see what more I could have done.

All I'm suggesting is that I see lots of questions like your initial post
which don't get replies because there's not enough information to even guess
what's wrong. Not just here but all over the internet.

It was only after your third post in which you actually showed some code,
that you got some help.

If you'd done that little bit more initially, you might have gotten your
answer right away.

None of us who try to help here get paid for it as far as I know.

If you want to take a suggestion as to how to get better results in the
future as a personal affront, it's no skin off my nose.
 
J

Jim Burgess

If you want to take a suggestion as to how to get better results in the
future as a personal affront, it's no skin off my nose.

And if all you were trying to do was to make a suggestion (and not sound
like a sacrcastic tw@), then maybe you should work on your social
skills.
 
J

Jim Burgess

Alright, I had a couple of emails overnight agreeing (quite politely)
with Rick.

Rick, you're right. I was wrong to react like I did.
I will try to make my questions more precise in future.
Thanks for your suggestion.

Laters,
Jim
 
S

Serguei Cambour

Lars said:
Excel treats 34 and 34.00 as the same number (and Ruby treat 34.0 and
34.00 the same).

fmt = Spreadsheet::Format.new:)number_format => '0.00')
sheet1.row(1).set_format(1,fmt)

For me, te solution:

nb_format = Spreadsheet::Format.new :number_format => '0,000'
sheet1.row(4).set_format(0, nb_format)

works fine. If you want to add decimals, just do

nb_format = Spreadsheet::Format.new :number_format => '0,000.00'
sheet1.row(4).set_format(0, nb_format)

Now the problem is that if a number to be formatted is less than 1000,
you'll get a new formatted value like that:

0,518.42

The question - how to avoid "unused" leading zeros?
Thanks
 
S

Serguei Cambour

I found a solution. To avoid leading zeros, you have to set the frmat as
follows:

nb_format = Spreadsheet::Format.new :number_format => '#,###'
sheet1.row(4).set_format(0, nb_format)

What is important - the rounding is made out of the box (1500.78 will be
formatted as 1,501, 0 will be formatted as empty cell) so no need to
write something else :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,981
Messages
2,570,187
Members
46,730
Latest member
AudryNolan

Latest Threads

Top