Sigo leyendo archivos...
Hice una consulta hace algún tiempo, pero algo pasó, porque no encontré la pregunta y obvio... no hubo respuesta.
Ahora tengo un problema, estoy leyendo un archivo Excel (xlsx) y trae varias hojas... y debo generar un archivo txt con cada una de ellas, y utilizo el nombre de la hoja para generar el nombre del archivo. Mi problema es que una de ellas se llama "viña". Al intentar asignar el nombre a una variable me la deja en blanco.
Para probar hice lo mismo cambiando el nombre a "vina" y me generó el archivo bien.
Entonces el problema es la "ñ". No sé de que otra manera podría capturar ese nombre, no sé si hay alternativa...
¿Alguna ayuda?
Muchas gracias.
Using perl Syntax Highlighting
- my $sheetindex = 0;
- my $converter = Text::Iconv->new( "utf-8", "windows-1251" );
- my $excel = Spreadsheet::XLSX->new( $file, $converter );
- my @sheets = @{ $excel->{Worksheet} };
- my $nHojas = @sheets;
- for ( $i = 0; $i <= $nHojas; $i++ ) {
- my $sheet = $sheets[$i];
- my $text = '';
- my $hoja = $sheet->{Name};
- $new_file = 'hoja_' . $hoja . '.TXT';
- print STDERR "\n\n hoja -->$i<-- ($hoja) \n";
- $sheet->{MaxRow} ||= $sheet->{MinRow};
- for my $row ( $sheet->{MinRow} .. $sheet->{MaxRow} ) {
- $sheet->{MaxCol} ||= $sheet->{MinCol};
- for my $col ( $sheet->{MinCol} .. $sheet->{MaxCol} ) {
- my $cell = $sheet->{Cells}[$row][$col];
- if ($cell) {
- # print $cell->{Val};
- $text .= $cell->{Val};
- }
- $text .= "\t" if $col < $sheet->{MaxCol};
- }
- $text .= "\n";
- }
- if ( !open( RPT, ">$new_file" ) ) {
- &escribe_log(" No se pudo crear archivo [$new_file]");
- $retorno = 'error';
- }
- else {
- print RPT $text;
- $retorno = 'success';
- }
- ; # while.
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4