OVH Cloud OVH Cloud

[EXCELL] accès séquentiel.

3 réponses
Avatar
Jéjé
Salut à tous.
Connaissez vous un moyen d'accéder de manière séquentielle à un fichier
Excell ?
Les seuls modules que j'ai trouvé et qui permettent d'accéder à de tels
fichiers ( tous plus ou moins basés sur
http://theoryx5.uwinnipeg.ca/CPAN/data/Spreadsheet-ParseExcel/ParseExcel.html
) le font en chargeant préalablement le fichier en mémoire, ce qui est
très handicapant en cas d'utilisation de grosses quantité de données.

Merci de vos lumières !


--
--
Thirteen at a table is unlucky only when the hostess has only twelve chops.
-- Groucho Marx
---- O Génome, mon égo -----
jerome.eteve_at_it-omics.com

3 réponses

Avatar
Paul GABORIT
À (at) Fri, 23 Jan 2004 15:45:12 +0100,
Jéjé écrivait (wrote):
Connaissez vous un moyen d'accéder de manière séquentielle à un fichier
Excell ?


Un fichier Excel n'est pas enregistré sur disque de manière séquentielle.

Les seuls modules que j'ai trouvé et qui permettent d'accéder à de tels
fichiers ( tous plus ou moins basés sur
http://theoryx5.uwinnipeg.ca/CPAN/data/Spreadsheet-ParseExcel/ParseExcel.html
) le font en chargeant préalablement le fichier en mémoire, ce qui est
très handicapant en cas d'utilisation de grosses quantité de données.


C'est vrai que c'est très long, très lourd et parfois bloquant.

Deux méthodes pour y pallier :

- Si vous êtes sous Windows *et* que vous avec Excel installé, vous pouvez lui
demander de faire le boulot à votre place via OLE (c'est faisable mais je n'ai
jamais pratiqué).

- Sinon, il faudrait se pencher sur le code de Spreadsheet::ParseExcel pour
essayer de rendre la lecture et l'analyse du document plus modulaire... mais
ce n'est pas simple (le format des fichiers Excel est vraiment tordu).

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Jéjé
Dans l'article , "Paul GABORIT"
a tapoté :

Un fichier Excel n'est pas enregistré sur disque de manière
séquentielle.


Mmm. Sont vraiment bizarres chez minimoux.

C'est vrai que c'est très long, très lourd et parfois bloquant.
Oui oui, ce sont bien des fichiers excell.


Deux méthodes pour y pallier :

- Si vous êtes sous Windows *et* que vous avec Excel installé, vous
pouvez lui demander de faire le boulot à votre place via OLE (c'est
faisable mais je n'ai jamais pratiqué).

- Sinon, il faudrait se pencher sur le code de Spreadsheet::ParseExcel
pour essayer de rendre la lecture et l'analyse du document plus
modulaire... mais ce n'est pas simple (le format des fichiers Excel est
vraiment tordu).



Un grand merci pour ces renseignements.
Comme c'est pas une fonctionnalité très prioritaire, je crois que
je vais me contenter de dire: "allez les users, exportez en csv !" .


--
--
We prefer to speak evil of ourselves rather than not speak of ourselves at all.
---- O Génome, mon égo -----
jerome.eteve_at_it-omics.com

Avatar
Louis POTY
"Jéjé" a écrit dans le message de
news:
Salut à tous.
Connaissez vous un moyen d'accéder de manière séquentielle à un fichier
Excell ?
Les seuls modules que j'ai trouvé et qui permettent d'accéder à de tels
fichiers ( tous plus ou moins basés sur

http://theoryx5.uwinnipeg.ca/CPAN/data/Spreadsheet-ParseExcel/ParseExcel.html

) le font en chargeant préalablement le fichier en mémoire, ce qui est
très handicapant en cas d'utilisation de grosses quantité de données.

Merci de vos lumières !


--
--
Thirteen at a table is unlucky only when the hostess has only twelve
chops.

-- Groucho Marx
---- O Génome, mon égo -----
jerome.eteve_at_it-omics.com


Vu que les fichiers Excel sont tout sauf séquentiel, il vaut mieux utiliser
OLE.....
Un petit exemple
**************************************
use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);


# Le fichier excel à lire est passé en argument
$wd1 = $ARGV[0];
# On utilise Excel s'il est déja lancé, sinon on le lance
eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
die "Excel not installed" if $@;
unless (defined $ex) {
$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Excel";
}
# On ouvre le classeur
$nomficinput = $wd1;
$book = Win32::OLE->GetObject($nomficinput);
$sheet = $book->Worksheets(1);
# On lit ce que l'on veut, par exemple la cellule D3
$ligne = 3;
$colonne = 4;
$contenu_cellule = $sheet->Cells($ligne, $colonne);
# On referme tout
undef $book;
undef $ex;
*************************************************************

Louis