1.首先下载PHPExcel安装包,解压只需要文件夹PHPExcel和文件PHPExcel.php放到框架:ThinkPHP\Library\Vendor\PHPExcel中
1-1.建立控制器:
//显示导入
public function index(){
$this->display('excels/excels');
}
//上传文件操作
public function excels(){
if (IS_POST) {
// 上传
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('xlsl','xls');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = 'Excel/'; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if (!$info) {
$this->error($upload->getError());exit;
}
$file_name = $upload->rootPath.$info['files']['savepath'].$info['files']['savename'];
// exl
$exl = $this->excelIn($file_name);
$data = array();
foreach ($exl as $key => $value) {
$aa = array(
"name"=>trim($value[0]),
"address"=>trim($value[1]),
"phone"=>trim($value[2])
);
if(!empty($aa)){
$data[] = $aa;
}
}
//print_r($data);die;
$arr=M('user')->addAll($data);
$this->success("导出成功",'index/index');
}else{
$this->display();
}
}
// 处理上传exl数据
function excelIn($file_name){
Vendor('PHPExcel.PHPExcel');
Vendor('PHPExcel.IOFactory');
if ('xlsx' == substr(strrchr($file_name,"."),1)) {
$objReader=\PHPExcel_IOFactory::createReader('Excel2007');
}else{
$objReader=\PHPExcel_IOFactory::createReader('Excel5');
}
$objReader=\PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel=$objReader->load($file_name);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
$res_data=NULL;
$res_top=NULL;
for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
$str='';
for($k='B';$k<=$highestColumn;$k++){ //从A列读取数据
$res_data[$j-1][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
}
}
unlink($file_url);
return $res_data;
}
2.简单导出功能
2-1.html页面
<!DOCTYPE html>
<html>
<head>
<title>导出</title>
</head>
<body>
<table>
<tr>
<td>姓名</td>
<td>地址</td>
<td>联系方式</td>
</tr>
<foreach name='data' item='val'>
<tr>
<td>{$val.name}</td>
<td>{$val.address}</td>
<td>{$val.phone}</td>
</tr>
</foreach>
</table>
<a href="{:U('index/daochu')}">导出</a>
</body>
</html>
2-2.控制器层
/*
* 导出
* */
public function index(){
$model = M('user');
$arr = $model->field()->select();
$this->assign('data',$arr);
$this->display('excels/chu');
}
/*
导出用户信息
*/
public function daochu(){
$arr= M('user')->field()->select();
$headArr = array('编号','姓名','地址','联系方式');
$filename = "网络部.xls";
// foreach ($arr as $k=>$row){
// $arr[$k][time] = date("Y-m-d H:i:s",$row['time']);
// } //
echo "<td style='vnd.ms-excel.numberformat:@'>".$printable."</td>\n";
$this->getExcel($filename,$headArr,$arr);
}
private function getExcel($fileName,$headArr,$data){
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
Vendor('PHPExcel.PHPExcel');
Vendor('PHPExcel.IOFactory');
//创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
// 字体
$objPHPExcel->getDefaultStyle()->getFont()->setName('宋体');
// $objPHPExcel->getDefaultStyle()->getFont()->setSize(7);
// $objPHPExcel->getActiveSheet()->getStyle("A1:A".(count($array['spectitle'][$value['conf_name']])+1))->getFont()->setSize(14);
$objProps = $objPHPExcel->getProperties();
// $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); // 行间距
//设置表头
$key = ord("A");
//print_r($headArr);exit;
foreach($headArr as $v){
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$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);
ob_end_clean();//清除缓冲区,避免乱码
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;
}
未完还有带有条件的导出功能.........