PHPExcel 導入導出

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();

? ? }

?++ >>

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容