2009-02-19 8 views
82

J'essaie de lire un fichier Excel (Office 2003). Il y a un fichier Excel qui doit être téléchargé et son contenu analysé.Lecture d'un fichier Excel en PHP

Via Google, je ne peux que trouver des réponses à ces (sujets et insuffisants) liés: la génération de fichiers Excel, la lecture des fichiers XML Excel, la lecture des fichiers Excel CSV, ou des projets inachevés abandonnés. Je possède Office 2003, donc si j'ai besoin de fichiers à partir de là, ils sont disponibles. Il est installé sur ma boîte mais n'est pas et ne peut pas être installé sur mon hôte partagé.

Edit: jusqu'à présent toutes les réponses font ressortir PHP-ExcelReader et/ou this additional article sur la façon de l'utiliser.

+1

[Article Zend] (http://devzone.zend.com/article/3336-Reading-and-Writing-Spreadsheets-with-PHP) – IEnumerator

+3

Les deux liens de l'Edit sont cassés! – Houari

Répondre

40

J'utilise PHP-ExcelReader pour lire les fichiers xls, et fonctionne très bien.

+6

Il ne fonctionne pas pour moi j'ai PHP 5.2+, donnez-moi une erreur "Affectation de la valeur de retour de nouveau par référence est obsolète" –

+0

Même ici @hRaval, avez-vous trouvé une solution pour elle plus tard? – aslamdoctor

+6

Hey les gars, j'ai corrigé quelques choses pour le rendre compatible avec les versions récentes de PHP 5: http://pastebin.com/YNUZANcs Tous les crédits vont aux développeurs d'origine. –

52

Vous avez 2 choix autant que je sache:

  1. Spreadsheet_Excel_Reader, qui connaît le format binaire Office 2003
  2. PHPExcel, qui connaît à la fois Office 2003, ainsi que Excel 2007 (XML).

PHPExcel utilise Spreadsheet_Excel_Reader pour le format Office 2003.

Mise à jour: J'ai déjà lu des fichiers Excel, mais j'ai utilisé le format XML Office 2003 pour les lire et dire aux personnes qui utilisaient l'application de sauvegarder et télécharger uniquement ce type de fichier Excel.

+1

Ne sont-ils pas à la fois pour générer et non pour lire? – Dinah

+0

Ils permettent tous les deux de lire et d'écrire. – IEnumerator

+0

@NTulip: Je ne vois rien dans les listes de caractéristiques ni dans la documentation de l'un ou de l'autre suggérant qu'ils peuvent lire des fichiers Excel. Des exemples? – Dinah

15

Cela dépend de la manière dont vous voulez utiliser les données dans le fichier Excel. Si vous voulez l'importer dans mysql, vous pouvez simplement l'enregistrer en tant que fichier au format CSV, puis utiliser fgetcsv pour l'analyser.

3

Try this ...

J'ai utilisé le code suivant pour lire "xls et xlsx"

<?php 
    include 'excel_reader.php';  // include the class 
    $excel = new PhpExcelReader;  // creates object instance of the class 
    $excel->read('excel_file.xls'); // reads and stores the excel file data 

    // Test to see the excel data stored in $sheets property 
    echo '<pre>'; 
    var_export($excel->sheets); 

    echo '</pre>'; 

    or 

echo '<pre>'; 
    print_r($excel->sheets); 

    echo '</pre>'; 

Référence: http://coursesweb.net/php-mysql/read-excel-file-data-php_pc

+0

cela ne fonctionne pas pour les fichiers .xlsx –

2
// Here is the simple code using COM object in PHP 
class Excel_ReadWrite{ 

    private $XLSHandle; 
    private $WrkBksHandle; 
    private $xlBook; 

    function __construct() { 
     $this->XLSHandle = new COM("excel.application") or die("ERROR: Unable to instantaniate COM!\r\n"); 
    } 

    function __destruct(){ 
     //if already existing file is opened 
     if($this->WrkBksHandle != null) 
     { 
      $this->WrkBksHandle->Close(True); 
      unset($this->WrkBksHandle); 
      $this->XLSHandle->Workbooks->Close(); 
     } 
     //if created new xls file 
     if($this->xlBook != null) 
     { 
      $this->xlBook->Close(True); 
      unset($this->xlBook); 
     } 
     //Quit Excel Application 
     $this->XLSHandle->Quit(); 
     unset($this->XLSHandle); 
    } 

    public function OpenFile($FilePath) 
    { 
     $this->WrkBksHandle = $this->XLSHandle->Workbooks->Open($FilePath); 
    } 

    public function ReadData($RowNo, $ClmNo) 
    { 
     $Value = $this->XLSHandle->ActiveSheet->Cells($RowNo, $ClmNo)->Value; 
     return $Value; 
    } 

    public function SaveOpenedFile() 
    { 
     $this->WrkBksHandle->Save(); 
    } 

    /*********************************************************************************** 
    * Function Name:- WriteToXlsFile() will write data based on row and column numbers 
    * @Param:- $CellData- cell data 
    * @Param:- $RowNumber- xlsx file row number 
    * @Param:- $ColumnNumber- xlsx file column numbers 
    ************************************************************************************/ 
    function WriteToXlsFile($CellData, $RowNumber, $ColumnNumber) 
    { 
     try{ 
       $this->XLSHandle->ActiveSheet->Cells($RowNumber,$ColumnNumber)->Value = $CellData; 
      } 
     catch(Exception $e){ 
       throw new Exception("Error:- Unable to write data to xlsx sheet"); 
      } 
    } 


    /**************************************************************************************** 
    * Function Name:- CreateXlsFileWithClmName() will initialize xls file with column Names 
    * @Param:- $XlsColumnNames- Array of columns data 
    * @Param:- $XlsColumnWidth- Array of columns width 
    *******************************************************************************************/ 
    function CreateXlsFileWithClmNameAndWidth($WorkSheetName = "Raman", $XlsColumnNames = null, $XlsColumnWidth = null) 
    { 
     //Hide MS Excel application window 
     $this->XLSHandle->Visible = 0; 
     //Create new document 
     $this->xlBook = $this->XLSHandle->Workbooks->Add(); 

     //Create Sheet 1 
     $this->xlBook->Worksheets(1)->Name = $WorkSheetName; 
     $this->xlBook->Worksheets(1)->Select; 

     if($XlsColumnWidth != null) 
     { 
      //$XlsColumnWidth = array("A1"=>15,"B1"=>20); 
      foreach($XlsColumnWidth as $Clm=>$Width) 
      { 
       //Set Columns Width 
       $this->XLSHandle->ActiveSheet->Range($Clm.":".$Clm)->ColumnWidth = $Width; 
      }  
     } 
     if($XlsColumnNames != null) 
     { 
      //$XlsColumnNames = array("FirstColumnName"=>1, "SecondColumnName"=>2); 
      foreach($XlsColumnNames as $ClmName=>$ClmNumber) 
      { 
       // Cells(Row,Column) 
       $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Value = $ClmName; 
       $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Font->Bold = True; 
       $this->XLSHandle->ActiveSheet->Cells(1,$ClmNumber)->Interior->ColorIndex = "15"; 
      } 
     } 
    } 
    //56 is for xls 8 
    public function SaveCreatedFile($FileName, $FileFormat = 56) 
    { 
     $this->xlBook->SaveAs($FileName, $FileFormat); 
    } 

    public function MakeFileVisible() 
    { 
     //Hide MS Excel application window`enter code here` 
     $this->XLSHandle->Visible = 1; 
    } 
}//end of EXCEL class 
+0

Cela semble bien si votre serveur PHP s'exécute sous Windows et qu'Excel est installé. –

1

Il y a une grande article pour expliquer comment pour lire/écrire des fichiers Excel via le code php, ils ont été recommandés pour utiliser la classe PHP MS-Excel Stream Handler, qui est l'une des bibliothèques de classe supérieure pour cela :)

Questions connexes