lavarel里面Excel导出及导入
//导出
//第一步
在lavarel框架根目录app里新建libs目录
//第二步
在网上下载Excel类,并解压放到libs目录里。解压好的里面应该有两个东西一个是PHPExcel文件夹和PHPExcel.PHP文件.
//第三步
运行命令行进入项目根目录,执行“composer dumpautoload”,
在控制器里面引入:
use PHPExcel;//引入excel类 use IOFactory;在控制器所要导出的方法代码为:
//导出 数据库里的goods表结构为: -- ---------------------------- -- Table structure for goods -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods` varchar(255) DEFAULT NULL, `price` decimal(10,0) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=110 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES ("1", "西服", "100022"); INSERT INTO `goods` VALUES ("13", "领带", "2222"); INSERT INTO `goods` VALUES ("12", "西服", "1"); public function Excel(){ $query=DB::table("goods")->get();//查询表 //print_r($query); if(!$query) return false;//判断是否为空值 $obj=new PHPExcel();//实例化excel类 include_once("../app/libs/PhpExcel/PHPExcel/IOFactory.php");//引入IOFactory.php $obj->getProperties()-> setTitle("export") ->setDescription("none"); $obj-> setActiveSheetIndex(0); $fields = DB::select("SHOW COLUMNS FROM goods");//查询goods表中所有列名,并返回为数组。 //print_r($fields);die; $col = 0;//定义列 foreach($fields as $field){ $field =$field["Field"]; $obj-> getActiveSheet() -> setCellValueByColumnAndRow($col, 1,$field); $col++; } $row = 2;//定义行 foreach($query as $data) { $col =0; foreach($fields as $field) { //print_r($data); $field =$field["Field"]; $obj->getActiveSheet()->setCellValueByColumnAndRow($col,$row,!empty($data["$field"])?$data["$field"]:""); $col++; } $row++; } $obj-> setActiveSheetIndex(0); $objWriter =IOFactory :: createWriter($obj, "Excel5"); header("Content-Type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename="Brand_" .date("Y-m-d") . ".xls""); header("Cache-Control:max-age=0"); $objWriter-> save("php://output"); } //第四步 将框架目录里面的config目录里面的配置文件database.php里面的
"fetch" => PDO::FETCH_CLASS,//返回对象改为
"fetch" => PDO::FETCH_ASSOC,//返回数组 //导入 第一步:复制一份导出的文件夹。 第二步:控制器中上面引入的为:
use PHPExcel;//引入excel类 use IOFactory; use DB; use PHPExcel_Cell; use SymfonyComponentHttpFoundationRequest; header("content-type:text/html;charset=utf8");第三步:控制器里面的方法:
//进入导入页面方法 public function ru(){ return view("Excel/ru"); }
//执行导入方法 public function daoru(Request $request) { // print_R($_FILES);die; $tmp_file =$_FILES ["file_stu"] ["tmp_name"]; $file_types =explode ( ".", $_FILES ["file_stu"] ["name"] ); $file_type =$file_types [count ( $file_types ) - 1]; /*判别是不是.xls文件,判别是不是excel文件*/ if (strtolower( $file_type ) != "xls"){ $this->error ( "不是Excel文件,重新上传" ); } $savePath ="./excel/"; /*以时间来命名上传的文件*/ $str =date("Ymdhis"); $file_name =$str . "." . $file_type; //echo$file_name;die; $request->file("file_stu")->move($savePath, $file_name); /*是否上传成功*/ /*if(!copy($tmp_file,$savePath.$file_name)){ $this->error ( "上传失败" ); }*/ //要获得新的文件路径+名字 $fullpath =$savePath.$file_name; //echo$fullpath;die; $re =$this->read($fullpath,"utf-8"); //print_r($re);die; for($i=1;$i<count($re);$i++){ //print_r($re); //echo$re[$i][1]; $adds =DB::table("goods")->insert(["goods" => $re[$i][1], "price" =>$re[$i][2]]); } //die; if($adds){ return Redirect("lists"); // echo"<script>alert("导入成功");location.href="Excel/lists"</script>"; }else{ echo"<script>alert("导入失败");location.href="ru"</script>"; } } //执行读取导入的数据表的方法 public function read($filename,$encode="utf-8") { include_once("../app/libs/phpexcel/phpexcel/IOFactory.php"); //$this->load ->library("PHPExcel/IOFactory"); $objReader =IOFactory::createReader("Excel5"); $objReader->setReadDataOnly(true); $objPHPExcel= $objReader->load($filename); $objWorksheet= $objPHPExcel->getActiveSheet(); $highestRow =$objWorksheet->getHighestRow(); //echo$highestRow;die; $highestColumn = $objWorksheet->getHighestColumn(); //echo$highestColumn;die; $highestColumnIndex =PHPExcel_Cell::columnIndexFromString($highestColumn); /*$highestColumnIndex =PHPExcel::columnIndexFromString($highestColumn);*/ $excelData =array(); for($row = 1;$row <= $highestRow; $row++) { for ($col= 0; $col < $highestColumnIndex; $col++) { $excelData[$row][]=(string)$objWorksheet->getCellByColumnAndRow($col,$row)->getValue(); } } return$excelData; } public function lists(){ $arr=DB::table("goods")->get(); //print_r($arr);die; return view("Excel/listss",["arr"=>$arr]); }第四步:视图层有俩个:
一个是导入的页面:
<form action="{{url("daoru")}}" method="post" enctype="multipart/form-data"> <table> <tr> <td>文件上传</td> <td><input type="file" name="file_stu"/></td> </tr> <tr> <td><input type="submit" value="提交"/></td> <td></td> </tr> </table> </form>一个是导入成功之后所跳转的展示页面:
<?php header("content-type:text/html;charset=utf8"); ?> <center> <table border="1"> <tr> <td>ID</td> <td>商品名</td> <td>商品价格</td> <td>操作</td> </tr> @foreach($arr as $key => $va) <tr> <td><?php echo $va["id"]?></td> <td><?php echo $va["goods"]?></td> <td><?php echo $va["price"]?></td> <td><a href="{{url("#")}}?id=<?php echo $va["id"]?>">删除</a></td> </tr> @endforeach </table> </center>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: tp3.2中ajax批量修改
- 下一篇:没有了