Estoy leyendo un archivo Excel con Spreadsheet::XLSX para insertar sus filas en una BD. El archivo tiene alrededor de 1100 líneas y al parecer es por la cantidad de líneas que el script se detiene antes de terminar y no inserta nada (estoy ejecutando desde un terminal como perl xxxx.pl xxxxx.xlsx). Digo lo de la cantidad de líneas ya que si dejo el archivo Excel solo en 100 líneas las toma e inserta sin problemas.
El siguiente es mi script:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use Spreadsheet::XLSX;
- use DBI;
- use lib 'libs/';
- use Funciones;
- use utf8;
- # DATOS DE CONEXION PARA
- my $database = "prueba";
- my $data_source = "DBI:mysql:$database;";
- my $username = "usuario";
- my $password = "pass";
- my $sql = DBI->connect( $data_source, $username, $password )
- or die "Couldn't connect to database: " . DBI->errstr;
- my $excel = Spreadsheet::XLSX->new( @ARGV[0] );
- my $sheet = $excel->{Worksheet}[0];
- $sheet->{MaxRow} ||= $sheet->{MinRow};
- my $LINEA = 0;
- foreach my $row ( $sheet->{MinRow} .. $sheet->{MaxRow} ) {
- $LINEA++;
- $sheet->{MaxCol} ||= $sheet->{MinCol};
- my $BRANCH = $sheet->{Cells}[$row][0]->{Val};
- if ( $CAMPOV ne "TITULO" ) {
- my $CAMPO1 = "";
- my $CAMPO2 = "";
- my $CAMPO3 = "";
- my $CAMPO4 = "";
- my $CAMPO5 = "";
- $CAMPO1 = $sheet->{Cells}[$row][1]->{Val};
- $CAMPO2 = $sheet->{Cells}[$row][2]->{Val};
- $CAMPO3 = $sheet->{Cells}[$row][3]->{Val};
- $CAMPO4 = $sheet->{Cells}[$row][4]->{Val};
- $CAMPO5 = $sheet->{Cells}[$row][5]->{Val};
- my $queryH = sprintf(
- "INSERT INTO tabla (
- campo1,
- campo2,
- campo3,
- campo4,
- campo5
- ) VALUES (
- '$CAMPO1',
- '$CAMPO2',
- '$CAMPO3',
- '$CAMPO4',
- '$CAMPO5',)"
- );
- my $dbh = DBI->connect( $data_source, $username, $password )
- or die "Couldn't connect to database: " . DBI->errstr;
- $dbh->do($queryH) or die "Couldn't insert to database: " . DBI->errstr;
- }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4