thinkphp導入導出excel表單數據


在PHP項目經常要導入導出Excel表單。

先去下載PHPExcel類庫文件,放到相應位置。

我在thinkphp框架中的位置為ThinkPHP/Library/Org/Util/

導入

在頁面上傳excel文件提交到后台,利用form表單提單即可

<form method="post" enctype="multipart/form-data" action="" >  
<input type="submit" value="導入" />                               
<input  type="file" name="excel" />                    
</form>  

 

提交到后台后進行上傳處理,這是一個執行上傳的方法

public function data(){
        if(IS_POST){
        //設置編碼防止亂碼
        header("Content-Type:text/html;charset=utf-8");
            $upload = new \Think\Upload();// 實例化上傳類
            $upload->maxSize   =     3145728 ;// 設置附件上傳大小
            $upload->exts      =     array('xls','xlsx','csv');// 設置附件上傳類
            $upload->rootPath  =     'Uploads/';
            $upload->savePath  =     ''; // 設置附件上傳目錄
            // 上傳文件
            $info   =   $upload->uploadOne($_FILES['excel']);
            $filename = 'Uploads/'.$info['savepath'].$info['savename'];
            $exts = $info['ext'];
           // var_dump($info);
            if(!$info) {// 上傳錯誤提示錯誤信息
                  $this->error($upload->geterror());
              }else{// 上傳成功
                  $this->data_import($filename, $exts);
            }          
        }
    }

上傳文件的格式設為excel的格式,xls,xlsx,csv均可支持

然后對上傳后的文件內容進行讀取導入,下面是一個讀取的方法。

protected function data_import($filename, $exts='xls')
    {
        //導入PHPExcel類庫,因為PHPExcel沒有用命名空間,只能inport導入
        import("Org.Util.PHPExcel");
        //創建PHPExcel對象,注意,不能少了\
        $PHPExcel=new \PHPExcel();
        //如果excel文件后綴名為.xls,導入這個類
        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();
        }else if($exts == 'csv'){
            import("Org.Util.PHPExcel.Reader.CSV");
            $PHPReader=new \PHPExcel_Reader_CSV();
        }
 
        //var_dump($PHPReader);die;
        //載入文件
        $PHPExcel=$PHPReader->load($filename);
        //獲取表中的第一個工作表,如果要獲取第二個,把0改為1,依次類推
        $currentSheet=$PHPExcel->getSheet(0);
        //獲取總列數
        $allColumn=$currentSheet->getHighestColumn();
        //獲取總行數
        $allRow=$currentSheet->getHighestRow();
        //循環獲取表中的數據,$currentRow表示當前行,從哪行開始讀取數據,索引值從0開始
        for($currentRow=1;$currentRow<=$allRow;$currentRow++){
            //從哪列開始,A表示第一列
            for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
                //數據坐標
                $address=$currentColumn.$currentRow;
                //讀取到的數據,保存到數組$arr中
                $data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue();
            }
 
        }
        $this->save_import($data);
    }

用上面這個方法獲得excel里的數據,然后用save_import把獲得的數據存入數據庫

//保存導入數據
    public function save_import($data)
    {
        //print_r($data);exit;
 
        $bath = M('data');
         
        //插入新數據時先清空原表數據,沒有這個需要可以注釋下面步驟
        //M('mobile')->where('1=1')->delete();
         
        foreach ($data as $k=>$v){
                //$mobile=$v['A'];   //注:****** (1)處
                $info['a'] = $v['A'];
                $info['b'] = $v['B'];
                $info['c']=$v['C'];
                $info['d_water']=$v['D'];
                $info['e']=$v['E'];
                $info['f']=$v['F'];
 
                $arr[] = $info;
 
        }
        $result=$bath->addall($arr);
        if($result){
            $this->success('數據導入成功');
        }else{
            $this->error('數據導入失敗');
        }
        //print_r($info);
    }

導出相對於導入就容易的多,從數據庫讀出數據做出相應的處理

public function excel(){
        //引入PHPExcel庫文件
        Vendor('PHPExcel.Classes.PHPExcel');
        //創建對象
        $excel = new PHPExcel();
        //Excel表格式,這里簡略寫了8列
        $letter = array('A','B','C','D','E','F','F','G');
        //表頭數組
        $tableheader = array('序號','客棧名稱','客棧地址','座機','手機','QQ','郵箱');
        //填充表頭信息
        for($i = 0;$i < count($tableheader);$i++) {
            $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
        }
        //表格數組
        $data = array(
                array('1','B','C','D','E','F','G'),
                array('2','B','C','D','E','F','G'),
                array('3','B','C','D','E','F','G'),
                array('4','B','C','D','E','F','G'),
                array('5','B','C','D','E','F','G'),
                array('6','B','C','D','E','F','G'),
               array('7','B','C','D','E','F','G'),
        );
        //填充表格信息
        for ($i = 2;$i <= count($data) + 1;$i++) {
            $j = 0;
            foreach ($data[$i - 2] as $key=>$value) {
                $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
                $j++;
            }
        }
        //創建Excel輸入對象
        $write = new PHPExcel_Writer_Excel5($excel);
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");;
        header('Content-Disposition:attachment;filename="客棧信息.xls"');
        header("Content-Transfer-Encoding:binary");
        $write->save('php://output');
    


前台頁面只需要執行此方法即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM