thinkcmf+PHPExcel實現匯入匯出功能
阿新 • • 發佈:2019-02-06
thinkphp3.2+PHPExcel實現匯入匯出功能:
以下是我自己的實現方法,可能存在很多不足,歡迎大家提出改進...實現步驟:
一:去官網http://phpexcel.codeplex.com/下載最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Core\Library\Vendor
二:在StampController.class.php中新增如下的方法:
1、實現匯出功能:
1.1、匯出PHP程式碼:
/** * 匯出資料庫中資料表的資料 * @param $expTitle 名稱 * @param $expCellName 引數 * @param $expTableData 內容 * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function exportExcel($expTitle,$expCellName,$expTableData){ $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//檔名稱 $fileName = date('YmdHis');//or $xlsTitle 檔名稱可根據自己情況設定 $cellNum = count($expCellName); $dataNum = count($expTableData); vendor("PHPExcel.PHPExcel"); $objPHPExcel = new \PHPExcel(); // $cellName = array('A','B','C','D','E','F','G','H','I','J'); $cellName = array('A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T','U', 'V','W','X','Y','Z','AA','AB','AC','AD','AE', 'AF','AG','AH','AI','AJ','AK','AL','AM','AN', 'AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10); // $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合併單元格 // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s')); //處理表資料 for($i=0;$i<$cellNum;$i++){ $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'1', $expCellName[$i][1]); } // Miscellaneous glyphs, UTF-8 for($i=0;$i<$dataNum;$i++){ for($j=0;$j<$cellNum;$j++){ $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+2), $expTableData[$i][$expCellName[$j][0]]); } } header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新視窗列印inline本視窗列印 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//Excel5為xls格式,excel2007為xlsx格式 $objWriter->save('php://output'); exit; } /** * 匯出Stamp的資料 */ function export(){//匯出Excel //資料庫中的資料表 $xlsName = "Stamp"; $xlsCell = array( array('id','編號'), array('stamp_title','藝術品名稱'), array('stamp_uuid','證書編號'), array('stamp_src','證書圖片'), array('art_name','作者'), array('stamp_type','藝術品型別'), array('stamp_describe','藝術品描述'), array('stamp_spec','藝術品規格(尺寸)'), array('stamp_material','藝術品材質(例如:紙質)'), array('stamp_age','創作年份'), ); $data['is_deleted'] = 0; $xlsModel = M('Stamp'); //匯出所有的內容 $xlsData = $xlsModel->where($data) ->Field('id,stamp_title,stamp_uuid,stamp_src, art_name,stamp_type,stamp_describe,stamp_spec, stamp_material,stamp_age') //->order('id desc') ->select(); /** foreach ($xlsData as $k => $v) { $xlsData[$k]['objtype']= $v['objtype'] == 1 ?'捐資助學':'不定項捐款'; } */ /* 呼叫匯出方法 */ $this->exportExcel($xlsName,$xlsCell,$xlsData); }
1.2、匯出匯入的html頁面程式碼:
<form class="well form-search" method="get" action="{:U('Stamp/index')}"> 證書名稱: <input type="text" name="stamp_title" style="width: 200px;" value="{$option['stamp_title']}" placeholder="請輸入姓名關鍵字..."> 證書編號: <input type="text" name="stamp_uuid" style="width: 200px;" value="{$option['stamp_uuid']}" placeholder="請輸入證書編號..."> <input type="submit" class="btn btn-primary" value="搜尋"/> <a href="{:U('Stamp/export')}" target="_blank" class="btn btn-primary">匯出</a> <a href="{:U('Stamp/importStamp')}" target="_blank" class="btn btn-primary">匯入</a> </form>
1.3、匯出的效果圖:
2、匯入功能:
2.1、php程式碼:
/**匯入資料頁面*/
public function importStamp()
{
$this->display('exportstamp');
}
2.2、html頁面程式碼:public function exportstamp() { ini_set('memory_limit','1024M'); if (!empty($_FILES)) { $config = array( 'exts' => array('xlsx','xls'), 'maxSize' => 3145728000, 'rootPath' =>"./Data/", 'savePath' => 'upload/Excle/', 'subName' => array('date','Ymd'), ); $upload = new \Think\Upload($config); if (!$info = $upload->upload()) { $this->error($upload->getError()); } vendor("PHPExcel.PHPExcel"); $file_name=$upload->rootPath.$info['excelData']['savepath'].$info['excelData']['savename']; $extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判斷匯入表格字尾格式 if ($extension == 'xlsx') { $objReader =\PHPExcel_IOFactory::createReader('Excel2007'); $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8'); } else if ($extension == 'xls'){ $objReader =\PHPExcel_IOFactory::createReader('Excel5'); $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8'); } $sheet =$objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow();//取得總行數 $highestColumn =$sheet->getHighestColumn(); //取得總列數 //D('pro_info')->execute('truncate table pro_info'); //每次匯入清空原有資料 for ($i = 2; $i <= $highestRow; $i++) { $data['stamp_title']= $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue(); $data['stamp_uuid'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue(); $data['stamp_src']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue(); $data['art_name']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue(); $data['stamp_type']= $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue(); $data['stamp_describe']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue(); $data['stamp_spec']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue(); $data['stamp_material']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue(); $data['stamp_age']= $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue(); //看這裡看這裡,這個位置寫資料庫中的表名 if(M("Stamp")->where("stamp_uuid='".$data['stamp_uuid']."' and is_deleted = 0")->find()){ //上面註釋的程式碼是用藝術品名稱/證書編號判斷 }else{ M("Stamp")->add($data); $j++; } } $this->success('匯入成功!本次匯入數量:'.$j, U('Stamp/index')); } else { $this->error("請選擇上傳的檔案"); } }
<body>
<form method="post" class="form-horizontal js-ajax-forms" action="{:U('Stamp/exportstamp')}" enctype="multipart/form-data">
<fieldset>
<div class="control-group">
<label class="control-label">匯入excel檔案:</label>
<div class="controls">
<input type="file" name="excelData">
<span class="form-required">*</span>
</div>
</div>
</fieldset>
<div class="form-actions">
<button type="submit" class="btn btn-primary js-ajax-submit">匯入</button>
</div>
</form>
</body>
2.3、效果展示