DedeCMS把自定义表单导出Excel
原创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模板
使用该模板导出数据
除此之外还可以对表格属性做很多自定义。感兴趣的自己看看吧!
扩展阅读
- DedeCMS表单自定义字段地区三级联动下拉选择修改优化版
- DedeCMS显示当前访问用户地域PHP方法
- DedeCMS自定义表单导出当天、两天的部分Excel数据
- DedeCMS自定义表单批量审核增加删除全选取消全选按钮
- DedeCMS栏目不调用排除指定栏目的文章
- DedeCMS调用同级栏目功能及当前文章显示高亮
- DedeCMS用PHP判断某个时间段显示和隐藏
- 织梦MIP改造文章图片标签并去除行内style样式
- DedeCMS设置绝对路径,文章使用远程缩略图不正常显示
- DedeCMS对接熊掌号改造搜索结果多张图片
- DedeCMS调用友情链接数量限制
- DedeCMS用PHP判断flag自定义属性是否存在
本文地址:https://www.vi586.com/web/515.html
版权声明:原创文章,版权归重庆SEO吖七所有,欢迎分享本文,支持原创,转载请保留出处