摘要:本篇文章主要講述,如何在中使用中導出文件,是博主在實踐了好多篇別人的帖子之后,總結歸納出來的文章,親測可用。我的博客歡迎騷擾原文地址用導出文件。將文件,重命名成。文章結束,歡迎轉載。
本篇文章主要講述,如何在thinkPHP中使用PHPExcel中導出Excel文件,是博主在實踐了好多篇別人的帖子之后,總結歸納出來的文章,親測可用。thinkPHP版本是3.2。
我的博客:Mine-MuYan,歡迎騷擾,原文地址:ThinkPHP用PHPExcle導出Excel文件。
準備工作 下載、配置PHPExcel擴展插件去PHPExcel的官網或者github去下載最新PHPExcel放到ThinkPHP/Library/Vendor目錄下,Vendor目錄是放置PHP擴展包的默認文件夾,在Vendor目錄下建立PHPExcel文件夾,將下載的文件,解壓到此處。
將PHPExcel.php文件,重命名成PHPExcel.class.php。
至此,插件安裝已經做好,目錄結構如下圖,接下來做功能部分。
創建Excel方法 生成Excel文件方法/** * 數據導出為.xls格式 * @param string $fileName 導出的文件名 * @param $expCellName array -> 數據庫字段以及字段的注釋 * @param $expTableData Model -> 連接的數據庫 */ public function exportExcel($fileName="table",$expCellName,$expTableData){ $xlsTitle = iconv("utf-8", "gb2312", $fileName);//文件名稱 $xlsName = $fileName.date("_Y.m.d_H.i.s"); //or $xlsTitle 文件名稱可根據自己情況設定 $cellNum = count($expCellName); $dataNum = count($expTableData); import("Vendor.PHPExcel.PHPExcel"); import("Vendor.PHPExcel.Writer.Excel5"); import("Vendor.PHPExcel.IOFactory.php"); $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", $fileName." 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=$xlsName.xls");//attachment新窗口打印inline本窗口打印 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5"); $objWriter->save("php://output"); exit; }方法生成說明 第9行的
$xlsName = $fileName.date("_Y.m.d_H.i.s"); //or $xlsTitle 文件名稱可根據自己情況設定
是設置文件名,上面所寫是文件名_Y.m.d_H.i.s,_Y.m.d_H.i.s即是導出的時間,因為windows下,文件名中不能含有:,所以即便寫成_Y.m.d_H:i:s,導出的文件也是_Y.m.d_H.i.s這種樣式。
第13行~15行的import("Vendor.PHPExcel.PHPExcel"); import("Vendor.PHPExcel.Writer.Excel5"); import("Vendor.PHPExcel.IOFactory.php");
這三行即是引入PHPExcel,因為當時的文件目錄結構是ThinkPHP/Library/Vendor/PHPExcel,所以import("Vendor.PHPExcel.PHPExcel");,注意目錄結構,只要引入的位置和放置PHPExcel的目錄相同即可;
第20、21行的$objPHPExcel->getActiveSheet(0)->mergeCells("A1:".$cellName[$cellNum-1]."1");//合并單元格 $objPHPExcel->setActiveSheetIndex(0)->setCellValue("A1", $fileName." Export time:".date("Y-m-d H:i:s"));
此作用是,在Excel文件的第一行合并一行單元格,用作表格的標題或簡介。如下圖所示:
setCellValue("A1", $fileName." Export time:".date("Y-m-d H:i:s"));值可以根據自己需求修改;
第34行的header("Content-Disposition:attachment;filename=$xlsName.xls");//attachment新窗口打印inline本窗口打印
可以設置輸出的文件格式,此處寫的是.xls,可修改成.xlsx。
三個參數此方法調用時需要傳入三個參數(在方法開頭的注釋中已經說了),這里再具體說明一下:
$fileName 導出的文件的文件名 $expCellName 數據庫字段以及字段的注釋(數組) $expTableData 連接的數據庫方法調用 調用方法
/**導出**/ public function msgOut(){ $excel = A("Excel"); $xlsCell = array( array("id", "ID"), array("staff_name", "昵稱"), array("staff_real", "真實姓名"), array("mobile", "手機號"), array("card_id", "身份證號"), array("referee", "推薦人"), array("game_id", "游戲ID"), array("money", "余額"), array("consume_coin", "消費幣"), array("create_time", "注冊時間"), array("status", "狀態"), ); $xlsName = "Staff表搜索結果導出"; $field = null; foreach ($xlsCell as $key => $value) { if($key == 0){ $field = $value[0]; }else{ $field .= "," . $value[0]; } } $xlsModel = M("Staff"); if (IS_POST) { $map = $this -> _queryTime(); $staff_name = I("staff_name"); if($staff_name) { if (is_numeric($staff_name)) { $map["id|staff_name"] = array(intval($staff_name), array("like", "%" . $staff_name . "%"), "_multi" => true); } else { $map["staff_name"] = array("like", "%" . (string)$staff_name . "%"); } } $xlsData = $xlsModel->Field($field)->where($map)->order("id DESC")->select(); } foreach ($xlsData as $k => $v) { $xlsData[$k]["create_time"] = $v["create_time"] == null ? "-" : date("Y-m-d H:i",$v["create_time"]); $xlsData[$k]["status"] = $v["status"] == 1 ? "正常" : "禁用"; } $excel->exportExcel($xlsName,$xlsCell,$xlsData); }調用說明 第3行
$excel = A("Excel");
這個方法我寫在了Application/Admin/Controller/ExcelController.class.php中,當前用的控制器是MainController.class.php,調用其他控制器中的方法,用TP中自帶的A(),所以第51行,用的是$excel->exportExcel($xlsName,$xlsCell,$xlsData);,如果你的exportExcel()方法和當前調用的方法在同一個控制器內,那么第三行可以不寫,第51行改成$this->exportExcel($xlsName,$xlsCell,$xlsData);。
$xlsCell是導出這張表中所有的字段,以及字段的注釋,導出后,不能把字段作為表格的列名,不知道數據庫字段是什么意思的用戶,看了這張表也不知所以然。
第17~24行是根據$xlsCell數組中,提取出來字段名,作為一個字符串,在查詢時使用。當然也可以把這個字段名的字符串手寫出來,我這里用的是foreach處理。
第27~38行是查詢條件和查詢結果,如果沒有查詢條件,想把整張表導出的話,直接用 $xlsData = $xlsModel->Field($field)->order("id DESC")->select();即可。
第47~50行是對$xlsData結果進行處理,我寫的兩個意思是:
1.當`create_time`字段為空的時候,值為 `-` ,有值的時候,就用`date()`函數把時間戳處理成日期; 2.當`status`字段的值為1的時候,顯示為`正常`,當值為0的時候`禁用`。
有點羅嗦了,見諒。
模板文件模板文件很簡單,就一個提交。
form表單中三個input,是搜索條件,如果沒有的話,直接寫button即可。
文章結束,歡迎轉載。文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30592.html
摘要:介紹最近項目中讓實現一個導入導出的功能,查找了一些插件后發現這個插件,所以就嘗試使用了一下,這里將使用方法和遇到的問題簡單記錄一下。 介紹 最近項目中讓實現一個導入導出Excel的功能,查找了一些插件后發現js-xlsx這個插件,所以就嘗試使用了一下,這里將使用方法和遇到的問題簡單記錄一下。 SheetJS js-xlsx 是一款能夠讀寫多種格式表格的插件,瀏覽器支持良好,并且能在多個...
摘要:上傳添加需下載類文件,引入到項目類庫里接收前臺文件,接收前臺文件重設置文件名設置移動路徑表用函數方法返回數組創建一個讀取數據,可用于入庫引用類靜態類設置為代表支持或以下版本,代表版開始讀取上傳到服務器中的文件,返回一個二維數組 1.上傳添加excel (需下載PHPExcel類文件,引入到項目類庫里) //接收前臺文件, public function addExcel() ...
摘要:目前導出方式占用內存較大。比如有些狀態字段,數據庫存的就是數字或只占一個字節,完全換成中文狀態的話,可能達個字節甚至更多。若是必須要用中文形式。中文亂碼解決的話,其實也很簡單,函數,將轉為編碼,在中打開就不會錯了 問題描述:目前、一般情況下,在web開發過程中,使用導入導出報表的情形很多。我們先說導出。項目數據量多導出行數較多,50萬行左右,選擇的是csv方式導出。針對以下應用場景,導...
閱讀 2986·2020-01-08 12:17
閱讀 1991·2019-08-30 15:54
閱讀 1152·2019-08-30 15:52
閱讀 2033·2019-08-29 17:18
閱讀 1042·2019-08-29 15:34
閱讀 2460·2019-08-27 10:58
閱讀 1861·2019-08-26 12:24
閱讀 368·2019-08-23 18:23