2014-04-15 22 views
0

我是新來的perl。我有兩個excel文件,包含大量的行和只有兩列。我想從一個excel文件中獲取每個單元格,並搜索它是否存在於另一個excel文件中。如果不是,那麼打印該單元格。 我相信如果我從其中一個excel中獲取每個單元格,並在另一個單元格中搜索它,然後爲所有行執行for循環,它將完成。 我從第一個excel中獲得單元格,但是如何搜索它是否存在於另一個excel中並打印它是問題。從一個excel中搜索一個單元格,然後在另一個excel中搜索並打印,如果它不在那裏使用perl

任何人都可以幫忙。 ??

+0

你如何獲得第一個單元格? – ooga

+0

我用過Spreadsheet :: ParseExcel;然後我的$ cell1 = $ Sheet1 - > {Cells} [$ row1] [$ col1]; – Einstein

+0

我以前沒有用過perl中的excel文件。你是怎麼得到'$ Sheet1'的?編輯您的帖子並添加一些代碼。 – ooga

回答

1

我不完全確定你想要什麼,但這可能會給你一些想法。儘管如此,它完全沒有經過測試。

use strict; 
use Spreadsheet::ParseExcel; 

my $parser = Spreadsheet::ParseExcel->new(); 

my $workbook1 = $parser->parse('Book1.xls'); 
if (!defined $workbook1) { die $parser->error(), ".\n"; } 

my $workbook2 = $parser->parse('Book2.xls'); 
if (!defined $workbook2) { die $parser->error(), ".\n"; } 

$worksheet1 = $workbook1->worksheet('Sheet1'); 
$worksheet2 = $workbook2->worksheet('Sheet1'); 

my ($row_min1, $row_max1) = $worksheet1->row_range(); 
my ($col_min1, $col_max1) = $worksheet1->col_range(); 

for my $row1 ($row_min1 .. $row_max1) { 
    for my $col1 ($col_min1 .. $col_max1) { 

    my $cell1 = $worksheet1->get_cell($row1, $col1); 

    my ($row_min2, $row_max2) = $worksheet2->row_range(); 
    my ($col_min2, $col_max2) = $worksheet2->col_range(); 
    my $found_match = 0; 

    for my $row2 ($row_min2 .. $row_max2) { 
     for my $col2 ($col_min2 .. $col_max2) { 

     my $cell2 = $worksheet2->get_cell($row2, $col2); 
     if ($cell1->value() eq $cell2->value()) { # or == ? 
      $found_match = 1; 
      break; 
     } 
     } 
     break if $found_match; 
    } 

    if (!$found_match) { 
     print $cell1->value, "\n"; 
    } 
    } 
} 

這主要是從這裏開始:http://search.cpan.org/dist/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel.pm

+0

我試過這個,但這不是隻打印一個單元格它的文學印刷所有celll在哪裏這不是平等的。意味着如果它匹配一個值,它將跳過該行,併爲所有休息打印該單元格值。 – Einstein

+0

@Einstein我修正了上面代碼中的錯誤。順便說一下,單元格值是字符串還是數字? – ooga

+0

找到匹配是一個非常有用的欣賞答案。我能夠從那裏繼續下去。 – Einstein

相關問題