Ho appena iniziato la programmazione in Perl e sto solo cercando di scoprire se il codice sottostante può essere reso più efficiente o può essere fatto in meno righe.Perl - Code Enhancement
Ho studiato un po 'il modulo Win32::OLE
e il modulo Text::CSV
, ma questo sembrava il modo di passare da quello che ho letto finora.
Questa domanda è fondamentalmente un principiante che chiede a un anziano: "Ehi, come faccio a diventare un programmatore Perl migliore?"
Lo scopo del codice è ottenere dati da intervalli specificati in fogli specifici di una cartella di lavoro di Excel e scrivere il contenuto di tali intervalli in file CSV.
Inoltre, so che ho bisogno di implementare controlli generali, come ad esempio assicurarmi che il mio $cellValue
sia definito prima di aggiungerlo all'array e così via, ma sto cercando di più per la struttura generale. Come c'è un modo per appiattire il loop mettendo tutta la fila intera in una matrice in una volta, o l'intera gamma in una matrice o riferimento, o qualcosa di quella natura?
Grazie
use strict;
use warnings;
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX -> new ('C:\scott.xlsm',);
my @sheets = qw(Fund_Data GL_Data);
foreach my $sheet (@sheets) {
my $worksheet = $excel->Worksheet($sheet);
my $cell = $worksheet->get_cell(25,0);
if ($cell) { # make sure cell value isn't blank
my $myFile = "C:/$sheet.csv";
open NEWFILE, ">$myFile" or die $!;
# write all cells from Range("A25:[MaxColumn][MaxRow]") to a csv file
my $maxCol = $worksheet->{MaxCol};
my $maxRow = $worksheet->{MaxRow};
my @arrRows;
my $rowString;
# loop through each row and column in defined range and string together each row and write to file
foreach my $row (24 .. $maxRow) {
foreach my $col (0 .. $maxCol) {
my $cellValue = $worksheet->{Cells} [$row] [$col]->Value();
if ($rowString) {
$rowString = $rowString . "," . $cellValue;
} else {
$rowString = $cellValue;
}
}
print NEWFILE "$rowString\n";
undef $rowString;
}
}
}
BTW, il tuo codice è già molto buono per un non esperto! Ci sono cose che puoi fare per renderlo più idiomatico (vedi le risposte), ma è un ottimo inizio! – DVK
@DVK +1 per l'incoraggiamento. Grazie. Buono a sapersi, sto andando bene. –
Poiché questa non è una vera domanda, IMHO si sarebbe adattata meglio su http://codereview.stackexchange.com/ – dgw