天天看點

Perl幫MM輕松搞定Excel資料

<a target="_blank" href="http://blog.51cto.com/attachment/201105/213448634.png"></a>

<a href="http://blog.51cto.com/attachment/201105/203008353.png" target="_blank"></a>

當Wholesale price (如上圖)所在行的us$後面值大于20時,就将該url記錄下來(MM的本意是隻要Wholesale price 後面的us$後面的值大于20時,即将該行标注成紅色,這裡稍微修改一下)。起初,MM是click one by one,該檔案中此類的url不下100個,MM手都點酸了,眼也看花了,終于把工作做完了。之後,我說,你就是這樣天天工作的呀,不煩才怪呢,效率不高不說,而且容易出錯。好了吧,GG我幫你寫個程式,這樣的工作怎麼能由MM的纖纖玉手親自來做呢,一切交給電腦來處理吧。

要用perl來處理這個問題,需要用到兩個module,一個是LWP::Simple,另一個則是Spreadsheet::ParseExcel,初次不知道怎麼用的,請perldoc modulename.

這裡附上perl 代碼

#!/usr/bin/perl -w 

use strict; 

use LWP::Simple; 

use Spreadsheet::ParseExcel; 

my @array; 

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

my $workbook = $parser-&gt;parse('第二期統計.xls'); 

if ( !defined $workbook ) { 

    die $parser-&gt;error(),".\n"; 

for my $worksheet ( $workbook-&gt;worksheets() ) { 

    my ( $row_min,$row_max ) = $worksheet-&gt;row_range(); 

#本來下面一句應該是這樣寫的

#for my $row ( $row_min..$row_max ),之是以換成2,是因為想過濾掉第一行中的那幾個中文字元,哈哈

    for my $row ( 2..$row_max ) { 

#下面一句換成1的目的是為了與第二列資料相比對

        my $cell = $worksheet-&gt;get_cell( $row,1 ); 

        next unless $cell; 

        my $tmp_url = $cell-&gt;value(); 

        push @array,$tmp_url; 

    } 

for my $url ( @array ) { 

    my $content = get $url or die "can't get $url\n"; 

    print $url,"\n"; 

    if ( $content =~ /wholesale_price/ ) { 

        $content =~ m{&lt;\S+\s+\w+="\S+"\s+\w+="\S+"&gt;US\$\s+(\d+.\d+)&lt;/\w+&gt;}; 

        open RES,'&gt;&gt;','results.txt' or die "$!\n"; 

        if ( $1 &gt; 20 ) { 

            print "$url\n"; 

            print RES "$url\n"; 

        } 

        close RES; 

[root@web ~]# cat results.txt  

http://www.wholesale-dress.net/lapel-long-sleeve-single-button-front-suit-light-grey-g1158909.html 

http://www.wholesale-dress.net/korea-style-zipped-stand-collar-jacket-khaki-g1228884.html

本文轉自dongfang_09859 51CTO部落格,原文連結:http://blog.51cto.com/hellosa/572004,如需轉載請自行聯系原作者