1. 程式人生 > >ThinkPhp excel 匯入匯出 demo

ThinkPhp excel 匯入匯出 demo

首先要去下載一個PHPExcel 檔案

在前臺html頁面進行上傳檔案:如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<P><a href="{:U('Index/expUser')}" >匯出資料並生成excel</a></P><br/>
<form action="{:U('Index/add_excel')}" method="post" enctype="multipart/form-data">
    <input type="file" name="import"/>
    <input type="submit" value="匯入"/>
</form>
</body>
</html>

 

excel 匯入

 /*
     * excel 倒入
     * */
    public function add_excel()
    {
        if (!empty($_FILES)) {

            $config = array(

                'exts' => array('xlsx', 'xls'),

                'maxSize' => 3145728000,

                'rootPath' => "./Public/",

                'savePath' => 'Uploads/',

                'subName' => array('date', 'Ymd'),

            );

            $upload = new \Think\Upload($config);

            if (!$info = $upload->upload()) {

                $this->error($upload->getError());
            }
            $file_name = $upload->rootPath . $info['import']['savepath'] . $info['import']['savename'];
            $extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判斷匯入表格字尾格式
            $res = $this->goods_import($file_name, $extension);
            if($res){
                echo "ok";
            }else{
                echo "no";
            }

        }}
      public function goods_import($filename, $exts)
    {
        import("Org.Util.PHPExcel");
        if($exts == '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();
        }
        $objPHPExcel = $PHPReader->load($filename);
        $sheet = $objPHPExcel->getSheet(0);
        $highestRow = $sheet->getHighestRow(); // 取得總行數
        for($a=3;$a<=$highestRow;$a++){
            $data['username'] = $objPHPExcel->getActiveSheet()->getCell("A" . $a)->getValue();
            $data['pwd'] = $objPHPExcel->getActiveSheet()->getCell("B" . $a)->getValue();
            $data['phone'] = $objPHPExcel->getActiveSheet()->getCell("C" . $a)->getValue();
            $data['sex'] = $objPHPExcel->getActiveSheet()->getCell("D" . $a)->getValue();
            if($data['username'] instanceof \PHPExcel_RichText) {   //富文字轉換字串
                $data['username'] = $data['username']->__toString();
            }
            if($data['pwd'] instanceof \PHPExcel_RichText) {   //富文字轉換字串
                $data['pwd'] = $data['pwd']->__toString();
            }

            if($data['phone'] instanceof \PHPExcel_RichText) {   //富文字轉換字串
                $data['phone'] = $data['phone']->__toString();
            }

            if($data['sex'] instanceof \PHPExcel_RichText) {   //富文字轉換字串
                $data['sex'] = $data['sex']->__toString();
            }

            $User = M("username");
            $User->add($data);
        }
        if ($User)
        {
            return true;
        }else{
            return false;
        }
    }

excel匯出

    /*
     * 匯出excel
     * */

    public function expUser($name='Excel')
    {

        import('Org.Util.PHPExcel');
        $exc = new \PHPExcel();
        $objExcel = $exc->getActiveSheet();
        $objExcel->setTitle('使用者列表');
        $objExcel->getStyle('A1')->getFont()->setBold(true)->setSize(16);
        //設定獵頭寬
        $objExcel->getColumnDimension('A')->setWidth(50);
        $objExcel->getColumnDimension('B')->setWidth(30);
        $objExcel->getColumnDimension('C')->setWidth(30);
        $objExcel->getColumnDimension('D')->setWidth(30);
      
        //設定表頭和列頭對齊
        $objExcel->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objExcel->getStyle('A3:D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //插入標題
        $objExcel->MergeCells('A1:D1');;
        $objExcel->setCellValue('A1', '商品列表');
        $objExcel->setCellValue('A3', '使用者名稱')
            ->setCellValue('B3', '密碼')
            ->setCellValue('C3', '手機號')
            ->setCellValue('D3', '性別');
        $list=M('username')->select();
        
        $i=4;
        foreach ($list as $k=>$val){
            $objExcel->setCellValue('A' . $i, $val['username'])
                ->setCellValue('B' . $i, $val['pwd'])
                ->setCellValue('C' . $i, $val['phone'])
                ->setCellValue('D' . $i, $val['sex']);
               $i++;
        }

//        $outputFileName = "output.xls";
//        header("Content-Type: application/force-download");
//        header("Content-Type: application/octet-stream");
//        header("Content-Type: application/download");
//        header('Content-Disposition:inline;filename="'.$outputFileName.'"');
//        header("Content-Transfer-Encoding: binary");
//        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
//        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
//        header("Pragma: no-cache");
//        $objExcel->save('php://output');

        
        
        
        //儲存文件並返回檔名
        $objfile = \PHPExcel_IOFactory::createWriter($exc, 'Excel5');

        $filename =  'goods_list'. '.xls';
        //var_dump($dir);exit;
        $objfile->save($filename);

        //下載檔案需要用到的頭
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Length: ' . filesize($filename));
        header('Content-Disposition: attachment; filename=' . basename($filename));
        readfile($filename);

    }