DedeCMS自定義表單功能一般,但也滿足了大多數(shù)人的需求。需要查看表單需要登錄后臺(tái),如果用戶提交的訂單并發(fā)送到郵箱也不能全部統(tǒng)一導(dǎo)出,在月度或季度的時(shí)候,就比較麻煩。
前面做過一個(gè)關(guān)于學(xué)校報(bào)名網(wǎng)站的二次開發(fā),需要用到這個(gè)功能,分享一個(gè)DedeCMS自定義表單導(dǎo)出功能的教程,比較簡(jiǎn)單,只需要修改兩個(gè)文件,不需要下載第三方SDK(PHPExcel)開發(fā)包,感興趣的可以自己下載,本帖后有說明。
DedeCMS表單生成Excel推薦方法
1、打開/dede/templets/diy_main.htm 找到
前臺(tái)預(yù)覽</a>
后面增加
| <a href="diy_list.php?action=push&diyid={dede:field.diyid/}" target="_blank">導(dǎo)出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>狀態(tài)</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>"; }
導(dǎo)出來的文件不帶格式,可以根據(jù)自己的需要添加、修改。
DedeCMS第三方SDK生成并導(dǎo)出Excel
1.下載PHPExcel的SDK,下載地址:https://github.com/PHPOffice/PHPExcel。
2.將SDK解壓之后的Class文件拷貝到自己的項(xiàng)目,如本例的放在根目錄下。
打開/dede/templets/diy_main.htm 找到
前臺(tái)預(yù)覽</a>
后面增加
| <a href="diy_list.php?action=push&diyid={dede:field.diyid/}" target="_blank">導(dǎo)出Excel</a>
打開/dede/diy_list.php 增加如下代碼。
else if($action == 'push')
{
...
}
上面省略號(hào)(...)的內(nèi)容如下,代碼比較多,分別進(jìn)行說明
/* * *Excel文件讀取 * */ function excelToArray(){ require_once dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php'; //項(xiàng)目路徑 //加載excel文件 $filename = dirname(__FILE__).'/result.xlsx'; //根目錄 $objPHPExcelReader = PHPExcel_IOFactory::load($filename); $sheet = $objPHPExcelReader->getSheet(0); // 讀取第一個(gè)工作表(編號(hào)從 0 開始) $highestRow = $sheet->getHighestRow(); // 取得總行數(shù) $highestColumn = $sheet->getHighestColumn(); // 取得總列數(shù) $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; } /* * 創(chuàng)建(導(dǎo)出)Excel數(shù)據(jù)表格 * @param array $list 要導(dǎo)出的數(shù)組格式的數(shù)據(jù) * @param string $filename 導(dǎo)出的Excel表格數(shù)據(jù)表的文件名 * @param array $indexKey $list數(shù)組中與Excel表格表頭$header中每個(gè)項(xiàng)目對(duì)應(yīng)的字段的名字(key值) * @param array $startRow 第一條數(shù)據(jù)在Excel表格中起始行 * @param [bool] $excel2007 是否生成Excel2007(.xlsx)以上兼容的數(shù)據(jù)表 * 比如: $indexKey與$list數(shù)組對(duì)應(yīng)關(guān)系如下: * $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(); //設(shè)置保存版本格式 if($excel2007){ $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $filename = $filename.'.xlsx'; }else{ $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); $filename = $filename.'.xls'; } //接下來就是寫數(shù)據(jù)到表格里面去 $objActSheet = $objPHPExcel->getActiveSheet(); //$startRow = 1; foreach ($list as $row) { foreach ($indexKey as $key => $value){ //這里是設(shè)置單元格的內(nèi)容 $objActSheet->setCellValue($header_arr[$key].$startRow,$row[$value]); } $startRow++; } // 下載這個(gè)表格,在瀏覽器輸出 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'); }
/* * 導(dǎo)出文件,還可以設(shè)置模板 * */ 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文件,設(shè)置模板 $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); //設(shè)置保存版本格式 //接下來就是寫數(shù)據(jù)到表格里面去 $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setCellValue('A2', "活動(dòng)名稱:江南極客"); $objActSheet->setCellValue('C2', "導(dǎo)出時(shí)間:".date('Y-m-d H:i:s')); $i = 4; foreach ($list as $row) { foreach ($indexKey as $key => $value){ //這里是設(shè)置單元格的內(nèi)容 $objActSheet->setCellValue($header_arr[$key].$i,$row[$value]); } $i++; } // 1.保存至本地Excel表格 //$objWriter->save($filename.'.xls'); // 2.接下來當(dāng)然是下載這個(gè)表格了,在瀏覽器輸出就好了 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'); }
設(shè)置一個(gè)excel模板
使用該模板導(dǎo)出數(shù)據(jù)
除此之外還可以對(duì)表格屬性做很多自定義。感興趣的自己看看吧!