Esa función es llamada por el analizador. Es ejecutada por cada celda leída. Lo tienes explicado con este ejemplo en la sección
Reducing the memory usage of Spreadsheet::ParseExcel:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new(
CellHandler => \&cell_handler,
NotSetCell => 1
);
my $workbook = $parser->parse('file.xls');
sub cell_handler {
my $workbook = $_[0];
my $sheet_index = $_[1];
my $row = $_[2];
my $col = $_[3];
my $cell = $_[4];
# Do something useful with the formatted cell value
print $cell->value(), "\n";
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Fíjate: el método parse() lanza el proceso de interpretación del fichero indicado. Y en cada celda, cell_handler() es llamado con 5 parámetros: libro, número de hoja, fila, columna, y la propia celda. Lo que haga cell_handler() con la celda, ya es cosa tuya: almacenarla, cambiarla o desecharla. Nota además, que en el ejemplo se le ha pasado la opción
NotSetCell => 1, que le indica a ParserExcel que no almacene el valor de la celda, lo que implica que deja en nuestra completa responsabilidad cómo almacenar la celda, dentro de cell_handler(). Podríamos crear una estructura tridimensional propia e ir guardando las celdas en ella, en lugar de depender de las estructuras de ParseExcel.
El porqué lo recomienda es porque en algunas ocasiones, la lectura de algún libro Excel puede llegar a agotar la memoria del equipo: por cada celda, ParseExcel guarda el valor de la celda y todos los atributos de formateo de la celda. Si, en cambio, la celda nos la pasa a nosotros en el cell_handler(), podemos decidir qué guardar y qué no.