web-dev-qa-db-fra.com

PHP importer Excel dans la base de données (xls et xlsx)

J'ai essayé de rechercher des plugins pour importer un fichier Excel dans la base de données MySQL, l'un d'eux est http://code.google.com/p/php-Excel-reader/

L'outil est si puissant qu'il affiche l'intégralité du contenu Excel en html.

Cependant, je pense que j'ai juste besoin de lire le fichier Excel et d'extraire le contenu, par exemple, dans un tableau, puis d'écrire une instruction SQL pour entrer dans la base de données.

Y aurait-il de bons codes et packages? Merci!

20
Ham

C'est le meilleur plugin avec une documentation et des exemples appropriés

https://github.com/PHPOffice/PHPExcel

Point positif: vous pouvez demander de l'aide dans son forum de discussion et vous obtiendrez une réponse dans la journée de l'auteur lui-même, vraiment impressionnant.

36
diEcho

Parfois, j'ai besoin d'importer de gros fichiers xlsx dans la base de données, donc j'utilise spreadsheet-reader car il peut lire le fichier par ligne. C'est une manière très efficace en mémoire d'importer.

<?php
    // If you need to parse XLS files, include php-Excel-reader
    require('php-Excel-reader/Excel_reader2.php');

    require('SpreadsheetReader.php');

    $Reader = new SpreadsheetReader('example.xlsx');
    // insert every row just after reading it
    foreach ($Reader as $row)
    {
        $db->insert($row);
    }
?>

https://github.com/nuovo/spreadsheet-reader

16
shukshin.ivan

Si vous pouvez convertir .xls en .csv avant le traitement, vous pouvez utiliser la requête ci-dessous pour importer le csv dans la base de données:

load data local infile 'FILE.CSV' into table TABLENAME fields terminated by ',' enclosed by '"' lines terminated by '\n' (FIELD1,FIELD2,FIELD3)
7
user1259132

Si vous enregistrez le fichier Excel en tant que fichier CSV, vous pouvez l'importer dans une base de données mysql à l'aide d'outils tels que PHPMyAdmin

Je ne sais pas si cela vous aiderait dans votre situation, mais un fichier csv manuellement ou par programme serait beaucoup plus facile à analyser dans une base de données qu'un fichier Excel, j'aurais pensé.

EDIT: Je suggérerais cependant de regarder les autres réponses plutôt que les miennes puisque la réponse @diEcho semble plus appropriée.

3
Jon Taylor

J'ai écrit une classe héritée:

<?php
class ExcelReader extends Spreadsheet_Excel_Reader {    
        
 function GetInArray($sheet=0) {

  $result = array();

   for($row=1; $row<=$this->rowcount($sheet); $row++) {
    for($col=1;$col<=$this->colcount($sheet);$col++) {
     if(!$this->sheets[$sheet]['cellsInfo'][$row][$col]['dontprint']) {
      $val = $this->val($row,$col,$sheet);
      $result[$row][$col] = $val;
     }
    }
   }
  return $result;
 }

}
?>

Je peux donc faire ceci:

<?php

 $data = new ExcelReader("any_Excel_file.xls");
 print_r($data->GetInArray());

?>
1
Ozsvar Istvan