On Dienstag, 2008-April-1 07:35:50, Pranjal J. wrote:

I tried the method told by you , but sorry to say it is writing only

the last value in the excel sheet.

But to the all cells in the range, doesn’t it?

```
i = 0
until i > 15
puts a[i]
$worksheet.Range("a1:a16").value = a[i]
i += 1
```

end

Well, this code takes each of the 16 values, one after another,

and tells Excel to assign it to the range A1:A16.

When Excel gets one value for a range, it will write it

to all the cells in the range. So all your values are written,

thus only the last value remains.

However, you could try the following:

```
$worksheet.Range("a#{i+1}").value = a[i]
```

or (writing the loop more in ruby-style):

a.each_with_index do |val, i|

puts val

$worksheet.Range(“a#{i+1}”).value = val

end

or you can write the whole range in one go (that’s what I would do).

If the range is horizontal, this is trivial:

$worksheet.Range(“a1:p1”).value = a

In your case, the cells form (a piece of) a column,

so let’s create a column-array,

that is an array of one-element arrays:

$worksheet.Range(“a1:a16”).value = [a].transpose

Hope that helps.

Sven

PS: In case you are not aware of it,

your code cantains unnecessary things.

For example the line

a = Array.new

or the class definition.