Есть ли способ легко взять 3 текстовых файла и превратить его в лист Excel с несколькими вкладками с помощью сценария? - PullRequest
1 голос
/ 02 декабря 2010

Есть ли способ легко взять 3 текстовых файла и превратить их в лист Excel с несколькими вкладками с помощью скрипта?

файлы - это file1.txt, файл 2.txt, file3.txt - я бы хотел, чтобы он вывел на файл excelsheet1.xls с 3 вкладками

1 Ответ

4 голосов
/ 02 декабря 2010

Вы не упоминаете формат текстовых файлов, поэтому реальный пример кода сложен, но вы можете использовать для этого Spreadsheet :: WriteExcel .Посмотрите на метод add_worksheet () для создания новых вкладок.

Учитывая, что вы говорите, что каждая строка - это число, за которым следует текст, я предполагаю, что это два столбца в строке с пробелом, разделяющим первый и второй столбцы.и только цифры в первом столбце.Если это не так, приведенное ниже регулярное выражение необходимо будет скорректировать.Тем не менее, вот пример кода.

#!/usr/bin/env perl
use strict;
use warnings;
use Spreadsheet::WriteExcel;

sub read_file{
        my $f = shift;
        my @row;
        open(my $fh, '<', $f) or die $!;
        while(<$fh>){
                chomp;
                s/^(d+)s+//; # assuming format of "1 Text heren2 More textn"
                if(defined $1){
                        push(@row, [$1, $_]);
                }
        }
        close($fh) or die $!;

        return @row;
}

if($#ARGV < 1){
        die "$0: file1 [file2 ... filen] output.xls\n";
}
my $xl = Spreadsheet::WriteExcel->new(pop);

foreach my $file (@ARGV){
        if( -f $file){
                my @rows = read_file($file);
                my $sheet = $xl->add_worksheet($file);
                for my $row (0..$#rows){
                        my @cols = @{$rows[$row]};
                        for my $col (0..$#cols){
                                $sheet->write($row, $col, $cols[$col]);
                        }
                }
        }
}

Входные файлы задаются в командной строке и обрабатываются по порядку, превращая каждый из них во вкладку, названную в честь имени файла.Имя выходного файла указывается в командной строке последним, после одного или нескольких имен входных файлов.

РЕДАКТИРОВАТЬ: Теперь включая улучшения FM , упомянутые в его комментарии, и тривиальный CLI для указанияимя выходного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...