首先要下載下傳一個PHPExcel https://pan.baidu.com/s/1WhNUd4Cphzey_Y3sNc5XKg
我這個是composer下載下傳的 但是沒有關系 都是一樣的
前端代碼:
<form action="ADMIN_MAIN/Excel/out" enctype="multipart/form-data" method="post">
<input type="submit" value="導出">
</form>
建立Excel控制器和out方法:
首先use兩個類,否則會報錯:
use PHPExcel_IOFactory;
use PHPExcel;
可以建立一個單獨的類也可以建立一個方法 但是首先要把這兩個引用加載進去
然後引入vendor裡面的PHPExcel類:
vendor("PHPExcel.PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.Writer.Excel5");
vendor("PHPExcel.PHPExcel.Writer.Excel2007");
vendor("PHPExcel.PHPExcel.IOFactory");
一般引用vendor裡面的類或者插件用vendor();
裡面加載的就是vendor檔案,然後想要加載哪個檔案,直接寫就行,中間的“.”相當于檔案路徑的“/”。
在這裡vendor("PHPExcel.PHPExcel.PHPExcel");這裡看自己的路徑是什麼樣的 就寫成什麼樣的 下面的是我自己的執行個體
最後不寫php。這樣就加載進來了。
接下來執行個體化類時候,一定要加“\”。
執行個體化完了之後就先把資料庫裡面的資料查出來:
$sql = db('sys_user')->select();
有了資料,就可以設定Excel表的表頭資訊了:
/*--------------設定表頭資訊------------------*/
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'ID編号')
->setCellValue('B1', '使用者名')
->setCellValue('C1', '手機号');
這裡的A1,B1是A列第一行。以此類推,就是表頭了,想要哪些資訊就寫什麼,隻要資料庫有,接下來可以對的上就行。
接下來就是查到的資訊,對号入座到表格中:
/*--------------開始從資料庫提取資訊插入Excel表中------------------*/
$i=2; //定義一個i變量,目的是在循環輸出資料是控制行數
$count = count($sql); //計算有多少條資料
for ($i = 2; $i <= $count+1; $i++) {
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $sql[$i-2][uid]);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $sql[$i-2][user_name]);
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $sql[$i-2][user_tel]);
$i = 2,因為第一行是表頭,是以寫到表格時候隻能從第二行開始寫。
然後for循環。不知道的,我也無能為力。
接下來就是設定導入表的名稱等内容了
/*--------------下面是設定其他資訊------------------*/
$objPHPExcel->getActiveSheet()->setTitle('user'); //設定sheet的名稱
$objPHPExcel->setActiveSheetIndex(0); //設定sheet的起始位置
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //Excel2003通過PHPExcel_IOFactory的寫函數将上面資料寫出來
$PHPWriter = \PHPExcel_IOFactory::createWriter( $objPHPExcel,"Excel2007"); //Excel2007
header('Content-Disposition: attachment;filename="使用者資訊.xlsx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$PHPWriter->save("php://output"); //表示在$path路徑下面生成demo.xlsx檔案
到這裡,資料導出已經完成
(!!! 千萬不要使用js實作這個功能,js不能和本地存儲進行互動,浏覽器也不會給這個權限,執行導出,用a連結或者form表單送出都可以)
如果程式是在linux下運作 需要使用 Excel5 格式 在linux下 解析不了xlsx 可以解析xls檔案
隻需要修改這三個地方 就可以實作在linux下 導出報表了
在IE浏覽器中,使用PHPExcel導出檔案時,檔案名中文亂碼情況處理
在IE浏覽器中,使用PHPExcel導出檔案時,檔案名中文亂碼情況處理
1.當我們使用IE核心的浏覽器下在PHPExcel報表時(谷歌、火狐浏覽器正常, IE浏覽器,360浏覽器的相容模式報錯),會出現如下錯誤:
2.解決辦法:
在下載下傳檔案時,對目前的浏覽器進行判斷,
如果是IE核心的浏覽器的話,進行檔案名的轉碼,
若不是IE核心的浏覽器,則不用。
關鍵代碼如下:
解決Excel打開出現“檔案已損壞,無法打開”,經過研究,終于解決了。現在把方法和大家分享下! (wps)
http://xinzhi.wenda.so.com/a/1523786495205230