刚好项目中要使用php解析用户上传的excel文件。php中刚好有phpexcel类可以直接使用,于是就拿过来研究下。
下面以实例的方式,分析我的解决思路。
我的思路:
首先上传的文件,并且重命名。
拿到刚才上传的文件路径,将excel文档里面的数据,全部读取出来。保存到数组中。
对数组进行相应的操作,比如,直接写入到mysql数据库中。
思路有了,那么我们就来看看代码需要哪些?
第一步、首先我这里封装两个函数。
一个上传excel文件函数,
一个是读取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数据库的功能了。