也想出现在这里? 联系我们

DedeCMS织梦自定义表单导出Excel文档

作者 : 小编 本文共5475个字,预计阅读时间需要14分钟 发布时间: 2020-11-16 共1.51K人阅读
也想出现在这里? 联系我们

        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');  
}  

设置一个excel模板

使用该模板导出数据

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

1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: rayer@88.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » DedeCMS织梦自定义表单导出Excel文档

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
织梦模板使用说明
你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html

发表评论

Copyright 2015-2020 版权所有 资源分享吧 Rights Reserved. 蜀ICP备14022927号-1
开通VIP 享更多特权,建议使用QQ登录