Yo haría lo siguiente (a grandes rasgos).
Using text Syntax Highlighting
Inicio la apertura del Excel.
my $fila = 1;
Inicio la apertura del archivo CSV.
Recorro todos los registros del archivo CSV.
Para cada uno de esos registros, hago un split "," y guardo todos los campos en un array:
my @campos = split ",";
Guardo los @campos en la línea de la hoja Excel:
my $columna = 1;
for my $campo (@campos) {
$Sheet->Cell($fila, $columna)->{Value} = $campo;
$columna++;
}
Preparo la siguiente fila:
$fila++;
y repito el bucle de registros.
Finalmente, guardo la hoja.
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Ahora bien... hay otra forma más drástica.
Como estás usando el protocolo OLE, eso significa que estás dialogando de forma "directa" con el propio Excel... por lo que puedes pedirle a Excel... que sea él el que abra el archivo CSV directamente, es decir, como si estuviéramos abriendo un archivo XLS normal.
Yo estoy seguro que Excel es capaz de abrir un archivo CSV sin problemas (salvo que haya problemas con la codificación de caracteres, los caracteres de fin de línea y si algún campo contiene caracteres incompatibles con la norma CSV).
Una vez que Excel ha leído el archivo CSV, ahora le pedimos que... lo guarde con el formato que queramos.
$Sheet->SaveAs("NEWFILENAME.XLS", xlExcel8);
# Lista de formatos en
https://msdn.microsoft.com/en-us/librar ... ormat.aspxEsto es tan común que existe un módulo que ya lo hace:
Win32::Scsv Puedes mirarle el código para ver cómo lo hace, en caso de que no quieras instalarlo. Pero bastaría con una línea así:
csv_2_xls('dummy.csv' => 'Test2.xls');
Pero incluso permite hacer alguna transformación:
Using perl Syntax Highlighting
csv_2_xls('dummy.csv' => 'New.xlsx%Tab9', {
'tpl' => 'Template.xls',
'prot' => 1,
'csz' => [
['H:H' => 13.71],
['A:D' => 3],
],
'fmt' => [
['A:A' => '#,##0.000'],
['B:B' => '\\<@\\>'],
['C:C' => 'dd/mm/yyyy hh:mm:ss'],
],
});
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
En el código fuente de este módulo, al principio, verás que usa los valores numéricos para el método SaveAs.
Naturalmente, esto solo sirve si queremos convertir un CSV a XLS. Si nuestra idea es "meter" el CSV en una de las hojas del libro Excel, entonces sí que debemos hacerlo con el procedimiento anterior.