最近写了一个项目,主要是给58销售的朋友用的,他需要用到excel导入到数据库,正好研究下。
1.首先下载一个phpexcel到本地,然后解压之后就可以将phpExcel文件夹和phpExcel.php这两个放到vendor目录里面方便引入,
2.显示excel导入的页面,
<form enctype="multipart/form-data" method="post" id="form-admin-role-add" action="{:U('home/index/addExcel')}"><div>
<input type="file" name="excel" />
<input type="submit" value="导入" class="btn btn-w-m btn-primary btn-outline" />
</div>
</form>
这是导入页面的html代码。
3.写一个接收文件上传的方法,处理文件的名字,把文件放到指定的位置
//接收前台文件,
public function addExcel()
{
//接收前台文件
$ex = $_FILES['excel'];
//重设置文件名
$filename = time().substr($ex['name'],stripos($ex['name'],'.'));
$path = PUBLIC_DIR.'excel/'.$filename;//设置移动路径
if(!file_exists(PUBLIC_DIR . '/'.'excel')){
//makedir 如果文件夹不存在就创建一个文件夹
mkdir(PUBLIC_DIR . '/'.'excel',0777);
}
$a = move_uploaded_file($ex['tmp_name'],$path);
$exfn = $this->_readExcel($path);
}
这里有一个_readExcel这个方法,还没贴出来,这个是读取excel的方法
4.读取excel并返回数组
public function _readExcel($path)
{
//引用PHPexcel 类
vendor("PHPExcel.PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.IOFactory");
$type = 'Excel2007';//设置为Excel5代表支持2003或以下版本,Excel2007代表2007版
$xlsReader = \PHPExcel_IOFactory::createReader($type);
$xlsReader->setReadDataOnly(true);
$xlsReader->setLoadSheetsOnly(true);
$Sheets = $xlsReader->load($path);
//开始读取上传到服务器中的Excel文件,返回一个二维数组
$dataArray = $Sheets->getSheet(0)->toArray();
return $dataArray;
}
到这一步之后你就得到了$exfn,这个就是你excel里面的内容了
建议数据库的字段和excel最好能对上,时间,电话等数据需要谨慎处理,时间格式到了数组会变成一个不正常的浮点数,需要转化下,百度有,方法很简单。
excel导入就算完成了,然后你数据入库只需要写写入就好了,addAll