2014-10-30 295 views
0

我嘗試編寫一個能夠從excel中讀取(特定列逐行)並檢索值的腳本。例如。 A列和C列。搜索幾天後,我只能找到簡單的腳本,它能夠從excel中讀取所有內容並將其打印出來。如何從excel中檢索值(對於特定列逐行)

在Excel

Column A Column B Column C 
Dog   Cat   PIG 
Elephant Rat   Snake 

我的代碼現在。

use strict; 
use Spreadsheet::ParseXLSX; 
use Spreadsheet::WriteExcel; 

my $parser = Spreadsheet::ParseXLSX->new(); 
my $workbook = $parser->parse('C:\Modules\list.xlsx'); 

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; 

      print "Row, Col = ($row, $col)\n"; 
      print "Value  = ", $cell->value(),  "\n"; 
      print "Unformatted = ", $cell->unformatted(), "\n"; 
      print "\n"; 
     } 
    } 
} 

預期成果:能夠檢索列A和C列的值,並把它變成變量,然後我將用於其他目的的變量(將它用在循環語句)。

檢索從Excel值(下面是我的概念,我要怎麼做)

#Loop Start (loop through excel line by line) 

$VariableA = Dog(from column A); or ($VariableA =elephant(from column A)); 

**select from database** 
$sql = "select * from animal where name='$VariableA'"; 
**perform $sql and other functions** 

#End Loop 

感謝您的幫助,任何ü可以分享給我嗎?謝謝!

+0

所以你要A列的值,並C列存儲在一個變量(最好是數組)中? – Praveen 2014-10-30 03:38:51

+0

@Praveen嗨,我只是希望它是一個變量。當它成爲一個變量時,此時我將使用該變量來搜索數據庫以查看是否匹配數據庫等。謝謝! – Newbie 2014-10-30 03:43:57

+0

我不明白你的意思。對於你提供的上述輸入,你可以告訴我什麼是預期輸出?如果您可以詳細解釋,那麼提供解決方案很容易。 – Praveen 2014-10-30 05:13:50

回答

0

嘗試下面的代碼,並根據您的要求我都存放在可樂C​​OLC值,如下圖所示:

代碼:

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

my $parser = Spreadsheet::ParseXLSX->new(); 
my $workbook = $parser->parse('C:\Modules\list.xlsx'); 
my @columnA =(); 
my @columnC =(); 

if (!defined $workbook) { 
    die $parser->error(), ".\n"; 
} 

#Get cell value from excel sheet1 row 1 column 2 
my $worksheet = $workbook->worksheet('Sheet1'); 
my ($row_min, $row_max) = $worksheet->row_range(); 
my ($col_min, $col_max) = $worksheet->col_range(); 

for my $row ($row_min .. $row_max) { 
    my $cellA = $worksheet->get_cell($row, 0); 

    # Print the cell value when not blank 
    if (defined $cellA and $cellA->value() ne "") { 
     my $value = $cellA->value(); 
     push(@columnA, $value); 
    } 

    my $cellC = $worksheet->get_cell($row, 2); 
    if (defined $cellC and $cellC->value() ne "") { 
     my $value = $cellC->value(); 
     push(@columnC, $value); 
    } 
} 

print "First Value of ColumnA is retrieved:"; 
my $colA = pop(@columnA); 
print $colA; 

print "\nFirst Value of ColumnC is retrived:"; 
my $colC = pop(@columnC); 
print $colC; 
+0

這太棒了!現在我知道應該如何獲得特定的行。但我認爲你誤解了我,我認爲我的預期結果會讓你感到困惑。 '$ VariableA =(來自列A,狗或大象的值);'<<這裏我只想每次獲得一個值,所以我可以比較數據庫,這意味着$ variableA = Dog或$ Variable = Elephant'。抱歉讓人困惑。 – Newbie 2014-10-30 06:45:19

+0

Okie。然後,非常簡單,您可以使用推送功能將值推入數組,然後使用彈出功能一次刪除一個值。我修改了代碼,只是現在檢查。 – Praveen 2014-10-30 07:11:49

+0

我已經在上面的代碼中顯示了一個值作爲示例。如果你想一個一個地把它放到一個for循環中,然後把值傳給數據庫進行檢查。 – Praveen 2014-10-30 07:14:38

相關問題