Buenos días,
Necesito pasar la información de una tabla Excel a una base de datos en MySQL.
Para ello he modificado un
script publicado por James Tisdall que permite realizar dicho proceso convirtiendo la tabla Excel a un archivo ".tabs" como el adjunto.
En teoría se conseguiría con el
script que os pongo, pero resulta que no hay manera y me estoy volviendo loco.
Os agradecería sugerencias y/o modificaciones bien en el
script o en el formato de archivo al que convertir el Excel.
Necesito conseguir este paso lo antes posible para no perder muchos meses de trabajo.
Aquí va el
script que publicó J. Tisdall y yo modifiqué:
Using perl Syntax Highlighting
#!c:/perl/bin/perl.exe
use warnings;
use strict;
# Make connection with MySQL database
use DBI;
my $database = 'fungo';
my $server = 'localhost';
my $user = 'root';
my $passwd = 'password';
my $homologs = DBI->connect("dbi:mysql:$database:$server", $user, $passwd);
my $sqlinit = $homologs->prepare("show tables");
$sqlinit->execute();
while (my $row = $sqlinit->fetchrow_arrayref) {
print join("\t", @$row), "\n";
}
my $flag = 0;
my $table;
my @tables;
my $sql;
while(<>) {
# skip blank lines
if(/^\s*$/) {
next;
# begin new table
}elsif(/^TABLE\t(\w+)/) {
$flag = 1;
$table = $1;
push(@tables, $table);
# Delete all rows in database table
my $droprows = $homologs->prepare("delete from $table");
$droprows->execute();
# get fieldnames, prepare SQL statement
} elsif($flag == 1) {
$flag = 2;
my @fieldnames = split;
my $query = "insert into $table (" . join(",", @fieldnames) . ") values (" . "?, " x (@fieldnames-1) . "?)";
$sql = $homologs->prepare($query);
# get row, execute SQL statement
} elsif($flag == 2) {
my @fields = split;
$sql->execute( @fields);
}
}
# Check if tables were updated
foreach my $table (@tables) {
print "\nTable: $table\n\n";
my $query = "select * from $table";
my $sql = $homologs->prepare($query);
$sql->execute();
while (my $row = $sql->fetchrow_arrayref) {
print join("\t", @$row), "\n";
}
}
# Break connection with MySQL database
$homologs->disconnect;
exit;
Coloreado en 0.007 segundos, usando
GeSHi 1.0.8.4
Y este seria un ejemplo de archivo ".tabs" obtenido del Excel:
Using text Syntax Highlighting
TABLE OXTRY
Organism Ndufs1 Ndufs2 Ndufs3 Ndufs4 Ndufs6 Ndufs7 Ndufs8
NCR NCU01765 NCU02534 NCU04074 NCU05221 NCU00484 NCU03953 NCU05009
FOX FOXG_07987 FOXG_00680 FOXG_06006 FOXG_10434 FOXG_01910 FOXG_05196 FOXG_04085
FGR FGSG_05198 FGSG_00376 FGSG_09234 FGSG_02474 FGSG_06909 FGSG_10276 FGSG_07867
FVE FVEG_04906 FVEG_00831 FVEG_03873 FVEG_09088 FVEG_14032 FVEG_03763 FVEG_07199
AFU Afu5g04370 Afu2g13710 Afu6g08810 None Afu5g02080 Afu4g05860 Afu1g06610
HCA HCAG_06929 HCAG_04623 HCAG_05764 HCAG_00972 HCAG_00338 HCAG_03991 HCAG_05509
DHA DEHA0G06721g DEHA0F11077g DEHA0A12265g DEHA0F22154g DEHA0B11770g DEHA0F02838g DEHA0D03652g
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El programa Perl, si se llama tabla.load, según las instrucciones del autor, debería ejecutarse de la siguiente forma:
%perl tabla.load homologs.tabsYo lo ejecuto colocándolo en la carpeta
"
c:\perl\bin"
¿Puede ser que lo esté ejecutando mal además del problema del formato?
Ojalá podáis ayudarme, alguien