1.composer 下載 :composer require phpoffice/phpexcel
<< ++?下載完后 把文件 :phpoffice/phpexcel/Classes 改名 PHPExecl 移動到 vendor 目錄下 ++ >>
2.前端html頁面:
<<< ++
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="utf-8">
? ? <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
? ? <title>學校管理</title>
? ? <link rel="stylesheet" href="/static/layui/css/layui.css"? media="all">
? ? <script type="text/javascript" src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
<div class="layui-fluid" >
? ? <form method="post" action="" class="form-signin" enctype="multipart/form-data" >
? ? ? ? <input name="excel" type="file" class="form-control">
? ? ? ? <button class="btn btn-lg btn-primary btn-block">導入</button>
? ? </form>
</div>
<script src="/static/layui/layui.js" charset="utf-8"></script>
<script>
? ? layui.use(['laypage', 'table', 'element', 'layer', 'jquery','form'], function () {
? ? ? ? var table = layui.table;
? ? ? ? layer = layui.layer;
? ? ? ? laypage = layui.laypage;
? ? ? ? element = layui.element;
? ? ? ? form = layui.form;
? ? ? ? $=layui.$;
? ? });
</script>
</body>
?</html>
?++ >>
3.控制器方法:
<< ++
// 導入學生
? ? public function daoru(Request $request){
? ? ? ? //上傳excel文件
? ? ? ? $file = request()->file('excel');
? ? ? ? if(!$file){
? ? ? ? ? ? return view("daoru");
? ? ? ? }
? ? ? ? $ft=$file->getInfo("type");
? ? ? ? ? ? //halt($ft);
? ? ? ? if($ft !="application/vnd.ms-excel" && $ft !="application/octet-stream" &&$ft !="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){
? ? ? ? ? ? return $this->error("請選擇正確的excel表格");
? ? ? ? }
? ? ? ? //移到/public/uploads/excel/下
? ? ? ? $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel');
? ? ? ? ? ? //halt($info);
? ? ? ? //上傳文件成功
? ? ? ? if ($info) {
? ? ? ? ? ? //引入PHPExcel類
? ? ? ? ? ? vendor('PHPExcel.PHPExcel');
? ? ? ? ? ? new PHPExcel();
? ? ? ? ? ? //獲取上傳后的文件名
? ? ? ? ? ? $fileName = $info->getSaveName();
? ? ? ? ? ? //獲取上傳文件的后綴
? ? ? ? ? ? $fileType = substr(strchr($fileName, "."), 1);
? ? ? ? ? ? //文件路徑
? ? ? ? ? ? $filePath = 'public/uploads/excel/' . $fileName;
? ? ? ? ? ? //實例化PHPExcel類
? ? ? ? ? ? if ($fileType == 'xls') {
? ? ? ? ? ? ? ? $PHPReader = new \PHPExcel_Reader_Excel5(); //設置以Excel5格式(Excel97-2003工作簿)
? ? ? ? ? ? }
? ? ? ? ? ? if ($fileType == 'xlsx') {
? ? ? ? ? ? ? ? $PHPReader = new \PHPExcel_Reader_Excel2007();
? ? ? ? ? ? }
? ? ? ? ? ? //讀取excel文件
? ? ? ? ? ? $objPHPExcel = $PHPReader->load(ROOT_PATH . $filePath);
? ? ? ? ? ? //讀取excel文件中的第一個工作表
? ? ? ? ? ? $sheet = $objPHPExcel->getSheet(0);
? ? ? ? ? ? $allRow = $sheet->getHighestRow();? //取得總行數
? ? ? ? ? ? //$allColumn = $sheet->getHighestColumn();? //取得總列數
? ? ? ? ? ? //從第二行開始插入,第一行是列名
? ? ? ? ? ? for ($j = 2; $j <= $allRow; $j++) {
? ? ? ? ? ? ? ? /* 編輯時啟用
? ? ? ? ? ? ? ? $da['id'] = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();*/
? ? ? ? ? ? ? ? $data['img'] = $objPHPExcel->getActiveSheet()->getCell("B" . $j)->getValue();
? ? ? ? ? ? ? ? $data['tel'] = $objPHPExcel->getActiveSheet()->getCell("C" . $j)->getValue();
? ? ? ? ? ? ? ? $data['name'] = $objPHPExcel->getActiveSheet()->getCell("D" . $j)->getValue();
? ? ? ? ? ? ? ? $data['sfz'] = $objPHPExcel->getActiveSheet()->getCell("E" . $j)->getValue();
? ? ? ? ? ? ? ? $data['school'] = $objPHPExcel->getActiveSheet()->getCell("F" . $j)->getValue();
? ? ? ? ? ? ? ? $data['pro_id'] = $objPHPExcel->getActiveSheet()->getCell("G" . $j)->getValue();
//? ? ? ? ? ? ? ? ? ? 判斷接收的時間是否是float類型,如果是,轉換時間戳的時候需要減掉8個小時的時差
? ? ? ? ? ? ? ? if( is_float($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue())){
? ? ? ? ? ? ? ? ? ? $data["create_time"] =\PHPExcel_Shared_Date::ExcelToPHP($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue())-8*60*60;
? ? ? ? ? ? ? ? }else{
//? ? ? ? ? ? ? ? ? ? ? 如果是字符串類型則可直接轉換時間戳
? ? ? ? ? ? ? ? ? ? $data["create_time"]=strtotime($objPHPExcel->getActiveSheet()->getCell("H" . $j)->getValue());
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? $data['status'] = $objPHPExcel->getActiveSheet()->getCell("I" . $j)->getValue();
? ? ? ? ? ? ? ? $data['sex'] = $objPHPExcel->getActiveSheet()->getCell("J" . $j)->getValue();
? ? ? ? ? ? ? ? $data['money'] = $objPHPExcel->getActiveSheet()->getCell("K" . $j)->getValue();
? ? ? ? ? ? ? ? $data['vip'] = $objPHPExcel->getActiveSheet()->getCell("L" . $j)->getValue();
? ? ? ? ? ? ? ? $data['vip_lv'] = $objPHPExcel->getActiveSheet()->getCell("M" . $j)->getValue();
? ? ? ? ? ? ? ? /* 編輯時啟用
? ? ? ? ? ? ? ? $result=Db::name('users')->where("id",$da['id'])->update($data);*/
//添加時用
? ? ? ? ? ? ? ? $result = Db::name("cms_member")->insertGetId($data);//保存數據,并返回主鍵id
? ? ? ? ? ? ? ? if ($result) {
// 添加時用
? ? ? ? ? ? ? ? ? ? echo "第" . $j . "行導入成功,comment表第:" . $result . "條!<br/>";
? ? ? ? ? ? ? ? ? ? /*編輯時啟用
? ? ? ? ? ? ? ? ? ? echo "第".$j."行導入成功,users表第:".$da['id']."條!<br/>";*/
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? echo "第" . $j . "行導入失敗!<br/>";
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? echo "導入文件失敗!";
? ? ? ? }
? ? ? return $this->success("導入成功",url("index"));
}
++ >>
4.導出
<< ++?
// html代碼
<div class="fbutton">
<a href="{:U('Admin/comment/out')}">
<div class="add" title="導出">
<span>導出模板</span>
</div>
</a>
</div>
// php 方法
/**
? ? * 導出模板
? ? * @throws \think\db\exception\DataNotFoundException
? ? * @throws \think\db\exception\ModelNotFoundException
? ? * @throws \think\exception\DbException
? ? */
? ? public function out()
? ? {
? ? ? ? vendor('PHPExcel.PHPExcel.Reader.Excel5');
? ? ? ? //實例化PHPexcel類,等同于新建一個excel
? ? ? ? $objPHPExcel = new \PHPExcel();
? ? ? ? for($i=1;$i<=3;$i++){
? ? ? ? ? if($i>1){
? ? ? ? ? ? ? $objPHPExcel->createSheet();//創建內置表
? ? ? ? ? }
? ? ? ? }
? ? ? ? $objPHPExcel->setActiveSheetIndex(0);//把新創建的sheet 設定為當前活動的sheet
? ? ? //$objPHPExcel->getActiveSheet()獲取當前活動的sheet
? ? ? ? //給當前活動sheet 設置每列的表頭
? ? ? ? $objPHPExcel->getActiveSheet()->
? ? ? ? setCellValue("A1", '評論id(添加評論不填)')->
? ? ? ? setCellValue("B1", '商品id(不能為空,且需與商品庫一致)')->
? ? ? ? setCellValue("C1", 'email郵箱(請留空)')->
? ? ? ? setCellValue("D1", '用戶名(不能為空,且與用戶名一致)')->
? ? ? ? setCellValue("E1", '評論內容(不能為空)')->
? ? ? ? setCellValue("F1", '添加時間(格式為:2018/9/6 11:05:15)')->
? ? ? ? setCellValue("G1", 'ip地址(請留空)')->
? ? ? ? setCellValue("H1", '是否顯示(只能為1或0;1顯示,0不顯示)')->
? ? ? ? setCellValue("I1", '父id (請留空)')->
? ? ? ? setCellValue("J1", '評論用戶ID(不能為空,且與用戶名ID一致)')->
? ? ? ? setCellValue("K1", '曬單圖片(請留空)')->
? ? ? ? setCellValue("L1", '訂單id(請留空)')->
? ? ? ? setCellValue("M1", '物流評價等級(不能為空,且只能為1-5)')->
? ? ? ? setCellValue("N1", '商品評價等級(不能為空,且只能為1-5)')->
? ? ? ? setCellValue("O1", '商家服務態度評價等級(不能為空,且只能為1-5)')->
? ? ? ? setCellValue("P1", '被贊數(請留空)')->
? ? ? ? setCellValue("Q1", '點贊用戶id(請留空)')->
? ? ? ? setCellValue("R1", '是否匿名評價:只能是0或1;0不是,1是')->
? ? ? ? setCellValue("S1", '訂單商品表ID (請留空)')->
? ? ? ? setCellValue("T1", '排序(填寫100以內的數字)');
//? ? ? ? 獲取評論數據
? ? ? ? $data=Db::name("comment")->limit(5)->order("comment_id desc")->select();
//? ? ? halt($data);
//? ? ? ? 循環填寫excel表
? ? ? ? $j=2;
? ? ? ? foreach ($data as $k =>$v){
? ? ? ? ? ? $data["add_time"]=date('Y/n/j G:i:s',$v["add_time"]);
? ? ? ? ? ? $objPHPExcel->getActiveSheet()->
? ? ? ? ? ? setCellValue("A".$j,$v["comment_id"])->
? ? ? ? ? ? setCellValue("B".$j,$v["goods_id"])->
? ? ? ? ? ? setCellValue("C".$j,$v["email"])->
? ? ? ? ? ? setCellValue("D".$j,$v["username"])->
? ? ? ? ? ? setCellValue("E".$j,$v["content"])->
? ? ? ? ? ? setCellValue("F".$j,$data["add_time"])->
? ? ? ? ? ? setCellValue("G".$j,$v["ip_address"])->
? ? ? ? ? ? setCellValue("H".$j,$v["is_show"])->
? ? ? ? ? ? setCellValue("I".$j,$v["parent_id"])->
? ? ? ? ? ? setCellValue("J".$j,$v["user_id"])->
? ? ? ? ? ? setCellValue("K".$j,$v["img"])->
? ? ? ? ? ? setCellValue("L".$j,$v["order_id"])->
? ? ? ? ? ? setCellValue("M".$j,$v["deliver_rank"])->
? ? ? ? ? ? setCellValue("N".$j,$v["goods_rank"])->
? ? ? ? ? ? setCellValue("O".$j,$v["service_rank"])->
? ? ? ? ? ? setCellValue("P".$j,$v["zan_num"])->
? ? ? ? ? ? setCellValue("Q".$j,$v["zan_userid"])->
? ? ? ? ? ? setCellValue("R".$j,$v["is_anonymous"])->
? ? ? ? ? ? setCellValue("S".$j,$v["rec_id"])->
? ? ? ? ? ? setCellValue("T".$j,$v["sort"]);
? ? ? ? ? ? $j++;
? ? ? ? }
? ? ? ? header('Content-Type: application/vnd.ms-excel');
? ? ? ? header('Content-Disposition:attachment;filename="template.xls"');
// D:\shop\vendor\PHPExcel\PHPExcel\Calculation\Functions.php on line 570 的break 需刪除
? ? ? ? $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
? ? ? ? $objWriter->save('php://output');
? ? ? ? $objPHPExcel->disconnectWorksheets();
? ? }