1. 程式人生 > >織夢CMS系統內容匯出資料到excel教程【完整-》附程式碼】

織夢CMS系統內容匯出資料到excel教程【完整-》附程式碼】

本來這個功能是一個朋友要做的,因為,之前從沒有接觸過excel,這個功能也沒有研究過,但是,這個功能比較實用的,因為,很多公司雖然有網站,但是,公司其它部門可能還要把公司資料匯出到紙上面,以便研究公司資料之用,所以,很多的公司對這個功能就要求使用。

  這幾天研究了一下從織夢匯出資料功能,本來想自己去寫一個這個php程式匯出到excel功能來,但是,自己從沒有研究過excel,所以,就沒有向下去寫程式碼,於是搜尋了一下網上的關於這個教程,結果搜尋的教程到是不少,但是,沒有幾個是正確的,包括百度經驗裡面,測試了無數個也不行。

  不過讓我搜索到了一個外國人寫的phpexcel類庫,這個就是專門處理從資料庫到excel的,

下載地址:http://phpexcel.codeplex.com/releases/view/107442

  這個裡面有很多的例子,包括excel,csv,word,pdf,htm等從資料庫匯出來的檔案格式,可以參考一下例子。

  谷康網小編先把從織夢繫統匯出來的效果上個圖給大家看看:

dedecms匯出
dedecms內容匯出excel

 

但是,我遇到了一個問題就是以前的時間,在excel是正常顯示的,但是,現在加上的時間則顯示:1970-01-01 ,我百度搜尋了一下網上教程,也沒有找到相關教程。看到網上說excel也有bug 而且excel計算的時間是從1900-1-1開始的,不知道是不是還要換算一下?

    時間問題終於找到原因了,原來欄位寫錯了。本來是pubdate

,結果寫成了sentdate

  其它都是正常顯示的,現在就介紹一下從織夢繫統匯出資料的方法:

1.從國外網站下載上面的phpexcel類庫,解壓後,放到根目錄裡面。

2.然後,寫匯出程式,這個可以參考這裡面的例子寫,請注意的是:若你的不行,程式可能會提示404錯誤,這個就是你的路徑沒有設定好,剛開始時,我也是這個原因一直弄不對,最後,才發現原來是路徑錯了。

  這個匯出程式主要做如下四步:

   a. 從織夢中查詢出資料

   b.設定表格

   c.把資料放入表格

   c.輸出資料到excel裡面

  裡面的設定大多數都是呼叫phpexcel類裡面的函式,這裡不多解釋了,看我在檔案dedetoexcel.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 跟版網
    $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A1', 'id')
    ->setCellValue('B1', '標題')
    ->setCellValue('C1', '排序')
    ->setCellValue('D1', '出版時間')
    ->setCellValue('E1', '關鍵詞')
    ->setCellValue('F1', '簡介')
    ->setCellValue('G1', '釋出時間')
    ->setCellValue('H1', '會員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;
 
}

特別特別注意:在這個最上一行要寫上你的從網站上下載下來的phpexcel類的路徑,也就是把這個類引入到這個檔案裡面,只有引入到裡面才能呼叫。

  最後,在你的模板裡面把下面這二行中的任意一行寫在模板裡即可:

   <input name="ss12" value="匯出全部訂單" 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>

好品牌小編裡放二行是因為,有的站長可能只需要一個超連結,有的可能需要一個input,二個任選一個即可。