Чтение файла Excel в PHP - PullRequest
       43

Чтение файла Excel в PHP

90 голосов
/ 19 февраля 2009

Я пытаюсь прочитать файл Excel (Office 2003). Существует файл Excel, который необходимо загрузить и проанализировать его содержимое.

Через Google я могу только найти ответы на следующие (и недостаточные темы): создание файлов Excel, чтение файлов Excel XML, чтение файлов Excel CSV или незавершенные заброшенные проекты. У меня есть Office 2003, поэтому, если мне нужны какие-то файлы оттуда, они доступны. Он установлен на моем компьютере, но не установлен и не может быть установлен на моем общем хосте.

Редактировать: пока все ответы указывают на PHP-ExcelReader и / или эту дополнительную статью о том, как ее использовать.

Ответы [ 7 ]

58 голосов
/ 19 февраля 2009

Насколько я знаю, у вас есть 2 варианта:

  1. Spreadsheet_Excel_Reader , который знает двоичный формат Office 2003
  2. PHPExcel , который знает как Office 2003, так и Excel 2007 (XML). (Перейдите по ссылке, и вы увидите, что они обновили эту библиотеку до PHPSpreadSheet )

PHPExcel использует Spreadsheet_Excel_Reader для формата Office 2003.

Обновление: мне когда-то приходилось читать некоторые файлы Excel, но я использовал XML-формат Office 2003 для их чтения и говорил людям, которые использовали приложение, для сохранения и загрузки только этого типа файла Excel.

44 голосов
/ 19 февраля 2009

Я использую PHP-ExcelReader , чтобы читать файлы xls, и прекрасно работает.

18 голосов
/ 22 апреля 2013

Это зависит от того, как вы хотите использовать данные в файле Excel. Если вы хотите импортировать его в mysql, вы можете просто сохранить его как файл в формате CSV, а затем использовать fgetcsv для его анализа.

7 голосов
/ 28 декабря 2018

Чтение XLSX (Excel 97-2003)
https://github.com/shuchkin/simplexls

if ( $xls = SimpleXLS::parse('book.xls') ) {
    print_r( $xls->rows() );
} else {
    echo SimpleXLS::parseError();
}

Чтение XLSX (Excel 2003+)
https://github.com/shuchkin/simplexlsx

if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) {
    print_r( $xlsx->rows() );
} else {
    echo SimpleXLSX::parseError();
}

выход

Array (
    [0] => Array
        (
            [0] => ISBN
            [1] => title
            [2] => author
            [3] => publisher
            [4] => ctry
        )
    [1] => Array
        (
            [0] => 618260307
            [1] => The Hobbit
            [2] => J. R. R. Tolkien
            [3] => Houghton Mifflin
            [4] => USA
       )

)

CSV php reader
https://github.com/shuchkin/simplecsv

3 голосов
/ 04 апреля 2016

Есть отличная статья , объясняющая, как читать / писать файлы Excel через php-код. Им рекомендовано использовать PHP-класс MS-Excel Stream Handler, который является одной из лучших библиотек что:)

3 голосов
/ 04 июля 2015

Попробуйте это ...

Я использовал следующий код для чтения "xls and xlsx"

<code>    <?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 '
'; или же echo '
';
    print_r($excel->sheets);

    echo '
';

Справка: http://coursesweb.net/php-mysql/read-excel-file-data-php_pc

2 голосов
/ 01 октября 2015
// 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
...