web页面中导出Excel (方法八) 后端php导出Excel 使用 PHPExcel.php

使用 PHPExcel(兼容 PHP 5.2+)

优点

支持 .xls 和 .xlsx(需 PHPExcel 1.8+)

支持复杂格式(合并单元格、公式、样式)

缺点

需要额外引入 PHPExcel

大数据量可能较慢

使用方法

1.需要下载 PHPExcel 文件包  

2.解压后引入 Classes 目录

<?php
require_once 'PHPExcel/Classes/PHPExcel.php';

function exportExcel($fileName, $data) {
    $objPHPExcel = new PHPExcel();
    $sheet = $objPHPExcel->getActiveSheet();

    // 填充数据
    foreach ($data as $rowNum => $row) {
        foreach ($row as $colNum => $cellValue) {
            $sheet->setCellValueByColumnAndRow($colNum, $rowNum + 1, $cellValue);
        }
    }

    // 设置 HTTP 头
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . $fileName . '.xls"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;
}

// 示例数据
$data = [
    ["姓名", "年龄", "城市"],
    ["张三", 25, "北京"],
    ["李四", 30, "上海"],
];

// 导出 Excel
exportExcel("用户数据", $data);
?>

完整示例

js

function ToExcel(){var where="";
       var order="";
       var query=select_parameter();
       var url='Ajax-index.php?module=<{$module_name}>&action=Ajax_GridView_Select&assigned_user_id=<{$assigned_user_id}>&start_time=<{$start_date}>&stop_time=<{$stop_date}>';    
       /* 获取 条件 */
        $.ajax({
                  url: url,
                  type: "post",
                  data: query,
                  dataType: "json",
                  success: function (data) {
                      //alert(data.where); alert(data.order);
                      where=data.where;//将条件 传出
                      order=data.order;//排序
                      //alert(where);
                      if(where==""){
                            $.messager.alert('消息','没有要导出的数据,请点击查询,再试! ','info');
                            return;
                      }
                      location.href=encodeURI('modules/<{$module_name}>/ToExcel_PHPExcel.php?where='+where +"&order=" +order);
                  }
         });
}

ToExcel_PHPExcel.php

<?php
error_reporting(E_ALL^E_NOTICE);//Notice不显示 ^E_DEPRECATED

require_once('../../config.php'); 
require_once('../../Log/LogHelper2.php');
require_once('../../myClass/myDBHelper2.php'); 

require_once('../../PHPExcel-1.8.1/Classes/PHPExcel.php'); 
 
    $table_name='consult';  
    $arr_result = array(); //返回值  
    $where='';//查询条件  
    $order="";

    if(!empty($_GET['where'])){ 
        if($_GET['where']!=""){
            $where=$_GET['where'];
            if(!empty($_GET['order'])){//$_GET['order'] 存在则赋值 不存在则默认为""
                $order=$_GET['order'];
            }
        }else{
            $where=' 1=0 ';//查不到的数据    
        }
    }else{
        $where=' 1=0 ';//查不到的数据    
    }
    $where=stripslashes($where);
    $order=stripslashes($order);
    $col=" contact_name ,callerid,date_entered,type,contact_office ,description ,assigned_user_name"; // ,name
    $sql = "select {$col} from {$table_name} where deleted=0 ".$where .$order ;//." limit $offset,$rows ";  
    //WriteLog($sql);

    $row = array(); 
    $row[]="姓名";
    $row[]="电话号码";
    $row[]="创建时间";
    $row[]="咨询类型";
    $row[]="所属办事处";
    $row[]="描述";
    $row[]="负责人";
$items
= array(); array_push($items, $row); $result=$db->query($sql); while($row=$db->fetch_array($result)){ array_push($items, $row); //如果导出后 数据成对出现 是因为有数字索引和字段名两种形式 //手动创建纯关联数组 //$clean_row = array(); //foreach($row_order as $key => $value) { // if(!is_numeric($key)) { // 只保留非数字键 // $clean_row[$key] = $value; // } //} //array_push($items, $clean_row); } //Excel文件名 $date_now=date("YmdHis",strtotime("now")); $fileName="Book".$date_now ; exportExcel($fileName,$items); return; //PHPExcel function exportExcel($fileName, $data) { $objPHPExcel = new PHPExcel(); $sheet = $objPHPExcel->getActiveSheet(); // 填充数据 foreach ($data as $rowNum => $row) { foreach ($row as $colNum => $cellValue) { $sheet->setCellValueByColumnAndRow($colNum, $rowNum + 1, $cellValue); } } // 设置 HTTP 头 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $fileName . '.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; } ?>

 

posted @ 2025-04-04 15:32  海乐学习  阅读(86)  评论(0)    收藏  举报