2015-08-31 1 views
0

Je souhaite lire les données du fichier .xlsx ou .xls dans le codeigniter. J'ai lu les autres questions, mais rien ne fonctionne. J'ai utilisé phpexcel, lecteur mais sans chance. Dans mon projet, je donne la possibilité de télécharger le fichier Excel puis je veux lire les données et les insérer dans la base de données.Lire les données .xlsx et .xls dans le codeigniter

Maintenant, je suis en utilisant la bibliothèque PHPExcel j'ai écrit:

$this->load->library('excel'); 
    $reader= PHPExcel_IOFactory::createReader('Excel2007'); 
    $reader->setReadDataOnly(true); 
    $path=(FCPATH.'uploads/productfile/'.$_FILES['upload_file']['name']); 
    $excel=$reader->load($path); 
    $sheet=$excel->setActiveSheetIndex(0); 
    for($i=0;$i<=1000;$i++) 
    { 
     $col1= $sheet->getCellByColumnAndRow(0,$i)->getValue(); 
     $col2= $sheet->getCellByColumnAndRow(1,$i)->getValue(); 
     $col3= $sheet->getCellByColumnAndRow(2,$i)->getValue(); 
     var_dump($col1); 
    } 

mais affichage:

Uncaught exception 'PHPExcel_Exception' message « Vous avez essayé de définir une feuille actif par l'index hors limites: 0. Le nombre réel de feuilles est 0 S'il vous plaît donnez-moi un exemple de code.

L'erreur enter image description here S'il vous plaît me donner quelques exemples de code:

+0

Qu'avez-vous fait jusqu'à présent? Postez votre code et vos résultats, et vous aurez une bien meilleure chance d'obtenir une bonne réponse à votre question. – Tobbe

+0

J'ai fait beaucoup de choses que j'ai utilisées phpexcel mais dans ce que je ne peux pas télécharger le fichier xlsx et beaucoup d'erreur est venu. alors j'ai utilisé phpreaded mais même pas fait. donc ont tout enlevé. Maintenant, je veux le faire dès le début selon l'idée donnée. –

+0

l'erreur que vous avez ajoutée est due au fait que le chemin que vous avez indiqué n'est pas valide. Le fichier que vous essayez d'ouvrir n'est pas dans ce chemin à partir du dossier racine. Adaptez le chemin que j'ai suggéré dans ma réponse à la vraie que vous avez –

Répondre

0

Merci à tous pour votre suggestion: je suis arrivé la solution:

   $file_data = $this->upload->data(); 
       $file_path = './uploads/productfile/'.$file_data['file_name']; 
       include 'Classes/PHPExcel/IOFactory.php'; 
       $inputFileName = $file_path; 
       $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 
       $allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); 
       $arrayCount = count($allDataInSheet); // Here get total count of row in that Excel sheet 
       for($i=2;$i<=$arrayCount;$i++) 
       { 

          'product'=$allDataInSheet[$i]["C"], 
          'brand'=$allDataInSheet[$i]["I"], 
          'standard'=$allDataInSheet[$i]["J"], 
       } 
+0

Veuillez accepter la réponse d'où vous avez eu l'idée. Il semble que vous ayez tiré le meilleur parti de la réponse de @ KSP, alors vous devriez le créditer. – trincot

1

Cette erreur est causée par une mauvaise initialisation des fonctionnalités de lecture PHPExcel je suppose. je fais quelque chose comme cela pour obtenir les données à partir d'un fichier Excel:

require_once '../Classes/PHPExcel/IOFactory.php'; 
$filename = '../uploads/product/abc.xls'; 
$objPHPExcel = PHPExcel_IOFactory::load($filename); 

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
    $worksheetTitle  = $worksheet->getTitle(); 
    $highestRow   = $worksheet->getHighestRow(); // e.g. 10 
    $highestColumn  = $worksheet->getHighestColumn(); // e.g 'F' 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
    $nrColumns = ord($highestColumn) - 64; 
    $total_rows = $highestRow-1; 

    for ($row = 2; $row <= $highestRow; ++ $row) { 
    //id 
     $cell = $worksheet->getCellByColumnAndRow(0,$row); 
     $id = $cell->getValue(); 
     if(is_null($id)){$id = '#';} 
    } 
+0

HI j'ai essayé votre code mais j'ai eu l'erreur comme l'exception Uncaught 'PHPExcel_Reader_Exception' avec le message 'Impossible d'ouvrir abc.xls pour la lecture! Le fichier n'existe pas –

+0

Quelle erreur obtenez-vous? Quoi qu'il en soit, veuillez noter que vous devez adapter mon exemple à votre environnement! –

+0

je reçois l'erreur: --- "Exception non interceptée" PHPExcel_Reader_Exception "avec le message" Impossible d'ouvrir abc.xls pour la lecture! "--- –

2

Essayez ceci:

$sheet = $excel->getActiveSheet()->toArray(null,true,true,true); 

Cela vous retourne un tableau de sheet.Hope actif actuel cette aide.

+0

où devrais-je ajouter cette ligne? –

+1

remplacez $ sheet = $ excel-> setActiveSheetIndex (0); avec $ sheet = $ excel-> getActiveSheet() -> toArray (null, true, true, true); et aussi vous devez éditer votre boucle FOR car cela vous retournera un ARRAY pas un OBJET – KSP

0

Cette extension de PHPExcel_IOFactory a des problèmes avec des symboles comme marques ™, Copy Right, degré etc.

Vous ne pouvez pas lire un bloc particulier s'il contient de tels caractères spéciaux.

+0

S'il vous plaît expliquer comment cela pourrait déclencher l'erreur 'Vous avez essayé de définir une feuille active par l'index hors limites: 0.'. – trincot

+0

Non il suffit de mettre le symbole de la marque déposée ou le symbole de copyright dans le fichier au format CSV et essayer de le lire avec PHPExcel_IOFactory cela ne lira pas les symblos –

+0

C'est sympa de savoir mais ça ne répond pas à mon précédent commentaire. – trincot