如何在zip文件中解析excel文件?

时间:2013-11-22 21:46:15

标签: regex excel perl parsing zip

我希望能够在zip文件中解析excel。我已经能够解析zip文件以返回该压缩文件中的文件,如果正则表达式匹配显示excel文件,我想解析该文件。

这是解析zip文件以获取Excel电子表格名称的脚本...

#!/usr/bin/perl
use strict;
use warnings;
use Archive::Zip;
use Spreadsheet::ParseExcel;

my $zipFile = Archive::Zip->new();
my $xl_file = "";
#open zipfile
$zipFile->read( '/home/user/Desktop/test.zip' ) == 0 || die "cannot read zip file\n";

#find all files within zipfile
my @files = $zipFile->memberNames('/home/user/Desktop/test.zip');
foreach my $file (sort @files) {
    #find all excel files
    if($file =~ m/(.*xls)/){
        $xl_file = $1;
            print "excel file found.\n";
    }
}

这是解析单元格中值的脚本。

#!/usr/bin/perl
use strict;
use warnings;

my $filename = "/home/user/worksheet.xls";
use Spreadsheet::ParseExcel;

my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse("$filename");

if ( !defined $workbook ) {
    die $parser->error(), ".\n";
}
open(FILE, '>', "parse.txt")||die "cannot open parse.txt!\n";

for my $worksheet ( $workbook->worksheets() ) {
     my ( $row_min, $row_max ) = $worksheet->row_range();
     my ( $col_min, $col_max ) = $worksheet->col_range();     
     my $s = $worksheet -> get_cell(2,2);
     my $p = $worksheet-> get_cell(2,3);
     print FILE $s->value()."\n";
     print FILE $p->value()."\n";
}
close FILE;

如何将它们整合在一起?

1 个答案:

答案 0 :(得分:1)

根据Archive::Zip的文档,可以将压缩文件成员的内容作为字符串获取:

$xls_content = $zipFile->contents($file);

根据Spreadsheet::ParseExcel的文档,通过传递字符串作为参考,可以解析包含Excel文件内容的字符串:

my $workbook = $parser->parse(\$xls_content);

所以你应该能够将两者结合起来。

另一种可能性是将zip文件成员解压缩到临时文件中。