php插件导入excel通用封装方法(2018/7/6)

 1.phpexcel插件读取模板加载sql数据demo,然后导出excel

$file_path = Config::get('EXCEL_PATH').'1.xls';
    $file = $file_path;
    if (!file_exists($file)) {
        return ['status'=>false,'message'=>'找不到模板文件'.$file];
    }
   vendor("PHPExcel.PHPExcel"); 
   $obj = \PHPExcel_IOFactory::load($file);
   $obj->setActiveSheetIndex(0);
 /*--------------开始从数据库提取信息插入Excel表中------------------*/

//

实例化完了之后就先把数据库里面的数据查出来:

$sql = db('sys_user')->select();

 

$i=2; //定义一个i变量,目的是在循环输出数据是控制行数 $count = count($sql); //计算有多少条数据

for ($i = 2; $i <= $count+1; $i++) { $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $sql[$i-2][uid]); $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $sql[$i-2][user_name]); $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $sql[$i-2][user_tel]);



 

//
 $i=2;
 if ($i == 2) {
            $obj->getActiveSheet()->setCellValue('B' . $i, 1);
            $obj->getActiveSheet()->setCellValue('D' . $i, 2);
            $obj->getActiveSheet()->setCellValue('F' . $i, 3);
            $i++;
            $obj->getActiveSheet()->setCellValue('B' . $i, 1);
            $obj->getActiveSheet()->setCellValue('D' . $i, 2);
            $obj->getActiveSheet()->setCellValue('F' . $i, 3);
            $i++;
            $obj->getActiveSheet()->setCellValue('B' . $i, 1);
            $obj->getActiveSheet()->setCellValue('D' . $i, 2);
            $obj->getActiveSheet()->setCellValue('F' . $i, 3);
        }

    $file_name = date('ymdHis', time()).'商品备案单表';
    
    $PHPWriter = \PHPExcel_IOFactory::createWriter( $obj,"Excel2007"); //Excel2007
    ob_end_clean();//清除缓冲区,避免乱码
    header('Content-Disposition: attachment;filename="'.$file_name.'.xlsx"');
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     
    $PHPWriter->save("php://output"); //表示在$path路径下面生成demo.xlsx文件
    exit();
    return ['status'=>true];
    }








2.导入excel:::eg::
      /**
 * 读取上传的excel文件
 * @param  array  $file 上传的文件数据
 * @return array 
 */
      function readExcelFiles($file) {
if (empty($file) || $file['size'] == 0) {
return ['status' => false, 'message' => '没有文件上传'];
}


if (!in_array(pathinfo($file['name'])['extension'], ['xlsx', 'xls'])) {
return ['status' => false, 'message' => '上传文件后缀不允许'];

}

 

//引入第三方包
vendor('PHPExcel.PHPExcel.IOFactory');
$filename = $file['tmp_name'];
//自动获取文件的类型提供给phpexcel用
$fileType = \PHPExcel_IOFactory::identify($filename);
//获取文件读取操作对象  
$objReader = \PHPExcel_IOFactory::createReader($fileType);
//加载文件      
$objPHPExcel = $objReader->load($filename);


return ['status' => true, 'source' => $objPHPExcel];
}

自己项目写到的一个需求功能,代码如下eg::
/**
* 导入完善的商品备案信息
* @param  resource $file 导入excel  
*/
public function importGoodsInfo($file) {
$result = readExcelFiles($file['goods']);
if (!$result['status']) {
return ['status' => false, 'message' => $result['message']];
}


//完善商品单信息
$good_info = filterData($result['source']->getSheet(0)->toArray());
                $goods = Db::name('goods_declare_list');
//验证该表中信息是否正确
unset($good_info[0]);
$good_serial = [];
foreach ($good_info as $key => $value) {
//如果记录所有元素为空,则删除记录
if (empty($value[0]) && empty($value[1]) && empty($value[2]) && empty($value[3]) && empty($value[4]) && empty($value[5]) && empty($value[6]) && empty($value[7]) && empty($value[8])) {
unset($good_info[$key]);
continue;
}
//检测商品名称
if (empty($value[0])) {
return ['status' => false, 'message' => '商品序号不可为空'];
}
if (in_array($value[0], $good_serial)) {
return ['status' => false, 'message' => '商品序号 ' . $value[0] . ' 重复'];
}
    
if (empty($value[1])||empty($value[2])) {
return ['status' => false, 'message' => '商品SKU编码、上架品名均不能为空'];
}
                       if (empty($value[3]) || empty($value[4]) || empty($v[5])) {
                         return ['status' => false, 'message' => '错误提示:商品信息中行邮税号、HS编码、商品名称均不能为空,请核对'];
                         }
                  
                        
$save_info[$key-1]['Seq'] = $value[0];
$save_info[$key-1]['SKU'] = $value[1];
$save_info[$key-1]['ShelfGName'] = $value[2];
                        $save_info[$key-1]['NcadCode']=$value[3];
                        $save_info[$key-1]['HSCode']=$value[4];
                        $save_info[$key-1]['GoodsName']=$value[5];
                      
$good_serial[] = $value[0];

}


//如果上传的文件信息为空,则不通过验证
if (empty($save_info)) {
return ['status' => false, 'message' => '上传的商品备案信息不可为空'];
}


//更新数据
$goods->startTrans();
foreach ($save_info as $key => $value) {
$save['Seq'] = $value['Seq'];
$save['SKU'] = $value['SKU'];
$save['ShelfGName'] = $value['ShelfGName'];
                        $save['NcadCode']=$value['NcadCode'];
                        $save['HSCode']=$value['HSCode'];
                        $save['GoodsName']=$value['GoodsName'];
                    
if ($goods->insert($save) == false) {
$goods->rollback();
return ['status' => false, 'message' => '未知错误:操作失败,请重试'];
}
}
$goods->commit();
return ['status' => true];
}













 

你可能感兴趣的:(php插件导入excel通用封装方法(2018/7/6))