一直使用python處理excel文件,php項目中使用maatwebsite/excel來處理excel文件,發現特別強大,記錄使用過程。
由於新版3.1改版較大,改成使用2.1,後面根據須要會調整php
PHP version >= 5.3.7 Laravel >= 4.1 PHPOffice PHPExcel >= 1.8.0 (included by composer.json) PHP extension php_zip enabled (required if you need PHPExcel to handle .xlsx .ods or .gnumeric files) PHP extension php_xml enabled PHP extension php_gd2 enabled (optional, but required for exact column width autocalculation)
composer require "maatwebsite/excel": "~2.1.0"
app/config/app.configpython
config/app.php //Package Service Providers... 'providers' => [ Maatwebsite\Excel\ExcelServiceProvider::class, ] 'aliases' => [ 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ]
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
Excel::load('file.xls', function($reader) { // reader methods });
注意文件能夠是存儲的文件,或者經過客戶端傳遞的文件,經過客戶端傳遞的文件須要完成客戶端傳遞文件的邏輯和基本的文件檢測以下給個示例:web
function checkFileUploadTrue(){ // UPLOAD_ERR_OK => '文件上傳成功。' // 下面的錯誤對應的整數位1-》1 $error = [ UPLOAD_ERR_INI_SIZE => '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。',//1 UPLOAD_ERR_FORM_SIZE => '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。',//2 UPLOAD_ERR_PARTIAL => '文件只有部分被上傳。',//3 UPLOAD_ERR_NO_FILE => '沒有文件被上傳。',//4 UPLOAD_ERR_NO_TMP_DIR => '找不到臨時文件夾。',//6 UPLOAD_ERR_CANT_WRITE => '文件寫入失敗。'//7 ]; // 檢測error是否爲0,其餘的任務不成功 if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) { return ['flag'=> False,'msg' => $error[$_FILES['file']['error']]]; } // 檢測是否爲上傳文件 if (!is_uploaded_file($_FILES["file"]["tmp_name"])) { return ['flag' => False, 'msg' => '不是上傳的文件!']; } // 檢測是否爲約定的文件類型 $file_type = ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/vnd.ms-excel']; if (!in_array($_FILES['file']['type'],$file_type)) { return ['flag' => False, 'msg' => '只能上傳excel類型文件']; } // 目錄 $storage_file_dir = '/data/file/tmp/'; //轉存文件 $tmp_filename = $_FILES['file']['tmp_name']; $dest_filename = $storage_file_dir.$_FILES['file']['name']; if(!move_uploaded_file($tmp_filename,$dest_filename)){ return ['flag' => False, 'msg' => '文件轉存失敗,確認以後再轉存!']; } return ['flag'=> True,'msg' => '']; }
Excel::load('local_store.xls', function($reader) { })->get(); //或者 Excel::load('local_store.xls', function($reader) { // 獲取全部的結果集 $results = $reader->get(); //或者使用all //$results = $reader->all(); });