2013-07-10 7 views
1

Je souhaite supprimer toutes les lignes commençant par "//", à partir de la feuille Excel, avec PHPExcel. Mon code:Supprimer des lignes avec PHPExcel

require '../Classes/PHPExcel.php'; 
require_once '../Classes/PHPExcel/IOFactory.php'; 

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE); 


$path = "del_head.xls"; 

$objPHPExcel = PHPExcel_IOFactory::load($path); 
$objWorksheet = $objPHPExcel->getActiveSheet(); 
$highestRow = $objWorksheet->getHighestRow(); 
$highestColumn = $objWorksheet->getHighestColumn(); 
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 


for($row=1; $row < $highestRow; ++$row){ 
    $value = $objPHPExcel->getActiveSheet()->getCell('A'.$row)->getValue(); 

    if (substr($value,0,2) == "//") { 
     $objPHPExcel->getActiveSheet()->removeRow($row, $row); 
     } 
} 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 
$objWriter->save($path); 

Mais, le code supprime pas toutes les lignes qui commencent par "//". Je pense que le problème est avec la fonction 'removeRow'.

Merci beaucoup d'avance.

Répondre

2

Il y a un problème évident avec votre appel à removeRow(): Le premier argument est la ligne de départ, le second est le nombre de lignes à supprimer; Donc, si vous trouvez un // à la ligne 5, vous demandez à PHPExcel de supprimer 5 lignes à partir de la ligne 5 (c'est-à-dire les lignes 5 à 9).

Vous lisez également un fichier avec une extension .xls (en supposant que c'est un fichier BIFF de l'extension), mais en enregistrant le même nom de fichier .xls qu'un fichier OfficeOpenXML (qui est normalement un fichier .xlsx).

Alors, quel est le format de votre fichier? À quoi reconnaît un appel de la méthode identify() d'IOFactory? S'il s'agit en fait d'un fichier de valeurs séparées par des virgules ou des tabulations (le plus susceptible d'avoir un //), alors vous feriez mieux d'utiliser les fonctions fgetcsv() et fputcsv() de PHP pour les supprimer.

+0

Ma feuille Excel est comme ceci: // SDN_parameter_mapping \t \t \t // NRS: LOCAL: Profondeur \t \t \t // NRS: LOCAL: WC_Temp \t \t \t // NRS: LOCAL: WC_Sal \t \t \t // NRS: LOCAL: WC_SIGT \t \t \t // NRS: LOCAL: WC_O2 \t \t \t // NRS: LOCAL: WC_O2 (%) \t \t \t // NRS: LOCAL: WC_PO4 \t \t \t // NRS: LOCAL: WC_SiO4 \t \t \t // NRS: LOCAL: WC_NO2 \t \t \t // NRS: LOCAL: WC_NO3 \t \t \t // NRS: LOCAL: WC_NH4 \t \t \t // NRS: LOCAL: Chl_a \t \t \t // \t \t \t Donc, je veux supprimer les 14 premières lignes. – tuxman

+0

Ce n'est pas du tout un format Excel: je ne suis pas vraiment sûr de ce que c'est; mais vous feriez mieux d'utiliser fopen(), puis fgets() pour lire chaque ligne tour à tour. –

+0

Fonctionne bien avec ce code: $ objPHPExcel-> getActiveSheet() -> removeRow (1,8); $ objPHPExcel-> getActiveSheet() -> removeRow (1,6); – tuxman

0

Remplacez cette ligne

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

avec

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

S'il vous plaît, vérifiez la valeur attribuée en ligne:

$ highestRow = $ objWorksheet-> getHighestRow();

Je l'ai testé ce code et la valeur est toujours 1

0

Essayez ce code, Son me traitèrent

$filename = 'path/example.xls'; 
    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objPHPExcel = $objReader->load($filename); 
    $objWorksheet = $objPHPExcel->getActiveSheet(); 


    $row_id = 1; // deleted row id 
    $number_rows = 2; // number of rows count 
if ($objWorksheet != NULL) { 
      if ($objWorksheet->removeRow($row_id, $number_rows)) { 
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
       $objWriter->save($filename); 
      } 
     } 
Questions connexes