需要PHPExcel类文件
使用export_excel方法就可以了
$data = I('get.');
$result = D('Finance/FinanceMarketCustomerCostMonth','Logic')->getCostMonthList($data);
$expTitle = '成本月报'.$data['cost_month'];
$expCellName = array(
array('id', '游戏ID'),
array('name', '游戏名称'),
array('cost_money', '成本')
);
export_excel($expTitle, $expCellName, $result,false);
// 转换excel导出的文件名
function excel_filename_conv($filename){
$ua = $_SERVER["HTTP_USER_AGENT"];
// IE
if (preg_match("/(MSIE|Trident\/|Edge\/)/", $ua)) {
$temp = urlencode($filename);
$temp = str_replace("+", "%20", $temp);
return $temp;
}
return $filename;
}
/**
* 导出Excel文件
*
* @access public
* @param $expTitle string File name
* @param $expCellName array Column name
* @param $expTableData array Table data
* @param $isShowExportInfo boolean
* @return void
*/
function export_excel($expTitle, $expCellName, $expTableData, $isShowExportInfo = True)
{
// $xlsTitle = iconv('utf-8', 'gb2312', $expTitle); //文件名称
$fileName = $expTitle . date('_YmdHis'); //or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
vendor("Excel.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');
if ($cellNum == 0 || $dataNum == 0){
exit('没有数据需要导出!');
}
// 添加导出时间
$startCellNum = 1;
if ($isShowExportInfo){
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum-1] . '1');//合并单元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle . ' Export time:' . date('Y-m-d H:i:s'));
$startCellNum = 2;
}
for ($i=0; $i<$cellNum; $i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . $startCellNum, $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
$startCellNum++;
for($i = 0; $i < $dataNum; $i++){
for($j = 0; $j < $cellNum; $j++){
if (isset($expCellName[$j][2])){
$objPHPExcel->getActiveSheet(0)->setCellValueExplicit($cellName[$j] . ($i + $startCellNum), $expTableData[$i][$expCellName[$j][0]], $expCellName[$j][2]);
}else{
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + $startCellNum), $expTableData[$i][$expCellName[$j][0]]);
}
}
}
header('pragma:public');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . excel_filename_conv($fileName) . '.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
}
/**
* 保存Excel文件
*
* @access public
* @param $fileName string File name
* @param $expCellName array Column name
* @param $expTableData array Table data
* @return void
*/
function save_excel($fileName, $expCellName, $expTableData)
{
$cellNum = count($expCellName);
$dataNum = count($expTableData);
vendor("Excel.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');
if ($cellNum == 0 || $dataNum == 0){
return false;
}
for ($i=0; $i<$cellNum; $i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $expCellName[$i][1]);
}
for($i = 0; $i < $dataNum; $i++){
for($j = 0; $j < $cellNum; $j++){
if (isset($expCellName[$j][2])){
$objPHPExcel->getActiveSheet(0)->setCellValueExplicit($cellName[$j] . ($i + 2), $expTableData[$i][$expCellName[$j][0]], $expCellName[$j][1]);
}else{
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 2), $expTableData[$i][$expCellName[$j][0]]);
}
}
}
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
return $objWriter->save($fileName);
}