thinkPHP怎样使用PHPExcel导出网站数据为excel

2025-03-20 03:28:39
推荐回答(3个)
回答1:

第一步:先去http://phpexcel.codeplex.com/下载PHPExcel插件压缩包,解压后只用到Classes文件夹里面的文件就行。

第二步:然后把Classes文件夹名称改为PHPExcel (也可以不用改),再放在thinkPHP指定的第三方类库目录文件夹Vendor下面,第三方类库目录在ThinkPHP/Library 里面


第三步:整理数据,整理成适合excel表格式的数据,不多说直接给代码

public function export(){//导出Excel表数据整理
$xlsData  = M('table')->select();//查找需要导出的数据
        $xlsCell  = array(//设置excel文档的格式第一行就相当于标题
            array('id','ID号'),
            array('title','标题'),
            array('time','时间'),
            array('content','内容')
        );

$newArray = array();//自定义数组
        foreach ($xlsData as $k => $v)
        {//然后把所有查找到的数据根据设置第一行的标题相对应放进数组里面
$newArray[$k]['id'] = $v['id'];
                $newArray[$k]['title'] = $v['title'];
                $newArray[$k]['time'] = date('Y-m-d',$v['time']);
$newArray[$k]['content'] = $v['content'];
        }
        $xlsName = 'Excel表数据';//设置Excel表文件名称
        $this->exportExcel($xlsName,$xlsCell,$newArray);//调用PHPExcel插件,这步的函数也需要自定义
    }
/**
     * @param $xlsName 名称
     * @param $xlsCell 参数(标题数组)
     * @param $newArray 内容(数据数组)
     */
    public function exportExcel($xlsName,$xlsCell,$newArray){

        $xlsTitle = iconv('utf-8', 'gb2312', $xlsName);//文件名称需要转码避免乱码出错
        $xlsCell_num = count($xlsCell);
        $newArray_num = count($newArray);
        
        vendor("PHPExcel.PHPExcel");//关键,利用thinkphp内置函数嵌套PHPExcel插件,如果在第二步没有改文件夹名称就这样:vendor("Classes.PHPExcel");点之前表示插件文件夹,点之后的表示PHPExcel.php文件的名称不要后缀名
        $objPHPExcel = new \PHPExcel();//实例化PHPExcel
        
        $column_key = 'A';//excel表的每个单元格都是A1,A2,A3....类似的,大写字母代表列,数字代表行,那么第一行就是标题了
foreach($xlsCell as $k=>$v){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($column.'1',$v);//有多少标题列先写进第一行
$column_key++;//这样循环的好处就是不用限定有多少列,可以根据你的数据表字段有多少就导出多少列
}
        for($i=0;$i<$newArray_num;$i++){//第一层循环表示多少行
            $column_key = 'A';
            for($j=0;$j<$xlsCell_num;$j++){//第二层表示列
                $objPHPExcel->getActiveSheet(0)->setCellValue($column_key.($i+2), $newArray[$i][$xlsCell[$j][0]]);//($i+2)表示从第二行开始,第一行已经设置为标题了
                $column_key++;
            }
        }
        header('pragma:public');
        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
        header("Content-Disposition:attachment;filename=$xlsTitle.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//Excel5为xls格式,excel2007为xlsx格式
        $objWriter->save('php://output');
        exit;
    }

 运行后的效果文件图

回答2:

一、下载PHPExcel包

2
二、新建文件夹,命名为PHPExcel,将上面两个文件PHPExcel,PHPExcel.php放到我们新建的PHPExcel文件夹下面;然后将此文件夹放在thinkPHP核心包里面,路径如下:D:\***\你的项目\ThinkPHP\Library\Vendor

3
三、前端界面代码








4
四、导出表格样式代码
//商家表格导出模板
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', '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('F')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(15);
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');
//合并单元格
$objPHPExcel->getActiveSheet()->setCellValue('A1', '网站商家信息表')->getStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $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 + 3), " ".$expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean(); //清除缓冲区,避免乱码
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');
$objWriter->save('php://output');
exit;
}

5
五、导出所需数据代码
function output($begin=0, $end=0) {//导出商家信息Excel
$xlsName = "User";
$xlsCell = array(
array('userid', '商家id'),
array('groupid', '商家等级'),
array('store_name', '店铺名称'),
array('contact_name', '联系人'),
array('phone', '手机'),
array('email', '邮箱'),
array('activity_count', '活动商品'),
array('frozen_deposit', '冻结中保证金'),
array('regdate', '注册时间'),
array('loginnum', '登录次数'),
array('lastdate', '最近登录'),
array('id_number', '身份证号码'),
array('name', '姓名'),
array('qq', 'QQ'), );
$beginToday = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$endToday = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
if ($begin > 0) { $beginToday = $begin;}
if ($end > 0) {$endToday = $end;}
$xlsModel = M('member');
$xlsData=$xlsModel->query("SELECT m.userid,m.groupid,c.store_name,c.contact_name,m.phone,m.email,c.frozen_deposit,FROM_UNIXTIME(m.regdate) AS regdate,loginnum,FROM_UNIXTIME(m.lastdate) AS lastdate,m.qq FROM xw_member AS m ,xw_member_merchant AS c WHERE m.modelid = 2 AND m.userid = c.userid and (m.lastdate between $beginToday and $endToday) ORDER BY m.userid DESC");
$dataNum = count($xlsData);
for ($i = 0; $i < $dataNum; $i++){
if ($xlsData[$i][groupid] == '1') {
$xlsData[$i][groupid] = '普通商家';
} else if ($xlsData[$i][groupid] == '2') {
$xlsData[$i][groupid] = '金牌商家';
} else if ($xlsData[$i][groupid] == '3') {
$xlsData[$i][groupid] = '白金商家';
} else if ($xlsData[$i][groupid] == '4') {
$xlsData[$i][groupid] = '钻石商家';
}
$rs=M('member_attesta')->where("userid= '".$xlsData[$i]['userid']."' AND type = 'identity'")->getField('infos');
$identity = string2array($rs);
$xlsData[$i]['id_number'] = $identity['id_number'];
$xlsData[$i]['name'] = $identity['name'];
$xlsData[$i]['activity_count']= M('product')->where(array('company_id'=>$xlsData[$i]['userid']))->count();
}
$this->exportExcel($xlsName, $xlsCell, $xlsData);
}
}

回答3:

在第三方插件目录下建立PhpExcel的文件夹并把程序放入文件夹内(ThinkPHP\Library\Vendor)

在程序内调用
import('调用方法文件');

// 导入Vendor类库包 Library/Vendor/Zend/Server.class.php
import('Vendor.Zend.Server');

类推
// 导入Vendor类库包 Library/Vendor/PhpExcel/index.class.php
import('Vendor.PhpExcel.index');