PHPExcel將資料庫內的資料匯出成excel檔案
阿新 • • 發佈:2018-11-09
前兩天用到了將excel檔案匯入至資料庫中,果不其然,很快就用到了將資料庫內資料匯出成excel檔案,在網上瀏覽學習了很多網站之後終於完成了,今天就分享一個小例項。
一:上乾貨
1.老樣子,資料庫!!(資料庫程式碼參考:https://blog.csdn.net/qq_42751377/article/details/81141104)
2.PHPExcel外掛置於Vendor目錄下。
3.建立demo專案
4.IndexController.class.php
<?php /** * * 匯入Excel檔案資料到MySQL資料庫 */ namespace Home\Controller; use Think\Controller; class IndexController extends Controller { /** * 顯示上傳表單html頁面 */ public function index() { $this->display(); } public function exportExcel($expTitle,$expCellName,$expTableData){ $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//檔名稱 $fileName = $_SESSION['account'].date('_YmdHis');//or $xlsTitle 檔名稱可根據自己情況設定 $cellNum = count($expCellName); $dataNum = count($expTableData); // dump($expTableData); // dump($expCellName[0][0]); // dump($expTableData[0][$expCellName[0][0]]);die; vendor("PHPExcel.PHPExcel"); $objPHPExcel = new \PHPExcel(); $cellName = 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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'); $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合併單元格 // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s')); for($i=0;$i<$cellNum;$i++){ $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]); } // Miscellaneous glyphs, UTF-8 for($i=0;$i<$dataNum;$i++){ for($j=0;$j<$cellNum;$j++){ $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]); } } header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新視窗列印inline本視窗列印 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; } /** * * 匯出Excel */ function expUser(){//匯出Excel $xlsName = "User"; $xlsCell = array( array('pid','序列'), array('pname','名字'), array('pprice','價格'), array('pcount','個數') ); $xlsModel = M('Info'); $xlsData = $xlsModel->Field('pid,pname,pprice,pcount')->select(); // dump($xlsData); $this->exportExcel($xlsName,$xlsCell,$xlsData); } } ?>
5.index.html(小例子,一個a標籤即可)
<a href="{:U('Index/expUser')}" >匯出資料並生成excel</a>
6.測試
二:總結
文章說明:因學習時瀏覽網站較多且參考網站較多,如有參考內容轉載絕非有意,若有侵犯,還請告知。
問題總結:找不到 PHPExcel() 類,嘗試使用 new \PHPExcel(); \PHPExcel_IOFactory
可以下載excel,但內容缺少資料,最後發現在 expUser() 方法中 array陣列內欄位名要用小寫。
還是那樣,很多小問題都可以通過嘗試使用 dump();die; 來測試,保證程式碼走得通的同時還可以檢查變數的值的準確性。
文章若有錯誤或問題,歡迎指出。