但是刚写完这个功能的时候第一次导入是成功的,再导入就报错了
1
public function excel()
{
Loader::import('PHPExcel.Classes.PHPExcel');
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
//获取表单上传文件
$file = $this->request->file('import');
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
//echo $info->getFilename();
$exclePath = $info->getSaveName(); //获取文件名
$file_name = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath; //上传文件的地址
$objReader =\PHPExcel_IOFactory::createReader('Excel2007');
$obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8'); //加载文件内容,编码utf-8
$excel_array=$obj_PHPExcel->getsheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
$data = [];
foreach($excel_array as $k=>$v) {
$data[$k]['act_id'] = $v[0];
$data[$k]['act_name'] = $v[1];
$data[$k]['material_code'] = $v[2];
$data[$k]['material'] = $v[3];
$data[$k]['material_norms'] = $v[4];
$data[$k]['unit'] = $v[5];
$data[$k]['plan_count'] = $v[6];
$data[$k]['remark'] = $v[7];
}
//var_dump($data);exit();
$result = Db::name('DesignDeliverInfo')->insertAll($data); //批量插入数据
//var_dump($result);exit();
return $result;
} else {
return $file->getError();
}
} 2public function excel()
{
$file = $this->request->file('import');
$path = ROOT_PATH . 'public/tmp/uploads/';
$info = $file->move($path);
$filename = $path . $info->getSaveName();
// 通过文件上传,然后取到上传后的完整路径文件名
//$file = $filename;
// 解析 Excel 头部信息,返回 $excelHeader = ['A' => '第一行A列描述', 'B' => '第一行B列描述', 'C' => '第一行C列描述',...]
$excelHeader = \Excel::parseHeader($filename);
// 将 $excelHeader 数据抛给前端,让用户选择对应关系,然后再返回给后台进行对应数据的解析,例如抛给后台的数据如下
$header = ['A' => 'act_id', 'B' => 'act_name', 'C' => 'material_code', 'D' => 'material', 'E' => 'material_norms', 'F' => 'unit', 'G' => 'plan_count', 'H' => 'remark'];
$result = \Excel::parse($filename, $header, 20, function ($data) {
//var_dump($data);
Db::name('DesignDeliverInfo')->insertAll($data);
});
var_dump($result);exit();
} 报错内容:SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns
最佳答案