本來這個(gè)功能是一個(gè)朋友要做的,因?yàn)?,之前從沒有接觸過excel,這個(gè)功能也沒有研究過,但是,這個(gè)功能比較實(shí)用的,因?yàn)?,很多公司雖然有網(wǎng)站,但是,公司其它部門可能還要把公司數(shù)據(jù)導(dǎo)出到紙上面,以便研究公司數(shù)據(jù)之用,所以,很多的公司對(duì)這個(gè)功能就要求使用。
這幾天研究了一下從織夢(mèng)導(dǎo)出數(shù)據(jù)功能,本來想自己去寫一個(gè)這個(gè)php程序?qū)С龅絜xcel功能來,但是,自己從沒有研究過excel,所以,就沒有向下去寫代碼,于是搜索了一下網(wǎng)上的關(guān)于這個(gè)教程,結(jié)果搜索的教程到是不少,但是,沒有幾個(gè)是正確的,包括百度經(jīng)驗(yàn)里面,測(cè)試了無(wú)數(shù)個(gè)也不行。
不過讓我搜索到了一個(gè)外國(guó)人寫的phpexcel類庫(kù),這個(gè)就是專門處理從數(shù)據(jù)庫(kù)到excel的,下載地址:http://phpexcel.codeplex.com/releases/view/107442
這個(gè)里面有很多的例子,包括excel,csv,word,pdf,htm等從數(shù)據(jù)庫(kù)導(dǎo)出來的文件格式,可以參考一下例子。
織夢(mèng)基地先把從織夢(mèng)系統(tǒng)導(dǎo)出來的效果上個(gè)圖給大家看看:
但是,我遇到了一個(gè)問題就是以前的時(shí)間,在excel是正常顯示的,但是,現(xiàn)在加上的時(shí)間則顯示:1970-01-01 ,我搜索了一下網(wǎng)上教程,也沒有找到相關(guān)教程??吹骄W(wǎng)上說excel也有bug 而且excel計(jì)算的時(shí)間是從1900-1-1開始的,不知道是不是還要換算一下?
時(shí)間問題終于找到原因了,原來字段寫錯(cuò)了。本來是pubdate,結(jié)果寫成了sentdate
其它都是正常顯示的,現(xiàn)在就介紹一下從織夢(mèng)系統(tǒng)導(dǎo)出數(shù)據(jù)的方法:
1.從國(guó)外網(wǎng)站下載上面的phpexcel類庫(kù),解壓后,放到根目錄里面。
2.然后,寫導(dǎo)出程序,這個(gè)可以參考這里面的例子寫,請(qǐng)注意的是:若你的不行,程序可能會(huì)提示404錯(cuò)誤,這個(gè)就是你的路徑?jīng)]有設(shè)置好,剛開始時(shí),我也是這個(gè)原因一直弄不對(duì),最后,才發(fā)現(xiàn)原來是路徑錯(cuò)了。
這個(gè)導(dǎo)出程序主要做如下四步:
a. 從織夢(mèng)中查詢出數(shù)據(jù)
b.設(shè)置表格
c.把數(shù)據(jù)放入表格
c.輸出數(shù)據(jù)到excel里面
里面的設(shè)置大多數(shù)都是調(diào)用phpexcel類里面的函數(shù),這里不多解釋了,看我在文件dedegenban.php寫的代碼:
-
require_once (DEDEINC . '/common.func.php');
-
-
if ($action == 'allexport') {
-
-
include_once DEDEINC . '/PHPExcel.php';
-
// Create new PHPExcel object
-
$objPHPExcel = new PHPExcel();
-
-
$objActSheet = $objPHPExcel->getActiveSheet();
-
-
// Set document properties
-
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")->setLastModifiedBy("Maarten Balliauw")
-
->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")
-
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")
-
->setCategory("Test result file");
-
//www.genban.org 跟版網(wǎng)
-
$objPHPExcel->setActiveSheetIndex(0)
-
->setCellValue('A1', 'id')
-
->setCellValue('B1', '標(biāo)題')
-
->setCellValue('C1', '排序')
-
->setCellValue('D1', '出版時(shí)間')
-
->setCellValue('E1', '關(guān)鍵詞')
-
->setCellValue('F1', '簡(jiǎn)介')
-
->setCellValue('G1', '發(fā)布時(shí)間')
-
->setCellValue('H1', '會(huì)員id')
-
->setCellValue('I1', 'flag')
-
->setCellValue('J1', '欄目id');
-
$query = "Select * From `dede_archives` ";
-
$dsql->SetQuery($query);
-
$dsql->Execute();
-
-
$index = 1;
-
-
while ($row = $dsql->GetArray()) {
-
-
$index++;
-
$objPHPExcel->setActiveSheetIndex(0)
-
->setCellValue('A' .
-
$index, $row['id'])->setCellValue('B' .
-
$index, iconv("gb2312","utf-8",$row['title']))->setCellValue('C' .
-
$index, $row['sortrank'])->setCellValue('D' .
-
$index, "2015-7-23")->setCellValueExplicit('E' .
-
$index, iconv("gb2312","utf-8",$row['keywords']))->setCellValue('F' .
-
$index, iconv("gb2312","utf-8",$row['description']))->setCellValue('G' .
-
$index, gmdate("Y-m-d",$row['pubdate']))->setCellValue('H' .
-
$index, $row['mid'])->setCellValue('I' .
-
$index, $row['flag'])->setCellValue('J' .
-
$index, $row['typeid']);
-
}
-
-
// Rename worksheetwww.dedebase.com
-
$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-
$objPHPExcel->setActiveSheetIndex(0);
-
-
// Redirect output to a client’s web browser (Excel5)
-
header('Content-Type: application/vnd.ms-excel');
-
-
header('Content-Disposition: attachment;filename="list.xls"');
-
header('Cache-Control: max-age=0');
-
-
$objWriter = PHPExcel_IOFactory :: createWriter($objPHPExcel, 'Excel5');
-
$objWriter->save('php://output');
-
exit;
-
-
}
特別特別注意:在這個(gè)最上一行要寫上你的從網(wǎng)站上下載下來的phpexcel類的路徑,也就是把這個(gè)類引入到這個(gè)文件里面,只有引入到里面才能調(diào)用。
最后,在你的模板里面把下面這二行中的任意一行寫在模板里即可:
-
<input name="ss12" value="導(dǎo)出全部訂單" style="width:90px;margin-right:6px" onclick="location='crtadmin/download_oneapply.php?action=allexport';" class="np coolbg" type="button">
-
<a href='crtadmin/download_excel.php?action=allexport'>execl</a>
我這里放二行是因?yàn)椋械恼鹃L(zhǎng)可能只需要一個(gè)超鏈接,有的可能需要一個(gè)input,二個(gè)任選一個(gè)即可。