2016-03-30 4 views
-2

Я новичок в программировании на Perl. Допустим, у нас есть 2 столбца в листе A книги Excel.Использование Perl-скрипта, как суммировать значения в одном столбце на основе другого столбца в Excel?

AB  Volume 
100  280 
137  250 
150  375 
100  100 
100  600 
137  200 

Теперь я хочу выход на другом листе. Скажем, B. Я хочу подвести итог Volume s на основе AB.

Результат должен быть, как:

AB  Volume 
100  980 
137  450 
150  375 

Пожалуйста, помогите мне в достижении этой цели.

Это код, который я написал для этого

#!/usr/bin/perl -w 
use strict; 

use Spreadsheet::Read; 
use Spreadsheet::ParseExcel; 
use Spreadsheet::ParseExcel::Worksheet; 
use Excel::Writer::XLSX; 

my $workbook = ReadData ("Book1.xlsx"); 
my $worksheet = $workbook->[1]; 

my $max_rows = $worksheet->{'maxrow'}; 
my $max_cols = $worksheet->{'maxcol'}; 
my $C1; 
my $total = 0; 
my $sum; 

my $workbook_new = Excel::Writer::XLSX->new('New.xlsx'); 
my $worksheet2 = $workbook_new->add_worksheet(); 

for my $row_num (1..($max_rows)) 

{ 

    if ($row_num>1) 

    { 

    my $temp1 = 'A'.$row_num; 
    $C1 = $workbook->[1]{$temp1}; 

    for $row_num (1..($max_rows)) 

    { 
     if ($row_num>1) 

      { 
      my $D1 = 'A'.$row_num; 

      my $D2 = $workbook->[1]{$D1}; 


      if ($C1 = $D2) 

       { 
       my $Z2 = 'B'.$row_num; 

       $sum = $workbook->[1]{$Z2}; 

       $total= $sum + $total; 

       } 
      } 
     } 

    print "value of C :".$C1 "SUM :".$total."\n"; 

    } 

} 

Я не получаю выход правильно, а также не в состоянии понять, как написать вывод в Excel файл New.xlsx.

+0

Просто отправил это Петричем .. – Lakssman

ответ

1

С помощью Spreadsheet::ParseExcel и Spreadsheet::WriteExcel (чтобы получить результаты в файл Excel снова).

Переход по строкам, добавление значений в хэш; Нечто подобное должно сделать трюк:

for (2 .. $worksheet->row_range()) { 
     $total{ $worksheet->get_cell($_, 1) } += $worksheet->get_cell($_, 2); 
    } 

Это означает, что в конце концов, ваш хэш %total должны иметь результаты, которые вы ищете:

{ 
     100 => 980, 
     137 => 450, 
     150 => 375 
    } 

Вы просто должны заполнить в разборе и запись файла.

+0

я получаю эту ошибку Невозможно вызвать метод «row_range» на неблагословленных ссылках – Lakssman

+0

Это означает, что все, что вы пытаетесь вызвать 'row_range' на не является объект. Если вы делаете '$ worksheet-> row_range()', попробуйте что-то вроде 'print ref ($ worksheet)', чтобы посмотреть, что это такое. –

Смежные вопросы