Perl 有没有一种方法可以轻松地获取3个文本文件,并通过脚本将其转换为多选项卡excel工作表?

Perl 有没有一种方法可以轻松地获取3个文本文件,并通过脚本将其转换为多选项卡excel工作表?,perl,excel,vbscript,Perl,Excel,Vbscript,有没有一种方法可以轻松地获取3个文本文件,并通过脚本将其转换为多选项卡excel工作表 文件有file1.txt、file2.txt、file3.txt-我希望它输出到带有3个选项卡的excelsheet1.xls 您没有提到文本文件的格式,因此实际示例代码很困难,但您可以使用它。查看用于创建新选项卡的add_sheet()方法 假设你说每一行都是一个数字,后面跟着文本,我假设这是每行两列,第一列和第二列之间有一个空格,第一列中只有数字。如果不是这样,则需要调整下面的正则表达式。也就是说,这里有

有没有一种方法可以轻松地获取3个文本文件,并通过脚本将其转换为多选项卡excel工作表


文件有file1.txt、file2.txt、file3.txt-我希望它输出到带有3个选项卡的excelsheet1.xls

您没有提到文本文件的格式,因此实际示例代码很困难,但您可以使用它。查看用于创建新选项卡的add_sheet()方法

假设你说每一行都是一个数字,后面跟着文本,我假设这是每行两列,第一列和第二列之间有一个空格,第一列中只有数字。如果不是这样,则需要调整下面的正则表达式。也就是说,这里有一些示例代码

#!/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]);
                        }
                }
        }
}
#/usr/bin/env perl
严格使用;
使用警告;
使用电子表格::WriteExcel;
子读取文件{
我的$f=班次;
我的@行;

open(my$fh),您没有提到文本文件的格式,因此很难编写实际示例代码,但您可以使用它。请查看用于创建新选项卡的add_sheet()方法

假设你说每行都是一个数字,后跟文本,我假设这是每行两列,第一列和第二列之间用空格分隔,第一列中只有数字。如果不是这样,下面的正则表达式需要调整。也就是说,这里有一些示例代码

#!/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]);
                        }
                }
        }
}
!/usr/bin/env perl
严格使用;
使用警告;
使用电子表格::WriteExcel;
子读取文件{
我的$f=班次;
我的@行;

打开(我的$fh,'它真的需要是一个.xls吗?用Perl脚本将它们粘在一个.csv文件中会很容易,并且在大多数系统上.csv文件会自动在Excel中打开。好吧,我需要它在选项卡中。但是,如果不可能的话-单个csv将是我的下一个选择它真的需要是一个.xls吗?粘起来会很容易它们一起放在一个带有Perl脚本的.csv文件中,在大多数系统上.csv文件会在Excel中自动打开。好吧,我需要在选项卡中打开它。但是,如果不可能的话,我的下一个选择是单个csv。文本文件只是纯文本,它们都以数字开头,数字旁边有一个句子。这是什么意思“一列以换行符分隔的记录”?@Sorpigal有用的答案。如果它对循环使用惯用的
对我的$row(0..$#rows)
,如果它使用词法文件句柄:
open,那就更好了(我的$fh,'嗨,伙计们-起初我以为它没有在选项卡中显示数据,因为文本文件的格式不正确,但我创建了文本文件作为1234一些文本和下一行2342一些文本,并尝试了-它创建了选项卡,但选项卡中没有文本。我还尝试了在一个文本文件中仅显示一个hello world,同样的事情发生了。我可能做错了什么,有什么想法吗?我不确定stackoverflow ettiquette是做这种事情的。我也不确定。你能提供一个链接到你的输入数据吗?文本文件都是纯文本,它们都以一个数字开头,数字旁边有一个句子。这意味着“一列新行分隔的记录”吗“?@Sorpigal有用的答案。如果它对
循环使用惯用的
对我的$row(0..$#rows)
,如果它使用词法文件句柄:
open,那就更好了(我的$fh,'嗨,伙计们-起初我以为它没有在选项卡中显示数据,因为文本文件的格式不正确,但我创建了文本文件作为1234一些文本和下一行2342一些文本,并尝试了-它创建了选项卡,但选项卡中没有文本。我还尝试了在一个文本文件中仅显示一个hello world,同样的事情发生了。我可能做错了什么,有什么想法吗?我不确定stackoverflow ettiquette是做这种事情的。我也不确定。你能提供一个链接到你的输入数据吗?