一:使用composer下載 phpoffice/phpexcel 或者直接下載安裝包php
composer require phpoffice/phpexcel
二html
1:導入數據數據庫
原理:讀取文件,獲取文件的最大行,最大列。而後組裝數據,導入數據庫。數組
注意:若是你的Excel文件是加密的話是讀取不了的,我真的在這上面浪費了不少時間,若是有誰知道如何解決,麻煩告知一二謝謝。app
咱們來看看如何具體實現composer
實現方法yii
public static function importExcel($file = '', $sheet = 0) { $file = iconv("utf-8", "gb2312", $file); //轉碼 if (empty($file) OR !file_exists($file)) { die('file not exists!'); } $objRead = new PHPExcel_Reader_Excel2007(); //創建reader對象 if (!$objRead->canRead($file)) { $objRead = new PHPExcel_Reader_Excel5(); if (!$objRead->canRead($file)) { die('No Excel!'); } } $cellName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ']; $obj = $objRead->load($file); //創建excel對象 $currSheet = $obj->getSheet($sheet); //獲取指定的sheet表 $columnH = $currSheet->getHighestColumn(); //取得最大的列號 $columnCnt = array_search($columnH, $cellName); $rowCnt = $currSheet->getHighestRow(); //獲取總行數 $data = []; for ($_row = 1; $_row <= $rowCnt; $_row++) { //讀取內容 for ($_column = 0; $_column <= $columnCnt; $_column++) { $cellId = $cellName[$_column] . $_row; $cellValue = $currSheet->getCell($cellId)->getValue(); $data[$_row][$_column] = $cellValue; } } $return_data = []; foreach ($data as $k => $v) { if ($k > 1) { $test = array_combine($data[1], $data[$k]); array_push($return_data, $test); } } return $return_data; }
//精簡版post
<?php
/**
* Created by PhpStorm.
* User: Json
* Date: 2019/3/13 0013
* Time: 15:25
*/
namespace app\models;
use PHPExcel_Reader_Excel2007;
use PHPExcel_Reader_Excel5;
class importExcel
{
public static function importExcel($file = '', $sheet = 0)
{
$file = iconv("utf-8", "gb2312", $file); //轉碼
if (empty($file) OR !file_exists($file)) {
die('file not exists!');
}
$objRead = new PHPExcel_Reader_Excel2007(); //創建reader對象
if (!$objRead->canRead($file)) {
$objRead = new PHPExcel_Reader_Excel5();
if (!$objRead->canRead($file)) {
die('No Excel!');
}
}
$obj = $objRead->load($file); //創建excel對象
$data = $obj->getSheet($sheet)->toArray();//獲取爲數組
$return_data = [];
foreach ($data as $k => $v) {
if ($k > 0) {
$test = array_combine($data[0], $data[$k]);
array_push($return_data, $test);
}
}
return $return_data;
}
}
步驟1:頁面:ui
<html> <body> <form action="<?= \yii\helpers\Url::to(['site/import']) ?>" method="post" enctype="multipart/form-data"> <input type="file" name="file" id="file"/> <input type="submit" name="submit" value="Submit"/> </form> </body> </html>
步驟2:PHP調用加密
public function actionImport() { $file = $_FILES['file']; $data = importExcel::importExcel($file['tmp_name']); var_dump($data); }
注意若是文件過大,PHP讀取會過長,咱們能夠設置。
set_time_limit(0);//0表明永久