2014-11-05 1 views
1

특정 Excel 시트의 특정 행에서 값을 가져올 PERL 코드를 작성했습니다. 이 목적으로 Spreadsheet :: ParseExcel 모듈을 사용하고 있습니다. 지금의로이 코드를 작성했습니다PERL 쿼리의 스프레드 시트 :: ParseExcel

use Spreadsheet::ParseExcel::FmtDefault; 
use Spreadsheet::ParseExcel; 

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

     #my $name = <STDIN>; 
    die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; 
     my $workbook = $parser->parse($ARGV[0]); 
    my @values; 
     if (!defined $workbook) { 
     die $parser->error(), ".\n"; 
    } 

     for my $worksheet ($workbook->worksheets()) { 

     my ($row_min, $row_max) = $worksheet->row_range(); 
     my ($col_min, $col_max) = $worksheet->col_range(); 

     for my $row ($row_min .. $row_max) { 
      for my $col ($col_min .. $col_max) { 

       my $cell = $worksheet->get_cell($row, $col); 
       next unless $cell; 
       $cell->value(); 
      my $cell_type = $cell->{Type}; 
       if ($cell_type =~/Numeric/) 
       { 
       push @values, $cell->unformatted(); 
     } 
      } 
     } 
    } 

나는이 특정 코드를 특정 엑셀 시트에있는 모든 숫자 값을 선택할 수 있어요,하지만 난 코드를 조정할하고 싶은 것이 할 수 있도록 사용자 요구에 따라 특정 열의 숫자 값을 선택하십시오 (예 : 행 B 또는 행 C의 모든 숫자 값). 어떻게하면 가능하도록 코드를 수정하거나 범위 (예 : B2 - B22)를 지정할 수있는 더 간단한 모듈을 사용할 수 있습니까? 어떤 도움을 주셔서 감사합니다.

+0

그래서 당신은 값 froma 특정 열을 얻기 위해 22 행 또는 일반 지역에서 2 번째 행의 B 열 값이 필요하십니까? – Praveen

+0

@Praveen 사용자가 필요로하는 특정 열에서 값을 가져 오는 일반 코드 –

답변

1

아래 perl 코드를 확인하십시오. Excel 시트 행 및 열 값은 (0,0)로 시작합니다. 그러므로 원하는 열을 얻으려면 열과 행 번호를 각각 입력하십시오.

코드 :

use strict; 
use warnings; 
use Spreadsheet::ParseXLSX; 

my $parser = Spreadsheet::ParseXLSX->new(); 
my $workbook = $parser->parse('C:\Users\Perl\test1.xls'); 

if (!defined $workbook) { 
die $parser->error(), ".\n"; 
    } 
my $worksheet = $workbook->worksheet(0); 
my ($row_min, $row_max) = $worksheet->row_range(); 
my ($col_min, $col_max) = $worksheet->col_range(); 

COLUMNS: print "Select the column number required from Excel\n"; 
my $column = <STDIN>; 
chomp($column); 
unless ($column =~/[0-9]+/){ 
print "Bummer!! Please Enter a number\n"; 
goto COLUMNS; 
} 

if($column gt $col_max){ 
    print "No such columns defined in the Excel"; 
    goto END; 
     } 

ROWS:print "Select number of rows required from column $column:\n"; 
my $rows = <STDIN>; 
chomp($rows); 
my $count = $rows+1; 
unless ($rows =~/[0-9]+/){ 
print "Bummer!! Please Enter a number\n"; 
goto ROWS; 
} 

    ROW_LABEL: if($rows le $row_max) 
    { 
    print "\nThe $count row values from column $column are:\n"; 
    for my $row ($row_min .. $rows) { 

     my $cell = $worksheet->get_cell($row, $column); 
     next unless $cell; 
     my $result = $cell->value();   
     print $result . "\n"; 
      } 
     } 
    else 
    { 
     $rows = $row_max; 
     goto ROW_LABEL ; 
     }  
END: