注意事項:1.phpexcel將數據導出到表格 實際上就是下載 前端只能用頁面跳轉不能用ajax請求
2.可以用href/open/模擬表單(做一個隱藏的form胰舆,把數據放入到input中submit事件提交靠娱,以下會介紹)
1.下載phpexcel
2.將文件夾放入TP核心文件的 Library->Vendor下面
3.TP里導入PHPExcel? ? Vendor('PHPExcel.PHPExcel');
注意事項:1.new對象的時候都要加上'\'
4.先把要導出的數據準備好(二維數組)
//導出表格
$objExcel = new \PHPExcel();
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
// 設置水平垂直居中
$objExcel->getActiveSheet()->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objExcel->getActiveSheet()->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
// 字體和樣式
$objExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
$objExcel->getActiveSheet()->getStyle('A2:D2')->getFont()->setBold(true);
$objExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
// 第一行抛杨、第二行的默認高度
$objExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);
$objExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);
//設置某一列的寬度
$objExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
//設置表頭
//? 合并
$objExcel->getActiveSheet()->mergeCells('A1:H1');
$objActSheet = $objExcel->getActiveSheet(0);
$objActSheet->setTitle('場所信息');//設置excel的標題
//注意事項:列是從A B C........ 行就是1 2 3 4 ....
A1就是A列第一行的意思 剩下的同理
$objActSheet->setCellValue('A1','設備信息');
$objActSheet->setCellValue('A2','場所名稱');
$objActSheet->setCellValue('B2','設備Mac');
$objActSheet->setCellValue('C2','設備地址');
$objActSheet->setCellValue('D2','樓層');
$objActSheet->setCellValue('E2','最新認證時間');
$objActSheet->setCellValue('F2','心跳時間');
$objActSheet->setCellValue('G2','服務狀態(tài)');
$objActSheet->setCellValue('H2','數據狀態(tài)');
$objActSheet->setCellValue('I2','心跳狀態(tài)');
// //3遣钳、填入數據$driver就是要導出的二維數組
$count = count($driver);
//$driver 為數據庫表取出的數據
注意事項:
1.for括號里$i等于多取決于你要從第幾行循環(huán)數據(也就是你表頭有幾行)
for ($i = 3;$i <= $count+1; $i++){
? $objExcel->getActiveSheet()->setCellValue('A'.$i,$driver[$i-3]['PLACE_NAME']);
? $objExcel->getActiveSheet()->setCellValue('B'.$i,$driver[$i-3]['COLLECTION_EQUIPMENT_MAC']);
? $objExcel->getActiveSheet()->setCellValue('C'.$i,$driver[$i-3]['COLLECTION_EQUIPMENT_ADRESS']);
? $objExcel->getActiveSheet()->setCellValue('D'.$i,$driver[$i-3]['FLOOR']);
? $objExcel->getActiveSheet()->setCellValue('E'.$i,$driver[$i-3]['AUTH_LASTTIME_txt']);
? $objExcel->getActiveSheet()->setCellValue('F'.$i,$driver[$i-3]['Heartbeat_TIME_txt']);
? $objExcel->getActiveSheet()->setCellValue('G'.$i,$driver[$i-3]['service_status_txt']);
? $objExcel->getActiveSheet()->setCellValue('H'.$i,$driver[$i-3]['online']);
? $objExcel->getActiveSheet()->setCellValue('I'.$i,$driver[$i-3]['Heartbeat_status']);
}
//也可以用foreach可能更好 ?如下:
//也可以這樣寫 更好
$baseRow = 3; //數據從N-1行開始往下輸出 這里是避免頭信息被覆蓋
foreach ( $driver as $r => $d ) {
? ? ? $i = $baseRow + $r;
? ? ? $objExcel->getActiveSheet()->setCellValue('A'.$i,$d['PLACE_NAME']);
? ? ? $objExcel->getActiveSheet()->setCellValue('B'.$i,$d['ap_num']);
? ? ? $objExcel->getActiveSheet()->setCellValue('C'.$i,$d['AREA_CODE_txt']);
? ? ? $objExcel->getActiveSheet()->setCellValue('D'.$i,$d['SITE_ADDRESS']);
? ? ? $objExcel->getActiveSheet()->setCellValue('E'.$i,$d['NETSITE_TYPE_txt']);
? ? ? $objExcel->getActiveSheet()->setCellValue('F'.$i,$d['SECURITY_SOFTWARE_ORGCODE_txt']);
? ? ? $objExcel->getActiveSheet()->setCellValue('G'.$i,$d['service_status_txt']);
? ? ? $objExcel->getActiveSheet()->setCellValue('H'.$i,$d['online']);
}
$objExcel->setActiveSheetIndex(0);
//4、輸出
$objExcel->setActiveSheetIndex();
header('Content-Type: applicationnd.ms-excel');
//filename后面跟的就是要保存的文件名 ?
//如果文件名是中文要轉換編碼$filename=iconv('utf-8',"gb2312",$filename);//轉換名稱編碼傅物,防止亂碼
header('Content-Disposition: attachment;filename="device.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');