项目场景:
TP5.1使用phpexcel第三方包进行数据导入导出操作,并实现导入后上传文件删除及导出后数据库数据删除操作。
解决方案:
资源包下载:https://github.com/PHPOffice/PHPExcel
操作方法:下载后放入vendor文件夹下
操作案例(实现导入后上传文件删除及导出后数据库数据删除操作):
/**
* [listExportDo 导入]
* @return [type] [description]
*/
public function listExportDo()
{
$return_data['status'] = 0;
$return_data['msg'] = "导入失败!";
$postParam = input('post.');
if(!$postParam['list_fuser']){
return $return_data;die;
}
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel;
$file = request()->file('upload_file');
// dump($file);die;
$info = $file->validate(['ext' => 'xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
try {
if($info)
{
$exclePath = $info->getSaveName(); //获取文件名
$file_name = ROOT_PATH . 'public' . DS . 'uploads\\' . $exclePath;//上传文件的地址
// 文件格式为xls 时,使用createReader("Exce15")
// 文件格式为xlsx时,使用createReader("Exce2007")
// $objReader =\PHPExcel_IOFactory::createReader("Exce2007");
$objReader =\PHPExcel_IOFactory::createReader("Excel5");
$obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8'); //加载文件内容,编码utf-8
$excel_array=$obj_PHPExcel->getSheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
$city = [];
$i=0;
$time = time();
foreach($excel_array as $k=>$v) {
$city[$k]['list_name'] = $v[0];
$city[$k]['list_phone'] = $v[1];
$city[$k]['list_addtime'] =$time;
$city[$k]['list_fuserid'] =$postParam['list_fuser'];
$i++;
}
$insertRes = db("lists")->insertAll($city);
if($insertRes){
$return_data['status'] = 1;
$return_data['msg'] = "导入成功!";
// 删除文件
unset($info);
unlink($file_name);
}
}else
{
// echo $file->getError();
$return_data['errormsg'] = $file->getError();
}
} catch (Exception $e) {
$return_data['errormsg2'] = $e->getError();
}
return $return_data;
}
public function listImportDo(){
// 身份验证
$currentUser = db("backlogin")->where('id','=',session("loginback_id"))->field('login_type')->find();
if($currentUser['login_type']==1){
$list = db('lists')->select();
}else{
$list = db('lists')->where('list_fuserid','=',session("loginback_id"))->select();
}
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties()->setCreator("ctos")
->setLastModifiedBy("ctos")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
//合并cell
$objPHPExcel->getActiveSheet()->mergeCells('A1:D1');
// set table header content
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '数据中心导出 时间:'.date('Y-m-d H:i:s'))
->setCellValue('A2', '编号')
->setCellValue('B2', '用户名')
->setCellValue('C2', '手机号')
->setCellValue('D2', '时间');
// Miscellaneous glyphs, UTF-8
for($i=0;$i<count($list);$i++){
$autoId = $i+1;
$objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $autoId);
$objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $list[$i]['list_name']);
$objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $list[$i]['list_phone']);
$objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), date("Y-m-d H:i:s",$list[$i]['list_addtime']));
$objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);
}
// sheet命名
$objPHPExcel->getActiveSheet()->setTitle('数据中心');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// excel头参数
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="数据中心('.date('Ymd-His').').xls"'); //日期为文件名后缀
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel5为xls格式,excel2007为xlsx格式
$objWriter->save('php://output');
// 删除
if($currentUser['login_type']==1){
$list = db('lists')->where('1=1')->delete();
}else{
$list = db('lists')->where('list_fuserid','=',session("loginback_id"))->delete();
}
}
问题总结:
"continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"
ZipArchive::locateName(): Invalid or uninitialized Zip object