女神猫女王

代理加盟 2020全新代理計劃 賺錢+省錢雙管齊下,獨立平臺,豐厚利潤!

您現在的位置: 秀站網 > 織夢大學 > 使用教程 >

DedeCMS織夢自定義表單導出Excel文檔

來源:本站原創 發布時間:2019-03-31 13:58:50熱度:我要評論(0

免費下載,無需注冊無需充值

        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模板

使用該模板導出數據

除此之外還可以對表格屬性做很多自定義。感興趣的自己看看吧!

轉載請注明來源網址:http://www.qksux.club/dedecms_jq/1302.html

    發表評論

    評論列表(條)

      女神猫女王 809621195614110156908325478829427936184217045847321932933985743638458813938407690776814979455845387 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();