thinkphp5封裝匯入excel和匯出excel
阿新 • • 發佈:2019-02-15
開發中有時候要做excel的匯入匯出功能,而thinkphp5有其封裝的匯入方法,十分方便,下面說下怎麼使用。
首先,要下載一下phpExcel,這個大家就自己到百度上面下載,一搜索就會有的了,下載後解壓出來是這樣的
然後將資料夾複製到專案中的vendor下
好了,引入檔案後,準備工作也就完成了,下面是如何使用,首先是匯入excel,這裡用的是tp5封裝的方法,十分方便,首先前端按鈕連線介面
然後匯入方法如下
//匯入excel
public function excel(){
$request = \think\Request::instance();
$excel = request()->file('excel')->getInfo();//excel為file中的name
vendor("PHPExcel.PHPExcel.IOFactory");
$objPHPExcel = \PHPExcel_IOFactory::load($excel['tmp_name']);//讀取上傳的檔案
$arrExcel = $objPHPExcel->getSheet(0)->toArray();//獲取其中的資料
$word = $arrExcel[0];
array_shift($arrExcel);
$data = array();
$num = count($arrExcel) -1;
foreach ($arrExcel as $key => $value) {
$data[] = array(
'company_name'=>$arrExcel[$key][0]
);
}
$result = Db::table('ag_company')->insertAll($data);
if($result){
$this->success('匯入成功' );
}else{
$this->error('匯入失敗');
}
}
excel表如下
返回的陣列
到這裡陣列出來後就自己自行處理吧,鑑於有時候可能不會用tp框架,所以下面也附上原生的匯入excel程式碼,讓大家可以參考一下
前端:
後臺方法:
function readxml(){
global $smarty,$config,$db,$manage_ur,$admin_url;
header("content-type:text/html; charset=utf-8");
include_once(ROOT_PATH."plugins/PHPExcel/IOFactory.php");
$tmp_file = $_FILES ['xls'] ['tmp_name']; //臨時檔案
$name = $_FILES['xls']['name']; //上傳檔名
$reader = PHPExcel_IOFactory::createReader('Excel5'); //設定以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader->load($tmp_file, 'utf-8'); // 載入excel檔案
$sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumm = $sheet->getHighestColumn(); // 取得總列數
$data = array();
for ($rowIndex = 1; $rowIndex <= $highestRow; $rowIndex++) { //迴圈讀取每個單元格的內容。注意行從1開始,列從A開始
for ($colIndex = 'A'; $colIndex <= $highestColumm; $colIndex++) {
$addr = $colIndex . $rowIndex;
$cell = $sheet->getCell($addr)->getValue();
if ($cell instanceof PHPExcel_RichText) { //富文字轉換字串
$cell = $cell->__toString();
}
$data[$rowIndex][$colIndex] = $cell;
}
}
$company_id=$_SESSION['company_id'];
$access_token=get_corp_token($company_id);
// echo count($data);
for ($i=1;$i<count($data);$i++){
$salersman_name=$data[$i+1]['A'];
$job=$data[$i+1]['B'];
$weixin=$data[$i+1]['C'];
$phone=$data[$i+1]['D'];
$department=$data[$i+1]['E'];
$user_data['userid']=$company_id."-".$phone;
$user_data['name']=$salersman_name;
$user_data['mobile']=$weixin;
$user_data['position']=$job;
$user_data['department']=$department;
$err=createuser($access_token,$user_data);
// //新增到資料庫
$udata=array(
'salersman_name'=>$salersman_name,
'job'=>$job,
'weixin'=>$weixin,
'phone'=>$phone,
'company_id'=>$company_id,
'department_id'=>$department_id,
);
//插入
$udata['add_time']=time();
$db->autoExecute("{$config->db_prefix}salersman_info", $udata);
}
$links[0]['text'] = "返回";
$links[0]['href'] = $admin_url.'/qiyewx/staffmanage';
exit();
}
再下面說匯出excel的方法,首先前端:
匯出excel方法:
//匯出excel
public function outexcel(){
//匯出
$path = dirname(__FILE__); //找到當前指令碼所在路徑
vendor("PHPExcel.PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.Writer.IWriter");
vendor("PHPExcel.PHPExcel.Writer.Abstract");
vendor("PHPExcel.PHPExcel.Writer.Excel5");
vendor("PHPExcel.PHPExcel.Writer.Excel2007");
vendor("PHPExcel.PHPExcel.IOFactory");
$objPHPExcel = new \PHPExcel();
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
// 例項化完了之後就先把資料庫裡面的資料查出來
$sql = Db::table('ag_company')->select();
// 設定表頭資訊
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'id')
->setCellValue('B1', '商戶名稱');
/*--------------開始從資料庫提取資訊插入Excel表中------------------*/
$i=2; //定義一個i變數,目的是在迴圈輸出資料是控制行數
$count = count($sql); //計算有多少條資料
for ($i = 2; $i <= $count+1; $i++) {
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $sql[$i-2]['id']);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $sql[$i-2]['company_name']);
}
/*--------------下面是設定其他資訊------------------*/
$objPHPExcel->getActiveSheet()->setTitle('companyInformation'); //設定sheet的名稱
$objPHPExcel->setActiveSheetIndex(0); //設定sheet的起始位置
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //通過PHPExcel_IOFactory的寫函式將上面資料寫出來
$PHPWriter = \PHPExcel_IOFactory::createWriter( $objPHPExcel,"Excel2007");
header('Content-Disposition: attachment;filename="商戶資訊表.xlsx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$PHPWriter->save("php://output"); //表示在$path路徑下面生成demo.xlsx檔案
}
這裡匯出的excel表是這樣的:
程式碼基本都是直接複製,然後改一下欄位就可以了,十分方便。