天天看點

thinkPHP5 使用PHPExcel導出Excel檔案

首先要下載下傳一個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");這裡看自己的路徑是什麼樣的 就寫成什麼樣的 下面的是我自己的執行個體

thinkPHP5 使用PHPExcel導出Excel檔案

最後不寫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檔案
                

到這裡,資料導出已經完成

thinkPHP5 使用PHPExcel導出Excel檔案
thinkPHP5 使用PHPExcel導出Excel檔案

(!!!   千萬不要使用js實作這個功能,js不能和本地存儲進行互動,浏覽器也不會給這個權限,執行導出,用a連結或者form表單送出都可以)

如果程式是在linux下運作    需要使用 Excel5  格式 在linux下   解析不了xlsx    可以解析xls檔案      

thinkPHP5 使用PHPExcel導出Excel檔案

隻需要修改這三個地方  就可以實作在linux下  導出報表了

在IE浏覽器中,使用PHPExcel導出檔案時,檔案名中文亂碼情況處理

在IE浏覽器中,使用PHPExcel導出檔案時,檔案名中文亂碼情況處理

1.當我們使用IE核心的浏覽器下在PHPExcel報表時(谷歌、火狐浏覽器正常, IE浏覽器,360浏覽器的相容模式報錯),會出現如下錯誤:

thinkPHP5 使用PHPExcel導出Excel檔案

2.解決辦法:

在下載下傳檔案時,對目前的浏覽器進行判斷,

如果是IE核心的浏覽器的話,進行檔案名的轉碼,

若不是IE核心的浏覽器,則不用。

thinkPHP5 使用PHPExcel導出Excel檔案

關鍵代碼如下:

thinkPHP5 使用PHPExcel導出Excel檔案

解決Excel打開出現“檔案已損壞,無法打開”,經過研究,終于解決了。現在把方法和大家分享下!  (wps)

thinkPHP5 使用PHPExcel導出Excel檔案

http://xinzhi.wenda.so.com/a/1523786495205230

thinkPHP5 使用PHPExcel導出Excel檔案