• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    DedeCMS织梦自定义表单导出Excel文档
    POST TIME:2021-05-23 01:45

    DedeCMS自定义表单功能一般,但也满足了大多数人的需求。需要查看表单需要登录后台,如果用户提交的订单并发送到邮箱也不能全部统一导出,在月度或季度的时候,就比较麻烦。

    前面做过一个关于学校报名网站的二次开发,需要用到这个功能,分享一个DedeCMS自定义表单导出功能的教程,比较简单,只需要修改两个文件,不需要下载第三方SDK(PHPExcel)开发包,感兴趣的可以自己下载,本帖后有说明。

    DedeCMS表单生成Excel推荐方法

    1、打开/dede/templets/diy_main.htm 找到

    前台预览</a>

            后面增加

    | <a href="diy_list.php?action=push&diyid={dede:field.diyid/}" target="_blank">导出Excel</a>

    2、打开/dede/diy_list.php 找到

    array('post', 'list', 'edit', 'check', 'delete'))

            在 'delete' 后面增加 ,'push',如下

    array('post', 'list', 'edit', 'check', 'delete','push'))

            在最下面找到

    else
    {
        showmsg('未定义操作', "-1");
    }

            在这段之前增加代码

    else if($action == 'push')
    {
    	header("Content-type:application/vnd.ms-excel");
    	header("Content-Disposition:attachment;filename={$diy->name}_".date("Y-m-d").".xls");//表格命名方式
    	$fieldlist = $diy->getFieldList();
    	echo "<table><tr>";
    	foreach($fieldlist as $field=>$fielddata)
    	{
    		echo "<th>{$fielddata[0]}</th>";
    	}
    	echo "<th>状态</th>";
    	echo "</tr>";
    	$sql = "SELECT * FROM {$diy->table} ORDER BY id DESC";
    	$dsql->SetQuery($sql);
    	$dsql->Execute('t');
    	while($arr = $dsql->GetArray('t'))
    	{
    		echo "<tr>";
    		foreach($fieldlist as $key => $field)
    		{
    			echo "<td>".$arr[$key]."</td>";
    		}
    		$status = $arr['ifcheck'] == 1 ? '已审核' : '未审核';
    		echo "<td>".$status."</td>";
    		echo "</tr>";
    	}
    	echo "</table>";
    }

            导出来的文件不带格式,可以根据自己的需要添加、修改。

    DedeCMS第三方SDK生成并导出Excel

    1.下载PHPExcel的SDK,下载地址:https://github.com/PHPOffice/PHPExcel。

    2.将SDK解压之后的Class文件拷贝到自己的项目,如本例的放在根目录下。

            打开/dede/templets/diy_main.htm 找到

    前台预览</a>

            后面增加

    | <a href="diy_list.php?action=push&diyid={dede:field.diyid/}" target="_blank">导出Excel</a>

            打开/dede/diy_list.php 增加如下代码。

    else if($action == 'push')
    {
    ...
    }

            上面省略号(...)的内容如下,代码比较多,分别进行说明

    /*
     *
     *Excel文件读取
     * 
     */
    
    function excelToArray(){  
    require_once dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php';  //项目路径
    //加载excel文件  
    $filename = dirname(__FILE__).'/result.xlsx'; //根目录 
    $objPHPExcelReader = PHPExcel_IOFactory::load($filename);    
    $sheet = $objPHPExcelReader->getSheet(0);        // 读取第一个工作表(编号从 0 开始)  
    $highestRow = $sheet->getHighestRow();           // 取得总行数  
    $highestColumn = $sheet->getHighestColumn();     // 取得总列数  
    $arr = 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');  
    // 一次读取一列  
    $res_arr = array();  
    for ($row = 2; $row <= $highestRow; $row++) {  
    $row_arr = array();  
    for ($column = 0; $arr[$column] != 'F'; $column++) {  
    $val = $sheet->getCellByColumnAndRow($column, $row)->getValue();  
    $row_arr[] = $val;  
    }  
    $res_arr[] = $row_arr;  
    }  
    return $res_arr;  
    }  
    
    /*
     * 创建(导出)Excel数据表格 
     * @param  array   $list        要导出的数组格式的数据 
     * @param  string  $filename    导出的Excel表格数据表的文件名 
     * @param  array   $indexKey    $list数组中与Excel表格表头$header中每个项目对应的字段的名字(key值) 
     * @param  array   $startRow    第一条数据在Excel表格中起始行 
     * @param  [bool]  $excel2007   是否生成Excel2007(.xlsx)以上兼容的数据表 
     * 比如: $indexKey与$list数组对应关系如下: 
     *     $indexKey = array('id','username','sex','age'); 
     *     $list = array(array('id'=>1,'username'=>'YQJ','sex'=>'男','age'=>24)); 
     */  
    
    function exportExcel($list,$filename,$indexKey,$startRow=1,$excel2007=false){  
    //文件引入  
    require_once APP_ROOT.'/Classes/PHPExcel.php';  
    require_once APP_ROOT.'/Classes/PHPExcel/Writer/Excel2007.php';  
    if(empty($filename)) $filename = time();  
    if( !is_array($indexKey)) return false;  
    $header_arr = 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');  
    //初始化PHPExcel()  
    $objPHPExcel = new PHPExcel();  
    //设置保存版本格式  
    if($excel2007){  
    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);  
    $filename = $filename.'.xlsx';  
    }else{
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);  
    $filename = $filename.'.xls';  
    }  
    
    //接下来就是写数据到表格里面去  
    $objActSheet = $objPHPExcel->getActiveSheet();  
    //$startRow = 1;  
    foreach ($list as $row) {  
    foreach ($indexKey as $key => $value){  
    //这里是设置单元格的内容  
    $objActSheet->setCellValue($header_arr[$key].$startRow,$row[$value]);  
    }  
    $startRow++;  
    }  
    
    // 下载这个表格,在浏览器输出  
    header("Pragma: public");  
    header("Expires: 0");  
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");  
    header("Content-Type:application/force-download");  
    header("Content-Type:application/vnd.ms-execl");  
    header("Content-Type:application/octet-stream");  
    header("Content-Type:application/download");;  
    header('Content-Disposition:attachment;filename='.$filename.'');  
    header("Content-Transfer-Encoding:binary");  
    $objWriter->save('php://output');  
    }  
    /*
     *
    导出文件,还可以设置模板
     *
     */
    
    function exportExcel($list,$filename,$indexKey=array()){  
    require_once dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php';  
    require_once dirname(__FILE__) . '/Classes/PHPExcel.php';  
    require_once dirname(__FILE__) . '/Classes/PHPExcel/Writer/Excel2007.php';  
    $header_arr = 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');  
    
    //$objPHPExcel = new PHPExcel();                        //初始化PHPExcel(),不使用模板  
    $template = dirname(__FILE__).'/template.xls';          //使用模板  
    $objPHPExcel = PHPExcel_IOFactory::load($template);     //加载excel文件,设置模板  
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);  //设置保存版本格式  
    //接下来就是写数据到表格里面去  
    $objActSheet = $objPHPExcel->getActiveSheet();  
    $objActSheet->setCellValue('A2',  "活动名称:江南极客");  
    $objActSheet->setCellValue('C2',  "导出时间:".date('Y-m-d H:i:s'));  
    $i = 4;  
    foreach ($list as $row) {  
    foreach ($indexKey as $key => $value){  
    //这里是设置单元格的内容  
    $objActSheet->setCellValue($header_arr[$key].$i,$row[$value]);  
    }  
    $i++;  
    }  
    // 1.保存至本地Excel表格  
    //$objWriter->save($filename.'.xls');  
    // 2.接下来当然是下载这个表格了,在浏览器输出就好了  
    header("Pragma: public");  
    header("Expires: 0");  
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");  
    header("Content-Type:application/force-download");  
    header("Content-Type:application/vnd.ms-execl");  
    header("Content-Type:application/octet-stream");  
    header("Content-Type:application/download");;  
    header('Content-Disposition:attachment;filename="'.$filename.'.xls"');  
    header("Content-Transfer-Encoding:binary");  
    $objWriter->save('php://output');  
    }  
    /*
     *
    导出文件,还可以设置模板
     *
     */
    
    function exportExcel($list,$filename,$indexKey=array()){  
    require_once dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php';  
    require_once dirname(__FILE__) . '/Classes/PHPExcel.php';  
    require_once dirname(__FILE__) . '/Classes/PHPExcel/Writer/Excel2007.php';  
    $header_arr = 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');  
    
    //$objPHPExcel = new PHPExcel();                        //初始化PHPExcel(),不使用模板  
    $template = dirname(__FILE__).'/template.xls';          //使用模板  
    $objPHPExcel = PHPExcel_IOFactory::load($template);     //加载excel文件,设置模板  
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);  //设置保存版本格式  
    //接下来就是写数据到表格里面去  
    $objActSheet = $objPHPExcel->getActiveSheet();  
    $objActSheet->setCellValue('A2',  "活动名称:江南极客");  
    $objActSheet->setCellValue('C2',  "导出时间:".date('Y-m-d H:i:s'));  
    $i = 4;  
    foreach ($list as $row) {  
    foreach ($indexKey as $key => $value){  
    //这里是设置单元格的内容  
    $objActSheet->setCellValue($header_arr[$key].$i,$row[$value]);  
    }  
    $i++;  
    }  
    // 1.保存至本地Excel表格  
    //$objWriter->save($filename.'.xls');  
    // 2.接下来当然是下载这个表格了,在浏览器输出就好了  
    header("Pragma: public");  
    header("Expires: 0");  
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");  
    header("Content-Type:application/force-download");  
    header("Content-Type:application/vnd.ms-execl");  
    header("Content-Type:application/octet-stream");  
    header("Content-Type:application/download");;  
    header('Content-Disposition:attachment;filename="'.$filename.'.xls"');  
    header("Content-Transfer-Encoding:binary");  
    $objWriter->save('php://output');  
    }  

    设置一个excel模板

    使用该模板导出数据

    除此之外还可以对表格属性做很多自定义。感兴趣的自己看看吧!

    
    关于我们 | 付款方式 | 建站知识 | 增值服务 | 网站模板
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!