2017-12-19 398 views
0

アップロードするExcelファイルの解決策が必要です。ここには、チェックが必要なメールアドレスのリストがあります。 今度は列AのすべてのGmailアドレスを行全体で削除する必要があります。PHPExcel-行全体を削除

私はいくつかのコードを作ったが、行のすべてのGmailアドレスを削除するわけではないが、Gmailを含む2行目ごとにスクリプトを削除すると思う。

誰かがそれを確認して助けてくれますか?ここで

は私のコードです:で開始する

// setup columns and rows for loop 

$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 

//define $results from rows as array 
$result = []; 


//loop column A and get values from each row in Array $results 

for($row = 1; $row <= $highestRow; ++$row) { 

$result[] = $sheet->getCell('A' .$row)->getValue(); 

} 


//remove gmail adresses in rows 

foreach($result as $gmail){ 

if(preg_match('/gmail.com/', $gmail)) { 

$objPHPExcel->getActiveSheet()->removeRow($row); 

    } 

} 
+0

「$ row」の値は、初めてスプレッドシートをループした後も変更されないので、常に最後の行を削除していますに関係なく、行$ gmailの値を含む行 –

+0

'rangeToArray()'メソッドを使用して最初のループを削除することができます... $ result = $ sheet-> rangeToArray( 'A1:A'。$ highestRow); ' –

+0

本当に逆順で行をチェックする必要があります。行1と行3で削除するgmailエントリがある場合、最初に行1を削除すると行3が行2になり、行4が行3になります。 3行目を削除すると元の行が削除されます4 –

答えて

0

//define $results from rows as array 
$result = []; 


//loop column A and get values from each row in Array $results 

for($row = 1; $row <= $highestRow; ++$row) { 

$result[] = $sheet->getCell('A' .$row)->getValue(); 

} 

はインデックス付け、これは2D配列または行と列を返します

$result = $sheet->rangeToArray('A1:A'.$highestRow); 

に置き換えることができます各行に対して0から。単純な1次元配列を得るためにそれをarray column()に与えることができます。あなたは下から一番上にそれを通過するように

$result = array_column($sheet->rangeToArray('A1:A'.$highestRow), 0); 

その後、あなたは、鍵を保持、配列を逆にする必要があります:あなたは、配列を横断するとき

$result = array_reverse($result, true); 

は、あなたにもキーを取得する必要があります

foreach($result as $reference => $gmail){ 
    if(preg_match('/gmail.com/', $gmail)) { 
     $row = $reference + 1; // adjust the array key to the row number 
     $objPHPExcel->getActiveSheet()->removeRow($row); 
    } 
} 
+0

パーフェクト、それです。 ありがとう、あなたは私をたくさん助けてくれました。再度、感謝します。 –

関連する問題