From edd@debian.org  Tue Aug 21 02:57:15 2001
From: edd@debian.org (Dirk Eddelbuettel)
Date: Mon, 20 Aug 2001 20:57:15 -0500
Subject: [Rd] Excel -> *.CSV in Unix (Linux) command line?
In-Reply-To: <15232.50065.506799.227682@gargle.gargle.HOWL>
References: <15229.8451.41084.531037@gargle.gargle.HOWL>
 <15232.50065.506799.227682@gargle.gargle.HOWL>
Message-ID: <15233.49147.3828.874363@sonny.eddelbuettel.com>


  Martin> 1) newer Perl versions (newer than Redhat 6.2 or Debian potato) 

The Perl version shouldn't matter for as long it can install from the CPAN
sources. 

  Martin>    Dirk has also done a done a perl script "xls2csv" built on the
  Martin> above, sent to Brian Ripley who forwarded it to me.  Dirk, maybe
  Martin> you'd post the latest version of that here as well, or give us a
  Martin> pointer where that is available?

It just so happened that Brian had asked about that topic when I was playing
with an example from the Spreadsheet::ParseExcel module I was revisiting. I
sent him the hand-edited version (mostly more indentation, renamed variables)
I had plauyed to grok it better. As I'm currently on a different machine, I
can only the (somewhat terse) original dmpEx.pl. There are variants of in the
sample/ directory of Spreadsheet::ParseExcel.

IMHO trying to teach R to read .xls files is opening a huge can of worms with
users who might be a little too agnostic about exactly how they have saved
their data.

Regards, Dirk


use strict;
if(!(defined $ARGV[0])) {
    print<<EOF;
Usage: $0 Excel_File
EOF
    exit;
}
use Spreadsheet::ParseExcel;
my $oExcel = new Spreadsheet::ParseExcel;
my $oBook = $oExcel->Parse($ARGV[0]);

my($iR, $iC, $oWkS, $oWkC);
print "=========================================\n";
print "FILE  :", $oBook->{File} , "\n";
print "COUNT :", $oBook->{SheetCount} , "\n";
print "AUTHOR:", $oBook->{Author} , "\n";
#for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
#    $oWkS = $oBook->{Worksheet}[$iSheet];
foreach my $oWkS (@{$oBook->{Worksheet}}) {
    print "--------- SHEET:", $oWkS->{Name}, "\n";
    for(my $iR = $oWkS->{MinRow} ; 
            defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
        for(my $iC = $oWkS->{MinCol} ;
                        defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
            $oWkC = $oWkS->{Cells}[$iR][$iC];
            print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
print $oWkC->{_Kind}, "\n";
        }
    }
}


-- 
Our mailserver had a hardware failure while we were gone during the 2nd half 
of July. If I did not respond to a mail you sent then, or if you experienced a
a mail bounce, could you kindly resend it? Sorry for the inconvenience -- Dirk
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] Excel -> *.CSV in Unix (Linux) command line?
Dirk Eddelbuettel