从一个excel中搜索一个单元格并在另一个excel中搜索并打印如果它不在那里使用perl

时间:2014-04-15 04:15:31

标签: excel perl

我是perl的新手。我有两个excel文件包含巨大的行数和两列。我想从其中一个excel文件中获取每个单元格,并在其他excel文件中搜索它是否存在。如果不然后打印那个单元格。 我相信如果我从excel中获取每个单元格并在另一个中搜索它,然后为所有行运行for循环,它将完成。 我达到了从第一个excel获取单元格,但如何搜索是否在另一个excel中存在并打印它是问题。

任何人都可以提供帮助。 ??

1 个答案:

答案 0 :(得分: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