Perl — Улучшение кода

Я только начал программировать на Perl и просто пытаюсь выяснить, можно ли сделать приведенный ниже код более эффективным или его можно сделать в меньше строк.

Я немного изучил модульWin32::OLEи модульText::CSV , но из того, что я читал до сих пор, мне кажется, что это единственный путь.

По сути, это вопрос новичка, который спрашивает старшего: «Эй, как мне стать лучшим программистом на Perl?»

Целью кода является получение данных из указанных диапазонов на указанных листах рабочей книги Excel и запись содержимого этих диапазонов в файлы CSV.

Кроме того, я знаю, что мне нужно реализовать общие проверки, например убедиться, что мое $cellValueопределено перед добавлением его в массив и тому подобное, но я ищу больше общей структуры. Например, есть ли способ сгладить цикл, поместив сразу всю строку в массив или весь диапазон в массив или ссылку или что-то в этом роде?

Спасибо

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;
        }
    }
}

7
задан Borodin 25 May 2012 в 01:57
поделиться