web-dev-qa-db-ja.com

PHPでExcelファイルを読み取る

Excelファイル(Office 2003)を読み取ろうとしています。アップロードしてその内容を解析する必要があるExcelファイルがあります。

Googleを介して、Excelファイルの生成、Excel XMLファイルの読み取り、Excel CSVファイルの読み取り、または放棄されたプロジェクトの完了など、関連する(および不十分なトピック)に対する答えしか見つけることができません。私はOffice 2003を所有しているため、そこからファイルが必要な場合は利用できます。ボックスにインストールされていますが、共有ホストにはインストールできず、インストールできません。

編集: これまでのところ、すべての回答は PHP-ExcelReader および/または この追加記事 を使用方法について指摘しています。

90
Dinah

PHP-ExcelReader を使用してxlsファイルを読み取ります。

44
Luis Melgratti

私の知る限り、2つの選択肢があります。

  1. Spreadsheet_Excel_Reader 、Office 2003バイナリ形式を認識
  2. PHPExcel 。Office 2003とExcel 2007(XML)の両方を認識します。 (リンクをたどると、このライブラリが PHPSpreadSheet にアップグレードされていることがわかります)

PHPExcelは、Office 2003形式のSpreadsheet_Excel_Readerを使用します。

更新:一部のExcelファイルを読み取る必要がありましたが、それらを読み取るためにOffice 2003 XML形式を使用し、その種類のExcelファイルのみを保存およびアップロードするためにアプリケーションを使用しているユーザーに伝えました。

58
Ionuț G. Stan

Excelファイルのデータをどのように使用するかによって異なります。 mysqlにインポートする場合は、単純にCSV形式のファイルとして保存してから fgetcsv を使用して解析することができます。

18
Jimbo

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] =>著者
 [3] =>出版社
 [4] => ctry 
)
 [1] =>配列
(
 [0] => 618260307 
 [1] => The Hobbit 
 [2] => JRR Tolkien 
 [3] => Houghton Mifflin 
 [4] => USA 
)
 
)

CSV PHPリーダー
https://github.com/shuchkin/simplecsv

9
Sergey Shuchkin

PHPコードを使用してExcelファイルを読み書きする方法を説明する素晴らしい 記事 があります。MS-ExcelストリームハンドラPHPクラスを使用することをお勧めします。そのためのトップクラスのライブラリ:)

3
Leopathu

これを試して...

「xls and 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>';

参照: http://coursesweb.net/php-mysql/read-Excel-file-data-php_pc

// 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
2
Vicky