No es necesario usar Windows para procesar archivos muy grandes. Si solo quieres acceder al contenido de las celdas sin más, se puede hacer que
Spreadsheet::ParseExcel, por ejemplo, no guarde ninguna información ni cree ninguna estructura interna (por lo que no consumirá memoria), y nos entregue los datos de las celdas directamente:
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];
# Hacer algo útil con el valor formateado de la celda
print $cell->value(), "\n";
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
(ejemplo extraído de la página de manual de Spreadsheet::ParseExcel) La opción
CellHandler indica a Spreadsheet::ParseExcel que los contenidos de las hojas debe procesarlos antes con la función que le pasamos como argumento (cell_handler(), en este caso). Y la opción
NotSetCell le indica que no queremos que guarde el valor de la celda en ningún sitio, que de eso ya nos encargamos nosotros (podemos guardarlo en un
array de
array, por ejemplo.
Spreadsheet::ParseExcel abrirá el archivo, recorrerá todas las hojas, todas las filas y columnas, y llamará a nuestra función por cada celda que contenga un valor.
De esta manera, puedes procesar documentos muy grandes, y no tener que depender de Windows.
Para el tema de la configuración regional, una forma de hacerlo es extraer los datos de las celdas de forma no formateada (usar unformatted() en lugar de value()). Ver la sección [url]
Dates and Time in Excel[/url] en
Spreadsheet::ParseExcel::Cell. Y a partir de ahí, lo formateas como quieras.
Es posible (pero yo no lo conozco) que se le pueda indicar a Excel a través de OLE/DDE en qué formato queremos los datos, pero eso yo no lo he visto hacer en ningún Excel. Tendrás que consultar la documentación de Excel en Micro$oft.
Y, finalmente... creo que te indiqué en otro mensaje anterior, que las últimas recomendaciones de RAE sobre la ortografía de los números sean: '.' como separador decimal, y un espacio para el separador de los grupos de millares (ortografía aprobada en diciembre de 2010).
Otra cosa es lo que diga el jefe en cómo quiere él que salgan los números.
Como último detalle que acabo de encontrar: hay una forma de hacerlo de forma más o menos automática, en Windows, que sería algo así:
- a las personas que rellenan la hoja de cálculo, indicarles que deben asignarles estilos de celda cuyos nombres empiezan por '*', a las celdas que dependen de la configuración regional. Eso hace que los números y fechas salgan en pantalla ajustadas a la configuración regional del sistema operativo en ese momento, y no a la configuración regional del sistema en que se creó
- antes de generar la salida, entrar en el panel de control de Windows, y cambiar la configuración regional a la que se desee
- generar la salida
Aquí lo tienes más detallado. Puedes encontrar más información buscando por
Excel regional settings change en cualquier buscador.