2009-02-19 26 views
82

Sto cercando di leggere un file di Excel (Office 2003). C'è un file Excel che deve essere caricato e il suo contenuto analizzato.Lettura di un file Excel in PHP

Tramite Google, posso trovare solo risposte a questi argomenti correlati (e insufficienti): generazione di file Excel, lettura di file XML Excel, lettura di file CSV di Excel o progetti abbandonati incompleti. Possiedo Office 2003 quindi se ho bisogno di file da lì, sono disponibili. È installato sulla mia scatola ma non lo è e non può essere installato sul mio host condiviso.

Modifica: finora tutte le risposte indicano PHP-ExcelReader e/o this additional article su come utilizzarlo.

+1

[Articolo Zend] (http://devzone.zend.com/article/3336-Lettura e fogli di scrittura- Fogli di lavoro- con -PHP) – IEnumerator

+3

I due collegamenti su Modifica sono interrotti! – Houari

risposta

40

Io uso PHP-ExcelReader per leggere i file xls e funziona benissimo.

+6

Non funziona per me ho php 5.2+, dammi un errore "Assegnare il valore di ritorno di nuovo per riferimento è deprecato" –

+0

Lo stesso qui @hRaval, hai trovato qualche soluzione per dopo? – aslamdoctor

+6

Ciao ragazzi, ho sistemato alcune cose per renderlo compatibile con le recenti versioni di PHP 5: http://pastebin.com/YNUZANcs Tutti i crediti vanno agli sviluppatori originali. –

52

Hai 2 scelta per quanto ne so:

  1. Spreadsheet_Excel_Reader, che conosce Office 2003 il formato binario
  2. PHPExcel, che conosce sia Office 2003 e Excel 2007 (XML).

PHPExcel utilizza Spreadsheet_Excel_Reader per il formato Office 2003.

Aggiornamento: una volta ho dovuto leggere alcuni file di Excel, ma ho usato il formato XML di Office 2003 per leggerli e ho detto alle persone che stavano usando l'applicazione di salvare e caricare solo quel tipo di file Excel.

+1

Non sono questi sia per la generazione che per la lettura? – Dinah

+0

Entrambi consentono la lettura e la scrittura. – IEnumerator

+0

@NTulip: non vedo nulla negli elenchi di funzionalità o nella documentazione di entrambi per suggerire che possano leggere dai file di Excel. Qualche esempio? – Dinah

15

Dipende da come si desidera utilizzare i dati nel file excel. Se vuoi importarlo in mysql, puoi semplicemente salvarlo come file in formato CSV e quindi usare fgetcsv per analizzarlo.

3

Prova questo ...

Ho usato seguente codice per leggere "xls e 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>'; 

Riferimento: http://coursesweb.net/php-mysql/read-excel-file-data-php_pc

+0

non funziona per file .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

Sembra buono se il server PHP è in esecuzione su Windows ed Excel è installato. –

1

C'è una grande article per spiegare come per leggere/scrivere i file excel attraverso il codice php, si è raccomandato di utilizzare la classe PHP MS-Excel Stream Handler, che è una delle librerie di prima classe per questo :)