in reply to Re: Converting a txt file to excel file
in thread Converting a txt file to excel file

Sure, I assume the OP knows that and is asking in PM because he has a big raft of these files to convert and wants to do it programmatically. It's no fun to convert 500 tab-delimited files by opening them from within Excel, even if one uses the "lazy-evaluation" model.

the lowliest monk

  • Comment on Re^2: Converting a txt file to excel file

Replies are listed 'Best First'.
Re^3: Converting a txt file to excel file
by MonkPaul (Friar) on Apr 02, 2005 at 20:37 UTC
    The point i was trying to make was that the user shouldnt have to leave the web page environment, but should only have to choose which file they want to view the data of.

    The user doesnt want to see any of the actual raw data, but merely an overall graph to display the data on the screen in a graphical format that can easily be understood.

    ** not meaning to be arsey about it :)****

    I may be a bit stupid but can you tell me of a way that i can loop through all the column headings in the file (say writing them to the screen), i.e. stored in an array, then for each row do the same. Currently i have the following code, although i know it doesnt work. I was thinking of a hash table for the column and value but im new to this perl game. The problem i have is to recognise the number of columns there are and loop through each row upto and including the last column, then go to the next line and start again. My brain is wrecked at this stage. Im normally a java programmer and cant seem to see a way forward....HELP!.

    # read from a file and extract the contents into an Excel file sub write_to_Excel() { use Spreadsheet::WriteExcel; my @columnNames; my @rowValues; my $count = 0; my $row = 0; my $fileArray = "F:/User_Interface/dbStuff/ArrayExpress.txt"; open( INFILE, "<$fileArray") or die "Cannot open the file"; print("Searching File..."); foreach $line ( <INFILE> ) { if( $line =~ /^Name/ ) { @columnNames = split(/\t/, $line); } else { @rowValues = split(/\t/, $line); } } # Create a new workbook and save a file called example.xls # and add a worksheet called Summary to that. my $workbook = Spreadsheet::WriteExcel->new("ArrayExpress.xls"); my $worksheet = $workbook->add_worksheet(`Summary`); # Set text bold, red, underlined for values # designated as high # my $high_val = $workbook->add_format(); # $high_val->set_bold(); # $high_val->set_color(`red`); # $high_val->set_underline(); ###### not sure how to loop through array to put rows across then do +wn and same with cols $worksheet->write($row,$count,$element); foreach $element(@columnNames) { $count++; $worksheet->write($row,$count,$element); } foreach my $element(@rowValues) { $worksheet->write($row,$count,$element); $count++; $row++; } }

    Sorry about the mess with the node changing. Again im new to this.
    MonkPaul.

      First, you are saving only one row. Fix it with something like:

      foreach $line ( <INFILE> ) { if( $line =~ /^Name/ ) { @columnNames = split(/\t/, $line); } else { push @rowValues, [ split(/\t/, $line) ]; } }
      Second, you are setting and/or incrementing the row and column indexes inappropriately (you also have an extraneous write right before the first loop); fix it with something like:
      $row = 0; $count = 0; foreach $element(@columnNames) { $worksheet->write($row,$count,$element); $count++; } ++$row; foreach my $rv (@rowValues) { $count = 0; foreach my $element (@$rv) { $worksheet->write($row,$count,$element); $count++; } $row++; }
      Third, you are not using strict (q.v.), and are therefore heading for a world of pain.

      Im normally a java programmer and cant seem to see a way forward...

      If you think the problems with the code you posted had something to do with it being in Perl rather than Java I think you are missing the boat; the most serious errors in it are pretty generic.

      the lowliest monk