php导入excel实现批量添加会员

1.公司最近业务要求后台能通过导入excel实现批量添加用户

2.基于微擎

3.前台页面不多讲

4.后台处理代码,没有做的文件过滤。看官需注意,永远不要相信用户的输入,应为后台一般都是公司人员登入,所以,难得搞

elseif ($op=="adminAddUserAll"){
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Error: " . $_FILES["userfile"]["error"] . "<br />";
    }
    else
    {
//        echo "Upload: " . $_FILES["userfile"]["name"] . "<br />";
//        echo "Type: " . $_FILES["userfile"]["type"] . "<br />";
//        echo "Size: " . ($_FILES["userfile"]["size"] / 1024) . " Kb<br />";
//        echo "Stored in: " . $_FILES["userfile"]["tmp_name"]."<br/>";
        if (file_exists(IA_ROOT.'/attachment/temp/'.$_FILES["userfile"]["name"]))
        {
            echo $_FILES["userfile"]["name"] . " 文件已经存在。 ";
        }
        else
        {
            // 如果  temp目录不存在该文件则将文件上传到 attachment/temp目录下
            move_uploaded_file($_FILES["userfile"]["tmp_name"], IA_ROOT.'/attachment/temp/' . $_FILES["userfile"]["name"]);
            $file_url=IA_ROOT. "/attachment/temp/" . $_FILES["userfile"]["name"];
            $res=inport_user($file_url);
        }
        if($res){
            message("添加成功", $this->createWebUrl("user", array('op' => 'display')), "success");
        }else{
            message("添加失败", $this->createWebUrl("user", array('op' => 'display')), "error");
        }
    }

5.添加inport_user方法

function inport_user($file_url){
    //global $_W;
    include IA_ROOT . '/framework/library/phpexcel/PHPExcel.php';
    include IA_ROOT . '/framework/library/phpexcel/PHPExcel/IOFactory.php';
    include IA_ROOT . '/framework/library/phpexcel/PHPExcel/Reader/Excel5.php';
    if (!file_exists($file_url)) {
        die('no file!');
    }
    $extension = strtolower( pathinfo($file_url, PATHINFO_EXTENSION) );

    if ($extension =='xlsx') {
        $objReader = new PHPExcel_Reader_Excel2007();
        $objExcel = $objReader ->load($file_url);
    } else if ($extension =='xls') {
        $objReader = new PHPExcel_Reader_Excel5();
        $objExcel = $objReader ->load($file_url);
    } else if ($extension=='csv') {
        $PHPReader = new PHPExcel_Reader_CSV();

        //默认输入字符集
        $PHPReader->setInputEncoding('GBK');

        //默认的分隔符
        $PHPReader->setDelimiter(',');

        //载入文件
        $objExcel = $PHPReader->load($file_url);
    }

//    $sheet = $objExcel ->getSheet(0);
//    $objReader=PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
//    $objPHPExcel=$objReader->load($file_url);//$file_url即Excel文件的路径
    $sheet=$objExcel->getSheet(0);//获取第一个工作表
    $highestRow=$sheet->getHighestRow();//取得总行数
    $highestColumn=$sheet->getHighestColumn(); //取得总列数
    //循环读取excel文件,读取一条,插入一条
    pdo_begin();
    for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
        $str='';
        for($k='A';$k<=$highestColumn;$k++){            //从A列读取数据
            //这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
            $str.=$objExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
        }
        //explode:函数把字符串分割为数组。
        $strs=explode("\\",$str);
        $data = array(
            'mobile' =>$strs[0],
            'relation' =>$strs[2].'-'.'0' ,
            'password' =>'abc123',//密码暂用abc123代替
            //'repassword' =>$_GPC['repassword'],
            'salt' => random(8),
            'createtime' =>TIMESTAMP,
            'uniacid' =>34
        );
       $flag = pdo_insert('mc_members', $data);
        if (!$flag) {
            $this->exitJson('添加失败!', 1,$flag);
            pdo_rollback();
        }
        $uid = pdo_insertid();//返回最后插入数据的uid
    }
    pdo_commit();
    unlink($file_url); //删除excel文件
    return $uid;
}

6.使用phpexcel时出现了一个这样的错误:

the filename xxx is not recognised as an OLE file

当文件后缀是xlsx 或者 csv 就会报:the filename xxx is not recognised as an OLE file错误。

inport_user里面提供了一个不错的解决方案

添加

$extension = strtolower( pathinfo($fileName, PATHINFO_EXTENSION) );

if ($extension =='xlsx') {
    $objReader = new PHPExcel_Reader_Excel2007();
    $objExcel = $objReader ->load($file);
} else if ($extension =='xls') {
    $objReader = new PHPExcel_Reader_Excel5();
    $objExcel = $objReader ->load($file);
} else if ($extension=='csv') {
    $PHPReader = new PHPExcel_Reader_CSV();

    //默认输入字符集
    $PHPReader->setInputEncoding('GBK');

    //默认的分隔符
    $PHPReader->setDelimiter(',');

    //载入文件
    $objExcel = $PHPReader->load($file);
}

$sheet = $objExcel ->getSheet(0);

 

posted @ 2017-12-07 16:47  spritphp  阅读(519)  评论(0编辑  收藏  举报