• Publicidad

Carga de información de Excel a base de datos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-05-18 07:11 @341

Debes tener instalado el módulo DBD::mysql. Y ajustar la cadena DSN para indicar a quién y cómo debe conectarse.

Tienes un tutorial, al respecto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Carga de información de Excel a base de datos

Notapor Hector Gutierrez » 2011-05-26 13:27 @602

Hola Txemaracas, si gustas te publico aquí la versión final del código con PostgreSQL.
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-05-27 11:34 @523

Hola Hector. Si me haces ese favor te lo agradecería.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor Hector Gutierrez » 2011-05-30 12:28 @561

Aquí está el código. La primera parte es donde hago la conexión a la tabla de la base de datos y se llama ConectarDBe.pm

#!/usr/bin/perl
package ConectarDBe;
use strict;
use DBI;

# VARIABLES A UTILIZAR

my $db_user = "postgres";
my $db_pass = "postgres";
my $host_name = "localhost";
my $db_name = "DePaso";

# DEFINICIÓN DE LA CONEXIÓN

my $q_string = "dbi:Pg:host=$host_name;database=$db_name";

sub connect{
return (DBI->connect ($q_string, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}
1;

La segunda parte es la que trasfiere los datos de la tabla en PostgreSQL a un archivo en Excel, da como respuesta el No. de renglones escritos:

#!/usr/bin/perl

use ConectarDBe;
use Spreadsheet::WriteExcel;

my ($dbh,$sth,@datos_personales);
my $col = $row = 0;

#-------------- Conexión a la base de datos

$dbh = ConectarDBe->connect();

#-------------- Preparación de la extracción de información

$sth = $dbh->prepare('SELECT llave,fechanac, alumnonombre, alumnopaterno, alumnomaterno FROM tbdatos WHERE alumnonombre like ?') or die("Couldn't prepare statement: " . $dbh->errstr);
$sth->execute("REB%") or die("Couldn't execute statement: " . $sth->errstr);

#-------------- Creo un libro nuevo de trabajo en Excel

my $workbook = Spreadsheet::WriteExcel->new('Datos extraidos 1.xls');

#-------------- Agrego a la hoja de trabajo

$worksheet = $workbook->add_worksheet();

#-------------- Agrego y defino un formato

$format = $workbook->add_format(); # Add a format
$format->set_bold();
$format->set_color('blue');
$format->set_align('center');

#------------ Escribo en la hoja de Excel

$worksheet->write($row, $col++, 'Llave', $format);
$worksheet->write($row, $col++, 'Fecha de Nac.', $format);
$worksheet->write($row, $col++, 'Nombre del Alumno', $format);
$worksheet->write($row, $col++, 'Ap. Paterno', $format);
$worksheet->write($row, $col, 'Ap. Materno', $format);

#------------ Comenzamos lectura y escritura

$row +=1;
while(@datos_personales = $sth->fetchrow_array()){
$worksheet->write($row, 0, "$datos_personales[0]");
$worksheet->write($row, 1, "$datos_personales[1]");
$worksheet->write($row, 2, "$datos_personales[2]");
$worksheet->write($row, 3, "$datos_personales[3]");
$worksheet->write($row, 4, "$datos_personales[4]");
$row +=1;
}
print "Termine, No. de registros escritos en Excel " . $row ."\n";

#------------ Cierro y desconecto
$sth->finish;
$dbh->disconnect;

Saludos
Hector Gutierrez
Perlero nuevo
Perlero nuevo
 
Mensajes: 37
Registrado: 2011-04-15 14:49 @659

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-05-30 15:04 @670

Muchas gracias.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-05-31 16:13 @717

Una última pregunta sobre Excel. A la hora de mirar para que la casilla en la que estoy no empiece por "a" ni el valor de la casilla sea "undef" (o sea, que no contenga nada) ¿cómo habría que indicarlo? Es que pongo lo siguiente y como no estoy acostumbrado a utilizar Perl no lo hago bien:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ( $celda1-> {Val} ne ~ m/a/i and $celda2-> {Val} ne 'undef' )
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-05-31 16:25 @725

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    if ( $celda1->{Val} !~ m/^a/i  and  defined($celda2->{Val}) )
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


defined(EXPR) devuelve verdadero si la EXPR. está definida.

Más información en perldoc -f defined
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-06-01 07:32 @355

¿Se puede usar el "Exists" para saber si la base de datos que estoy seleccionando existe o no?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (exists select * from sysdatabases where name = 'prueba')
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿o tendría que usar otra forma?

He mirado en CPAN en el módulo de DBD::mysql y pone para eliminar, para crear, pero no encuentro para comprobar si existe.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-06-01 09:09 @422

La función connect() del DBI devolverá undef en caso de que no se haya podido realizar la conexión.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-06-01 09:52 @453

explorer, ¿por qué me dice esto en la línea de código que me acabas de pasar? ¿Puede ser porque no hay nada en esa casilla?

use of uninitialized value in pattern match (m//) at Prueba.txt

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ( $celda1->{Val} !~ m/^a/i  and  defined($celda2->{Val}) )
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $dbh = ConectarDB->connect();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Por cierto, si no se puede conectar a la base de datos seleccionada o mejor dicho, la base de datos no existe, ¿el valor undef lo dejaría en la variable $dbh? Es para saber cómo hacer en el caso de que no exista, crearla. Hacer un:

if ($dhb= undef) ?¿?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 25 invitados