Bienvenido a los foros de Perl en Español, hughgrc.
Hay un módulo en CPAN, llamado Spreadsheet::XLSX::Utility2007, que contiene un método llamado xls2csv().
Este es un ejemplo de lo que se puede hacer con Spreadsheet::XLSX::Utility2007 y Spreadsheet::XLSX.
Using perl Syntax Highlighting
#!/usr/bin/env perl
use Spreadsheet::XLSX;
use Text::Iconv;
# Conversor de codificación
#my $converter = Text::Iconv -> new ("utf-8", "windows-1251");
# Creación del objeto
#my $excel = Spreadsheet::XLSX->new('test.xlsx', $converter);
my $excel = Spreadsheet::XLSX->new('clinicamym.xlsx');
# Hojas que hay en el libro
for my $hoja (@{$excel -> {Worksheet}}) {
printf("Hoja: %s\n", $hoja->{Name});
}
# Hoja de donde sacaremos los datos
my $hoja = $excel->worksheet('noticias');
# Número máximo de filas, si no está definido
$hoja->{MaxRow} ||= $hoja->{MinRow};
# Contenido de la hoja, para todas las filas
for my $fila ($hoja->{MinRow} .. $hoja->{MaxRow}) {
for my $columna ($hoja->{MinCol} .. $hoja->{MaxCol}) {
my $celda = $hoja->{Cells}[$fila][$columna];
if ($celda) {
printf("( %s , %s ) => %s\n", $fila, $columna, $celda->{Val});
}
}
}
# Llamar al método xlsx2csv de forma directa
# Extraer solo una región de la hoja
use Spreadsheet::XLSX::Utility2007 'xls2csv';
# definición de la región: hoja-rango
my $region = '1-C1:E17';
print xls2csv('clinicamym.xlsx', $region, 0);
$region = '3-C3:F7';
print xls2csv('clinicamym.xlsx', $region, 0);
Coloreado en 0.007 segundos, usando
GeSHi 1.0.8.4
Como ves, al final del programa, es muy fácil sacar una región de una determinada hoja, dentro del libro Excel.
Ahora bien... esto solo se puede hacer si ANTES parcheas el código de Utility2007.pm. Estas son las líneas que debes cambiar:
Using perl Syntax Highlighting
# start the excel object now
my $oExcel = Spreadsheet::XLSX->new($filename);
#my $oBook = $oExcel->Parse($filename);
# open the sheet
my $oWkS = $oExcel->{Worksheet}[$sheet];
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La salida del método xls2csv() es una cadena de texto con los campos separados por comas. Luego te queda como trabajo guardar el resultado a un archivo en disco.
Por estos foros hay algunos hilos referidos al formato xlsx. Usa el sistema de búsqueda.
En CPAN puedes encontrar
muchos módulos para tratar archivos xlsx, incluso más modernos que este Spreadsheet::XLSX.