今天用到这个,百度了好多例子都有问题,最后总结出来一个可用的,下面是代码
1、首先百度下载PHPExcel类库,放到extend下即可,可以使用TP的自动加载类库think\Loader导入
2、前端代码示例
<form enctype="multipart/form-data" method="post" id="uploadForm" action="{:url('inserExcel')}" data-type='ajax'>
<div class="form-group col-sm-3">
<input type="file" name="excel" />
</div>
<div class="form-group col-sm-2">
<input type="submit" class="btn btn-primary" value="导入">
</div>
</form>
3、控制器代码示例
function inserExcel()
{
Loader::import('PHPExcel.Classes.PHPExcel');
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
//获取表单上传文件
$file = request()->file('excel');
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
if(empty($info)) {
return error('导入失败!');
}
$exclePath = $info->getSaveName(); //获取文件名
//上传文件的地址
$filename = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;
//判断版本,这里有的网上的版本没有进行判断,导致会报大概这样的错误:
//Warning: ZipArchive::getFromName() [ziparchive.getfromname]: Invalid or unitialized ,这里加上这个判断就可以了
$extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) );
if($extension == 'xlsx') {
$objReader =\PHPExcel_IOFactory::createReader('Excel2007');
//加载文件内容,编码utf-8
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
}else if($extension == 'xls'){
$objReader =\PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
}else{
return error('请上传excel格式的文件!');
}
$excel_array=$objPHPExcel->getsheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
$data = [];
foreach($excel_array as $k=>$v) {
//data数组根据你表字段自行修改,这里Excel文件里的字段要跟表一致
$data[$k]['name'] = $v[0];
$data[$k]['pid'] = 1;
$data[$k]['type'] = $v[2];
$data[$k]['price'] = $v[3];
$data[$k]['standard'] = $v[4];
$data[$k]['unit'] = $v[5];
$data[$k]['supplier'] = $v[6];
$data[$k]['lowstock'] = $v[7];
$data[$k]['topstock'] = $v[8];
$data[$k]['stock'] = $v[9];
$data[$k]['operator'] = $v[10];
}
if(Db::name('danger')->insertAll($data)){//批量插入数据
return success('导入数据成功!');
} else {
return error('导入数据失败!');
}
} else {
return error('导入失败!');
}
}