The loop goes through all the rows, and then you write to the CSV so you
are only writing the last row, which may be empty?

In the loop, you are creating a new array containing a single value,for
each row/col
Not clear from the code if you really need the assignment either, seems
redundant.
In any case this is what I think it should be:

workbook = Roo::Excelx.new("#{@file}")
workbook.default_sheet="#{@sheet}"
CSV.open("test.csv",'w') do |writer|
7.upto(workbook.last_row) do |line|
@col1 = (devstatus = workbook.cell(line, 'H'))
 @col2 = (availabletesting = workbook.cell(line,'Y'))
@col3 = (firstroundstatus = workbook.cell(line,'AB'))
 @col4 = (secondroundstatus = workbook.cell(line,'AH'))
@col5 = (thirdroundstatus = workbook.cell(line,'AL'))
 writer << [@col1,@col2,@col3,@col4,@col5]
end
end

I don't have Ruby at work so this is just an educated guess ;)


On Mon, Jul 29, 2013 at 2:23 PM, Rochit Sen <lists / ruby-forum.com> wrote:

> Hi All,
>
> Not sure if i am doing this correctly. I am reading a xlsx file and then
> extracting few columns and want to save them in a csv. So below is what
> i am doing:
>
> workbook = Roo::Excelx.new("#{@file}")
> workbook.default_sheet="#{@sheet}"
> 7.upto(workbook.last_row) do |line|
>   @col1 = Array(devstatus = workbook.cell(line, 'H'))
>   @col2 = Array(availabletesting = workbook.cell(line,'Y'))
>   @col3 = Array(firstroundstatus = workbook.cell(line,'AB'))
>   @col4 = Array(secondroundstatus = workbook.cell(line,'AH'))
>   @col5 = Array(thirdroundstatus = workbook.cell(line,'AL'))
> end
>
> CSV.open("test.csv",'w') do |writer|
>   writer << [@col1,@col2,@col3,@col4,@col5]
> end
>
> When i run the above, the csv file generated but its empty. But when i
> print the following:
>
> puts @col1.class == Array #Outputs true, so i suppose my conversion to
> array is done correctly
> puts @col1.length #Shows me that array length as 0
>
> But when i do: puts @col1 - I get to see all the elements in the array.
>
> Any idea whats wrong?
>
> Thanks
>
> --
> Posted via http://www.ruby-forum.com/.
>
>