开发中有时候要做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表是这样的:
代码基本都是直接复制,然后改一下字段就可以了,十分方便。