今天写这个博客呢?
第一是为了日后需要用到的时候方便找到 不用去翻以前的项目找代码。
第二是为了帮助不会的同行们解决一下Excel导入导出的问题。
#提示:Excel关键类下载地址在最下面哦。
所有代码都是在Thinkphp5中写的,使用起来不限于tp5哦,其他地方使用大同小异。
一、导入Excel。
1、我们导入excel是不是得先上传文件到服务器呢?
这个上传我们就不举例了,因为上传的方式很多。
上传之后我们把上传文件在服务端的路径返回先保存起来。
2、下面是我在Thinkphp5中写好的一个导入的处理方法,大家可以看一下。
/**
* 批量导入
*/
public function uploadExcel(){
$filename = "./public/upload/file/123.xls"; //服务端excel文件位置
if(extend($filename) == 'xls'){
import("Excel.PHPExcel.Reader.Excel5");
$PHPReader = new \PHPExcel_Reader_Excel5(); //获取对应实例
}else if(extend($filename) == 'xlsx'){
import("Excel.PHPExcel.Reader.Excel2007");
$PHPReader=new \PHPExcel_Reader_Excel2007(); //获取对应实例
}
//载入文件
$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();
}
}
$add = array();
$time = getTime(); //获取当前时间
foreach($data as $k=>$v){
$add[$k]['code'] = $v['A'];
$add[$k]['time'] = $time;
}
if(!empty($add)){
db("pretty_code")->insertAll($add); //插入数据库
}
if(is_file($filename)){
unlink($filename);
}
$this->success("导入成功",url("index"));
}
二、Excel的导出。
1、首先我们把需要导出的数据组装起来(二维的数据哦)。
2、设置好表头。
3、设置好导出的文件名。
#提示: 组装的数据顺序记得和表头对应哦。
最后就一起交给第二个写好的方法吧。
/**
* 导出对应记录
*/
public function ExportShop(){
$whe = '';
$info = db('shops_admin')
->where($whe)
->order("id desc")
->field("id,account_number,username,password")
->select();
if(empty($info[0])){
echo "";
}
$head = array(
'序号',
'账号',
'用户名',
'密码',
);
$fileName = '店铺记录表';
$this ->getExcel($fileName, $head, $info);
}
这个方法没什么说的,要用到的地方直接复制黏贴吧!
#提示: 唯一需要我们注意的地方就是,要正确的引入用到的类库哦。
/**
* 导出excel文件
* @param $fileName 导出的文件命名
* @param $headArr 表头
* @param $data 需要导出的数据
*/
public function getExcel($fileName,$headArr,$data){
//导入PHPExcel类库
import("Excel.PHPExcel");
import("Excel.PHPExcel.Writer.Excel5");
import("Excel.PHPExcel.IOFactory.php");
$date = date("Y_m_d",time());
$fileName .= "_{$date}.xls";
//创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
$objProps = $objPHPExcel->getProperties();
//设置表头
$key = ord("A");
foreach($headArr as $v){
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
}
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
//print_r($data);exit;
foreach($data as $key => $rows){ //行写入
$span = ord("A");
foreach($rows as $keyName=>$value){// 列写入
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
//$objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
exit;
}
以下是对应类库的码云地址:
是不是很实用呢?
看完记得点个赞哦。。。。。。。。