最近开发的项目客户有个Excel导入的需求 将Excel中的数据导入数据库
这也是个比较老套的功能了 不过自己之前一直没有做过 所以揣摩了半天时间 现在在这分享下
首先就是下载PHPExcel类,将下载好的类放置在项目的Org/Util目录下 ,当然这个位置不是死的 ,也可以放在Vendor下 只要我们可以引入就可以
接下来是代码部分 HTML页面就一个input file框 记得加上enctype属性 上传后在PHP页面的处理复制在下方
ublic function uploadForm(){
if (!empty($_FILES)){
$upload = new \Think\Upload(); // 实例化上传类
$upload->maxSize = 10485760 ; // 设置附件上传大小
$upload->exts = array('xls','xlsx'); // 设置附件上传类型
$upload->rootPath = './Public/Excel/'; // 设置附件上传根目录
$upload->autoSub = false; // 将自动生成以photo后面加时间的形式文件夹,关闭
// 上传文件
$info = $upload->upload(); // 上传文件
$exts = $info['file']['ext']; // 获取文件后缀
$filename = $upload->rootPath.$info['file']['savename']; // 生成文件路径名
if(!$info) { // 上传错误提示错误信息
$this->error($upload->getError());
}else{ // 上传成功
import("Org.Util.PHPExcel.PHPExcel"); // 导入PHPExcel类库,因为PHPExcel没有用命名空间,只能import导入
$PHPExcel = new \PHPExcel(); // 创建PHPExcel对象,注意,不能少了\
if ($exts == 'xls') { // 如果excel文件后缀名为.xls,导入这个类
import("Org.Util.PHPExcel.Reader.Excel5");
$PHPReader = new \PHPExcel_Reader_Excel5();
} else
if ($exts == 'xlsx') {
import("Org.Util.PHPExcel.Reader.Excel2007");
$PHPReader = new \PHPExcel_Reader_Excel2007();
}
$PHPExcel=$PHPReader->load($filename);
$currentSheet = $PHPExcel->getSheet(0); // 获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$allColumn = $currentSheet->getHighestColumn(); // 获取总列数
$allRow = $currentSheet->getHighestRow(); // 获取总行数
for ($i = 2; $i <= $allRow; $i++) {
$data_p['lot'] =$PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
$data_p['goods_name'] =$PHPExcel->getActiveSheet()->getCell("B" .$i)->getValue();
$data_p['min_evaluation'] =$PHPExcel->getActiveSheet()->getCell("C" .$i)->getValue();
$data_p['max_evaluation'] = $PHPExcel->getActiveSheet()->getCell("D". $i)->getValue();
$data_p['starting_price'] =$PHPExcel->getActiveSheet()->getCell("E" .$i)->getValue();
$data_p['goods_size'] =$PHPExcel->getActiveSheet()->getCell("F" . $i)->getValue();
$data_p['goods_explain'] =$PHPExcel->getActiveSheet()->getCell("G" . $i)->getValue();
$ex=M('auction_goods')->add($data_p);
}
if($ex){
$this->success("导入成功");
}else{
$this->error("导入失败,原因可能是excel表中格式错误","5");// 提示错误
}
}
}else {
$this->display();
}
}
关键还是文件引入