Anteriormente estaba usando Spreadsheet::ParseExcel para analizar archivos .xls pero recientemente me vi en la necesidad de ajustar la aplicación para analizar también archivos .xlsx, por lo cual opté por usar Spreadsheet::Read; todo funciona bien pero...
Yo tengo fechas de esta forma:
en archivos .xls y .xlsx.
El proceso de los archivos .xls está muy bien ya que pudo obtener el texto formateado o cadena de la fecha que está en la celda. Por ejemplo, "2011-oct-01 00:00:oo.000", pero cuando es de un archivo .xlsx no funciona ya que no obtiene el "texto" dentro de la celda sino que la cantidad de días que representa dicha fecha desde 1900, o sea, "40817".
Using perl Syntax Highlighting
- my $libro=ReadData($nombre);
- my $maxfila= $libro->[1]->{maxrow};
- my $maxcol= $libro->[1]->{maxcol};
- for my $fila (3..$maxfila){
- @linea=();
- for my $columna (1..13){
- my $celda=$libro->[1]{cr2cell($columna,$fila)}; #contenido formateado de la celda.
- if (defined($celda)){
- my $variable = $celda;
- if ($columna==1 and $fila > 3){
- if (length($variable)==24){
- my($anio, $mes, $dia, $hora) = $variable =~ /^(\d+)-(\D+)-(\d+) ([\d:]+)/i;
- If (defined $fechas{lc($mes)}) {
- $mes = $fechas{lc($mes)};
- }
- $variable = "$dia/$mes/$anio $hora";
- }
- }
- push (@linea, $variable);
- }
- else{
- $celda="";
- push (@linea, $celda);
- }
- }
- my $string = join ("\t",@linea);
- $string = "$contador\t"."i\t".$string."\n";
- push(@vector,$string);
- $contador++;
- }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Lo que no logro entender es cómo es que esta línea
Using perl Syntax Highlighting
- my $celda=$libro->[1]{cr2cell($columna,$fila)}; # contenido formateado de la celda.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
sí hace la tarea deseada en los archivos .xls y no funciona en .xlsx.
¿¿¿Alguien me podría ayudar???
Gracias.