PHPExcel: 可以在我的文件中下載phpexcel放到項目中用!!
1,Excel 導出:
/** * Excel導出例子 */ public function excel($res){ $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("XXX"); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setCellValue('A1', '門店名稱'); $objActSheet->setCellValue('B1', '門店UID'); $objActSheet->setCellValue('C1', '交易時間'); $objActSheet->setCellValue('D1', '應收金額'); $objActSheet->setCellValue('E1', '實收金額'); $objActSheet->setCellValue('F1', '支付筆數'); $objActSheet->setCellValue('G1', '取消筆數'); $objActSheet->setCellValue('H1', '應扣手續費'); $objActSheet->setCellValue('I1', '實扣手續費'); $objActSheet->setCellValue('J1', '紅包'); $objActSheet->setCellValue('K1', '結算金額'); $i = 2 ; $data = $res[0]; //數據 // $shop_list = $res[1]; $ymd = $res[2]; //時間 foreach($data as $k=>$rs){ $objActSheet->setCellValue('A'.$i, !empty($rs['shop_name'])?$rs['shop_name']:''); $objActSheet->setCellValue('B'.$i, $rs['shop_sub_id']); //交易時間 $objActSheet->setCellValue('C'.$i, $ymd); $objActSheet->setCellValue('D'.$i, !empty($rs['pay_price']) ? $rs['pay_price'] : 0); $objActSheet->setCellValue('E'.$i, !empty($rs['jiao']) ? $rs['jiao'] : 0); $objActSheet->setCellValue('F'.$i, !empty($rs['count_success']) ? $rs['count_success'] : 0); $objActSheet->setCellValue('G'.$i, !empty($rs['count_fail']) ? $rs['count_fail'] : 0); $objActSheet->setCellValue('H'.$i, !empty($rs['ought']) ? $rs['ought'] : 0); $objActSheet->setCellValue('I'.$i, !empty($rs['reality_poundage']) ? $rs['reality_poundage'] : 0); $objActSheet->setCellValue('J'.$i, !empty($rs['rebate']) ? $rs['rebate'] : 0); $objActSheet->setCellValue('K'.$i, !empty($rs['jie']) ? $rs['jie'] : 0); $i++; } $fname = 'order_'.time(); ob_end_clean();//清除緩沖區,避免亂碼 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$fname.'.xls"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); }
2, CSV導出:
$filename = 'csv_'. time(); $title="標題1,標題2,標題N"; $this->export($filename, $title); $this->csv($csv_res);
================ 下面是調用方法例子 =============================================================
/** * 導出csv文件 * @param 文件名 $filename * @param 數據 $data * @param 從數據中取指定字段 $fileds * @param 字段名 多個用逗號分割 $title * @param 數據量過大標記 $tooMuch */ public function export($filename, $title,$tooMuch=0){ $filename = @iconv('UTF-8','GBK',$filename.'.csv'); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=".$filename); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Expires:0'); header('Pragma:public'); echo @iconv('UTF-8', 'GBK//IGNORE', $title)."\r\n"; } /** * [csv 導出數據] * @param [type] $data [數據] * @return [type] [description] */ private function csv($data) { $regex = "/[ '.,:;*?~`!@#$%^&+_=<>{}]|\]|\[|\/|\\|\"|\|/"; if (!empty($data)) { foreach ($data as $key => $value) { $value['shop_name']=isset($value['shop_name'])?FuncHelper::escapeEmoji($value['shop_name']):'-'; $address=isset($value['address'])?$value['address']:'-';//門店地址 $shop_name=preg_replace($regex,"",$value['shop_name']); $board_total = isset($value['board_total']) ? $value['board_total']:"0"; $first_login_time = isset($value['first_login_time']) ? date('Y-m-d H:i:s',$value['first_login_time']):"-"; $goods_count = isset($value['goods_count']) ? $value['goods_count']:"0"; $pay_sum = isset($value['pay_sum']) ? $value['pay_sum']:"0"; echo '"'.@mb_convert_encoding($value['id'], 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($value['uid'], 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($shop_name, 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($address, 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($board_total, 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($first_login_time, 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($goods_count, 'GBK', 'UTF-8').'",'; echo '"'.@mb_convert_encoding($pay_sum, 'GBK', 'UTF-8').'",'; echo " \r\n"; } } }
另外,如果碰到導出的數字太大的話,表格會默認對數字進行科學計數,像“1.21E + ”這種的,解決方法:只需要在輸出的加上 “\t” 即可,例子如下:
echo '"'.@mb_convert_encoding($pay_sum, 'GBK', 'UTF-8'). "\t" . '",'; ## 輸出后面加上 \t
3, txt導出
只需要把上面CSV導出的 export方法改一句參數就可以 $filename = @mb_convert_encoding($filename . '.txt', 'GBK', 'UTF-8'); //.csv的文件名改為.txt // header("Content-type:application/vnd.ms-excel"); header('Content-Type: application/octet-stream'); //上面的改為這句