PHP匯出excel的方法總結
阿新 • • 發佈:2019-01-14
PHP匯出excel的方法總結
1.兩個步驟定義匯出方法和內容
public function exportExcel($expTitle,$expCellName,$expTableData,$starttime,$endtime){ // $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//檔名稱 $fileName = '收銀彙總查詢'.date('_YmdHis');//or $xlsTitle 檔名稱可根據自己情況設定$_SESSION['username'] $cellNum = count($expCellName);//計算cell數量 $dataNum = count($expTableData); vendor("PHPExcel.PHPExcel"); $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', '表'.$expTitle.' 匯出時間:'.date('Y-m-d H:i:s').' 起止時間'.date('Y-m-d H:i:sa',$starttime).'至'.date('Y-m-d H:i:sa',$endtime)); 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]].' ');//如果匯出訂單號、身份證號等,可能會因為數字太長,匯出的excel會顯示科學技術方式顯示,可以加空格' '來避免 } } header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新視窗列印inline本視窗列印 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; }
定義傳參呼叫方法
public function excel(){ $starttimestamp = strtotime($_POST['starttimestamp']);//字串轉時間戳 $endtimestamp = strtotime($_POST['endtimestamp']); //我們必須先確定收銀的角色然後,用收銀員的角色查詢當日值班人員的所有人員,然後通過人員分別查詢個人的收銀資料 $finance = M('Role')->where("roleuname = 'Finance'")->find(); $where['roleid'] = $finance['id']; $adminusers = M('Adminuser')->where($where)->select();//二位陣列獲取角色id,uname,name $arrview = array(); $amountcount; if($adminusers){ for ($i=0; $i < count($adminusers); $i++) { $where['send_account_name'] = $adminusers[$i]['name']; $where['send_account_id'] = $adminusers[$i]['id']; $res = M('order')->where("send_time>$starttimestamp AND send_time<$endtimestamp")->where($where)->field('amount')->select(); for ($y=0; $y < count($res); $y++) { $sum = $sum+$res[$y]['amount']; }//計算合計 $arritem['rownum'] = $i; $arritem['financetype'] = "微信"; $arritem['send_account_name']=$adminusers[$i]['name'];//收銀賬號 $arritem['financeuname'] =$adminusers[$i]['uname'];//收銀員姓名 $arritem['eqrmb'] =number_format($sum,2,".","");//收銀人員合計金額 $arritem['zerormb'] =number_format($sum,2,".","");//折換RMB $arritem['noterror'] =number_format("0",2,".","");//RMB找零 $arritem['actualacmount'] =number_format("0",2,".","");//誤差 $arritem['denomination'] =number_format($sum,2,".","");//實收虛收 $arritem['actualreceipt'] =number_format("0",2,".","");//面額差 $arritem['actualrmb'] =number_format($sum,2,".","");//實收金額 $arritem['virtualreceipt'] =number_format("0",2,".","");//虛收金額 $arrview[$i] = $arritem; $amountcount = $amountcount+$sum; } } //追加合計陣列 $amountcounted = number_format($amountcount,'2','.',''); $zerormb = number_format('0','2','.',''); $pusharray['rownum'] = '合計'; $pusharray['financetype'] = ""; $pusharray['send_account_name']="";//收銀賬號 $pusharray['financeuname'] ="";//收銀員姓名 $pusharray['eqrmb'] =$amountcounted;//收銀人員合計金額 $pusharray['zerormb'] =$amountcounted;//折換RMB $pusharray['noterror'] =$zerormb;//RMB找零 $pusharray['actualacmount'] =$zerormb;//誤差 $pusharray['denomination'] =$amountcounted;//實收虛收 $pusharray['actualreceipt'] =$zerormb;//面額差 $pusharray['actualrmb'] =$amountcounted;//實收金額 $pusharray['virtualreceipt'] =$zerormb;//虛收金額 // dump($pusharray); $arrview[count($arrview)]=$pusharray; // $this->assign('restarttimestamp',$_POST['starttimestamp']); // $this->assign('reendtimestamp',$_POST['endtimestamp']); //$months = I('get.months'); //$month_start = strtotime($months);//獲取指定月份月初時間戳 //$month_end = mktime(23, 59, 59, date('m', strtotime($months))+1, 00);//指定月份月末時間戳 //$where['type'] = 2;//群主充值 //$where['time'] = array(array('gt',$month_start),array('lt',$month_end)); //$m = M('dap_stream'); // $list = $m->where($where)->field('id,stream_id,time,player_id,stream_money')->select(); $xlsName = "Order"; $xlsCell = array( array('rownum','行號'), array('financetype','收款方式'), array('send_account_name','收銀賬號'), array('financeuname','收銀員'), array('eqrmb','收銀總額'), array('zerormb','折換RMB'), array('noterror','RMB找零'), array('actualacmount','誤差'), array('denomination','實收虛收'), array('actualreceipt','面額差'), array('actualrmb','實收金額'), array('virtualreceipt',"虛收金額"), ); // $xlsData = $m->where($where)->field("id,stream_id, FROM_UNIXTIME(time, '%Y-%m-%d %H:%i:%S') time,player_id,stream_money")->select(); // $xlsData = array(); //這裡需要計算型別 $xlsData = $arrview; // dump($xlsData);exit(); $this->exportExcel($xlsName,$xlsCell,$xlsData,$starttimestamp,$endtimestamp); }