2017-12-19 6 views
0

Ich brauche eine Lösung für den Upload Excel-Datei, wo in Spalte A Liste der Mail-Adressen, die überprüft werden müssen. Jetzt muss ich alle Google Mail-Adressen in Spalte A mit einer ganzen Zeile entfernen.PHPExcel- ganze Zeile entfernen

Ich habe etwas Code, aber es entfernt nicht alle Google Mail-Adresse in der Zeile, ich denke, dass Skript jede zweite Zeile entfernt, die Google Mail enthalten.

Kann jemand es überprüfen und mir helfen?

Hier ist mein Code:

// 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

der Wert von '$ row' nie, nachdem Sie durch die Tabelle das erste Mal geschlungen haben verändert, so dass Sie immer das letzte Entfernen Zeile, unabhängig von die Zeile mit dem $ gmail-Wert –

+0

Sie könnten Ihre erste Schleife mit der Methode 'rangeToArray()' eliminieren ... '$ result = $ sheet-> rangeToArray ('A1: A'. $ hoeheRow);' –

+0

Sie wirklich müssen Zeilen in umgekehrter Reihenfolge überprüfen .... Wenn Sie Google Mail-Einträge in den Zeilen 1 und 3 zu entfernen, dann Zeile 1 zuerst entfernen wird Zeile 3 in Zeile 2, Zeile 4 zu Zeile 3, etc ... und dann entfernen Zeile 3 entfernt, was ursprünglich Zeile 4 war –

Antwort

0

Zunächst:

//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(); 

} 

mit

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

Dieser wird wieder ein 2D-Array oder Zeilen und Spalten ersetzt werden, indiziert von 0 für jede Reihe; Sie können das an array column() füttern, um ein einfaches 1-d-Array zu erhalten.

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

Dann müssen Sie das Array rückgängig zu machen, die Schlüssel zu halten, so dass Sie es von unten nach oben durchqueren:

$result = array_reverse($result, true); 

Wenn Sie das Array durchlaufen, müssen Sie auch den Schlüssel zum Abrufen als der Wert, ermöglicht es, weil diese Sie die Zeilennummer zu identifizieren:

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

Perfekt, das ist es. Vielen Dank, du hast mir sehr geholfen. Danke noch einmal. –