刚好项目中要使用php解析用户上传的excel文件。php中刚好有phpexcel类可以直接使用,于是就拿过来研究下。
下面以实例的方式,分析我的解决思路。
我的思路:

  1. 首先上传的文件,并且重命名。
  2. 拿到刚才上传的文件路径,将excel文档里面的数据,全部读取出来。保存到数组中。
  3. 对数组进行相应的操作,比如,直接写入到mysql数据库中。

思路有了,那么我们就来看看代码需要哪些?

第一步、首先我这里封装两个函数。

  1. 一个上传excel文件函数,
  2. 一个是读取excel数据的函数。

函数如下:

// excel上传文件
public function upexcel($file)
{
 $pubtime1=date("Y-m-d",time());
 $pubtime2=explode("-",$pubtime1);
 $dir = "./uploads/$pubtime2[0]/$pubtime2[1]/$pubtime2[2]/";
 if(!is_dir($dir)){
  mkdir($dir,0777,TRUE);
 }
 // 允许的上传格式
 $arrext = array('xlsx','xls');
 if($file['size'] > 3145728 ) $this->error('文件上传大于3M');
 // 获取上传文件的后缀
 $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
 if(!in_array(strtolower($ext),$arrext)) $this->error('文件类型不正确,正确格式xls/xlsx');
 // 组装文件名称
 $filename = $dir.time().rand(10000,99999).'.'.$ext;
 // 上传文件
 if(move_uploaded_file($file['tmp_name'],$filename)){
  return $filename;
 }else{
  $this->error('文件上传失败');
 }
}
// 将excel里面的数据 读取出来 存入数组
public function setexcel($filename)
{
 header("Content-type:text/html;charset=utf-8");   // 设置编码
 require_once './phpexcel/PHPExcel.php';           // 引入phpexcel文件
 $PHPExcel = \PHPExcel_IOFactory::load($filename); // 加载excel文件
 $currentSheet = $PHPExcel->getSheet(0);           // 第一个sheet
 $col = $currentSheet->getHighestColumn();         // 取得总列数
 $row = $currentSheet->getHighestRow();            // 取得总行数
 $arr = array();
 for ($currentRow = 1; $currentRow <= $row; $currentRow++) {
  for ($currentColumn = 'A'; $currentColumn <= $col; $currentColumn++) {
   $arr[$currentRow][] .= $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue();
  }
 }
 return $arr;
}

第二步:得到excel表格中的数据之后,我们将其写入到mysql中。

// 先上传 得到文件名
$filename = $this->upexcel($_FILES['enroll']);

// 将excel文件里的数据读取出来
$arr = $this->setexcel($filename);

// 判断上传的excel文件是否有值
if(count($arr) <= 0 ){
    unlink($filename);
    $this->error('导入数据为空,请重新上传');
}

// 可以直接写入到数据库中了
$roster = D('table');
foreach($arr as $v){
    $roster->add($data);
}

通过上面的实例很轻松的就完成了,php导入excel数据。并且写入到mysql数据库的功能了。

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!