2009-02-19 37 views
82

Tôi đang cố đọc một tệp Excel (Office 2003). Có một tệp Excel cần phải được tải lên và nội dung của nó được phân tích cú pháp.Đọc một tệp Excel trong PHP

Thông qua Google, tôi chỉ có thể tìm câu trả lời cho các chủ đề liên quan (không đủ): tạo tệp Excel, đọc tệp Excel XML, đọc tệp Excel CSV hoặc dự án bị bỏ qua không hoàn chỉnh. Tôi sở hữu Office 2003 vì vậy nếu tôi cần bất kỳ tệp nào từ đó, chúng có sẵn. Nó được cài đặt trên hộp của tôi nhưng không phải và không thể được cài đặt trên máy chủ chia sẻ của tôi.

Chỉnh sửa: cho đến nay tất cả các câu trả lời đều trỏ tới PHP-ExcelReader và/hoặc this additional article về cách sử dụng.

+1

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

+3

Hai liên kết trên Chỉnh sửa bị hỏng! – Houari

Trả lời

40

Tôi sử dụng PHP-ExcelReader để đọc tệp xls và hoạt động tuyệt vời.

+6

Nó không hoạt động đối với tôi tôi có php 5.2+, cho tôi lỗi "Gán giá trị trả về mới bằng tham chiếu không được chấp nhận" –

+0

Tương tự ở đây @hRaval, bạn có tìm thấy giải pháp nào sau này không ?? – aslamdoctor

+6

Xin chào các bạn, tôi đã khắc phục một số điều để làm cho nó tương thích với các phiên bản PHP 5 gần đây: http://pastebin.com/YNUZANcs Tất cả các khoản tín dụng đều được chuyển đến nhà phát triển ban đầu. –

52

Bạn có 2 lựa chọn như xa như tôi biết:

  1. Spreadsheet_Excel_Reader, mà biết nhị phân định dạng Office 2003
  2. PHPExcel, mà biết cả Office 2003 cũng như Excel 2007 (XML).

PHPExcel sử dụng bảng tính_Excel_Reader cho định dạng Office 2003.

Cập nhật: Tôi đã từng đọc một số tệp Excel nhưng tôi đã sử dụng định dạng XML Office 2003 để đọc và nói với những người đang sử dụng ứng dụng để lưu và tải lên chỉ loại tệp Excel đó.

+1

Không phải cả hai để tạo ra và không phải để đọc? – Dinah

+0

Cả hai đều cho phép đọc và viết. – IEnumerator

+0

@NTulip: Tôi không thấy gì trong danh sách tính năng hoặc tài liệu về đề xuất rằng họ có thể đọc từ các tệp Excel. Bất kỳ ví dụ nào? – Dinah

15

Tùy thuộc vào cách bạn muốn sử dụng dữ liệu trong tệp excel. Nếu bạn muốn nhập nó vào mysql, bạn chỉ cần lưu nó dưới dạng tệp có định dạng CSV và sau đó sử dụng fgetcsv để phân tích cú pháp.

3

Hãy thử này ...

Tôi đã sử dụng mã sau đây để đọc "xls và 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>'; 

tham khảo: http://coursesweb.net/php-mysql/read-excel-file-data-php_pc

+0

nó không hoạt động cho các tệp .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

Điều này có vẻ tốt nếu máy chủ PHP của bạn đang chạy trên Windows và Excel được cài đặt. –

1

Có một lớn article để giải thích như thế nào để đọc/ghi các tệp excel thông qua mã php, Chúng tôi đã khuyên bạn nên sử dụng lớp MS-Excel Stream Handler PHP, một trong những thư viện lớp hàng đầu cho điều đó :)