thinkphp中導出二維數組到Excelphp
1.解決時間長度致使EXCEL出現###問題 thinkphp
2.解決長數值型 帶來的科學記數法導出問題 訂單號再也不變爲科學記數法 而是直接字符串類型數組
代碼以下:app
<?php /** * Author lizhaoyao * Add_Time:2015-08-26 * [php_excel_export 用戶導出Excel] * @param array $data [含有表頭的數組] * @param string $file_name [要保存的文件名] * @param string $sheet_name [工做表名稱] * @return [type] [返回Excel] */ function php_excel_export($data=array(),$file_name='',$sheet_name='導出記錄') { if($file_name==""){$file_name=time();}//若是沒有給名稱 默認爲當前時間戳 Vendor('Classes.PHPExcel');//導入擴展類 $objPHPExcel = new PHPExcel();//實例化PHPExcel $data_key=array_keys($data);//取出二維數組的第一個元素 $keys_list=array_keys($data[$data_key[0]]);//取出二維數組第一個數組的全部key //爲何這麼作 爲何不用$data[0]? 由於該方法未知用戶傳入的data是何種數組 若是是關聯數組 $data[0]將失效且報警告 /*如下就是對處理Excel裏的數據, 橫着取數據,主要是這一步,其餘基本都不要改*/ foreach($data as $k => $v) { $num=$k+1;//定義起始符 $middle_obj=$objPHPExcel->setActiveSheetIndex(0);//獲取第一個工做表 $start_column='A';//定義起始列爲A foreach ($keys_list as $key => $value) { $objPHPExcel->getActiveSheet()->setCellValueExplicit($start_column.$num, $v[$value],PHPExcel_Cell_DataType::TYPE_STRING);//循環着給第幾列賦值 並把長數值型變爲文本型輸出 解決導出造成科學記數法的瑕疵 //在excel中 列是以 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……這樣的形式增長的 //而字符串的增長正好符合這一規律 這也意味着 咱們能夠用字符串的自增來看成列 $objPHPExcel->getActiveSheet()->getColumnDimension($start_column)->setWidth(280);//設置每列寬度爲280 $start_column++;//將列自增 } } $objPHPExcel->getActiveSheet()->setTitle($sheet_name);//設置sheet工做表名稱 $objPHPExcel->setActiveSheetIndex(0);//設置表頭 header('Content-Type: application/vnd.ms-excel');//輸出頭信息 header('Content-Disposition: attachment;filename="'.$file_name.'.xls"');//設置xls文件名稱 header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//建立輸出 $objWriter->save('php://output');exit();//保存輸出到下載 } ?>
此方法用到字符串加加的形式 入A++變爲B Z++變爲AA的原理 須要深入理解字符串自增才行spa