Las hojas de Excel son uno de los métodos más utilizados para mantener los registros de la oficina, especialmente para trabajar en aplicaciones en las que los que no son desarrolladores e incluso los administradores pueden proporcionar información a los sistemas por lotes.
Sin embargo, el problema es leer el contenido de un archivo creado por Microsoft Excel usando Perl.
CPAN ofrece pocos módulos para leer archivos de Excel. Hay Spreadsheet::Read
que podrá manejar todo tipo de hojas de cálculo. Hay otras bibliotecas de bajo nivel que leen archivos de diferentes versiones de Excel:
- Hoja de cálculo::ParseExcel Excel 95-2003 archivos,
- Hoja de cálculo::ParseXLSX Excel 2007 Open XML XLSX
Creación de un archivo de Excel
Los archivos de Excel se pueden crear con el uso de Perl con la ayuda de un módulo incorporado Excel::Writer::XLSX que se usa para crear archivos de Excel.
Además, write()
la función se usa para agregar contenido al archivo de Excel.
Ejemplo:
#!/usr/bin/perl use Excel::Writer::XLSX; my $Excel_book1 = Excel::Writer::XLSX->new('new_excel.xlsx' ); my $Excel_sheet1 = $Excel_book1->add_worksheet(); my @data_row = (1, 2, 3, 4); my @table_data = ( ["l", "m"], ["n", "o"], ["p", "q"], ); my @data_column = (1, 2, 3, 4, 5, 6, 7); # Using write() to write values in sheet $Excel_sheet1->write( "A1", "Geeks For Geeks" ); $Excel_sheet1->write( "A2", "Perl|Reading Files in Excel" ); $Excel_sheet1->write( "A3", \@data_row ); $Excel_sheet1->write( 4, 0, \@table_data ); $Excel_sheet1->write( 0, 4, [ \@data_column ] ); $Excel_book1->close;
Lectura de un archivo de Excel
La lectura de un archivo de Excel en Perl se realiza mediante el uso Spreadsheet::Read
de un módulo en un script de Perl. Este módulo exporta una serie de funciones que usted importa o usa en su secuencia de comandos de código Perl. ReadData()
La función se utiliza para leer desde un archivo de Excel.
La ReadData()
función acepta un nombre de archivo que, en este caso, es un archivo de Excel, pero también acepta otros tipos de archivos. Según la extensión del archivo, cargará el módulo de back-end apropiado y luego analizará el archivo. Crea una referencia de array que representa todo el archivo:
Ejemplo:
use 5.016; use Spreadsheet::Read qw(ReadData); my $book_data = ReadData (‘new_excel.xlsx'); say 'A2: ' . $book_data->[1]{A2};
En el código anterior, el primer elemento de la array que se ha devuelto contiene información general sobre el archivo. Los elementos restantes representan las otras hojas en el archivo. En otras palabras, $book_data->[1] representa la primera hoja del ‘ new_excel.xlsx ‘. Esto se puede usar para acceder al contenido de las celdas, ya que es una referencia hash. $book_data->[1]{A2} devuelve una referencia hash para el elemento A2
Producción:
A2: Perl|Reading Files in Excel
Obtener filas de un archivo de Excel
Los argumentos de la función de Spreadsheet::Read
son una hoja y el número de filas que se buscarán. El tipo de retorno es una array con los valores de las filas pasadas en el argumento.
El siguiente programa demuestra cómo leer la primera fila de la primera hoja y luego muestra el contenido en cada campo de la fila.
my @rowsingle = Spreadsheet::Read::row($book_data->[1], 1); for my $i (0 .. $#rowsingle) { say 'A' . ($i + 1) . ' ' . ($rowsingle[$i] // ''); }
Producción:
Recuperando el contenido del archivo
Obtener una sola fila no es suficiente. Necesitamos buscar todas las filas para una programación eficiente. Logramos esto usando la rows()
función. Esta función toma una hoja como argumento. Devuelve una array de elementos o una array de referencias como una array (array 2-D). Cada elemento de la array representa una fila en la hoja de cálculo.
El script para obtener todas las filas es el siguiente:
my @rowsmulti = Spreadsheet::Read::rows($book_data->[1]); foreach my $m (1 .. scalar @rowsmulti) { foreach my $n (1 .. scalar @{$rowsmulti[$m - 1]}) { say chr(64 + $m) . " $m " . ($rowsmulti[$m - 1][$n - 1] // ''); } }
Producción:
Poniendo todo junto
El siguiente script de Perl ilustra el uso de todas las características explicadas anteriormente de leer un archivo de Excel en Perl:
#!/usr/bin/perl use strict; use warnings; use 5.010; use Spreadsheet::Read qw(ReadData); my $bookdata = ReadData('simplecreate.xlsx'); say 'A1: ' . $bookdata->[1]{A1}; # Fetching a single row my @rowsingle = Spreadsheet::Read::row($bookdata->[1], 1); for my $i (0 .. $#row) { say 'A' . ($i + 1) . ' ' . ($rowsingle[$i] // ''); } # Fetching all file content my @rowsmulti = Spreadsheet::Read::rows($bookdata->[1]); foreach my $i (1 .. scalar @rowsmulti) { foreach my $j (1 .. scalar @{$rows[$i-1]}) { say chr(64 + $i) . " $j " . ($rows[$i - 1][$j - 1] // ''); } }
Producción:
Publicación traducida automáticamente
Artículo escrito por shreyaraj1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA