php 导出excel

需要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);
}

猜你喜欢

转载自blog.csdn.net/qq_34092577/article/details/80206419