首页 > 编程语言 >web页面中导出Excel 方法一 后端php导出Excel

web页面中导出Excel 方法一 后端php导出Excel

时间:2023-06-14 11:48:12浏览次数:43  
标签:web Excel 导出 agent time var php

这个示例使用  前端 easyui-datagrid  后端php 

其中前端是不是 easyui-datagrid 不重要,这个方法主要是使用后端 php 来实现导出Excel

优点:现在的应用中大部分是分页显示的,在前台只显示一部分,但导出Excel是要看全部的。所以此时用前端js导出则不太好实现。

缺点:当查询数据量较大或较慢时,不建议用此方法,毕竟http请求会超时。如果导出超几万行,则用winform开发导出程序比较好。

界面

html

<table id='grid'class='easyui-datagrid' style='width:1250px;min-height:450px'  
            title='列表' iconCls='icon-table' pagination='true' rownumbers='true' fitColumns='true' singleSelect='true' toolbar='#toolbar' >   
        <thead>  
            <tr>  
                <th field='agent_name' width='25'align='center' sortable='true' >工号</th> 
                <th field='user_name' width='25'align='center' sortable='true' >坐席员</th> 
                <th field='login_time' width='30'align='center' sortable='true' >登陆时间</th>
                <th field='logout_time' width='30'align='center' sortable='true' >登出时间</th>
                <th field='time_len' width='30'align='center' sortable='true' >在线时长</th>  
                <th field='time_len_s' width='30'align='center' sortable='true' >在线时长(秒)</th> 
                <th field='description' width='30'align='center' sortable='true' >描述</th> 
            </tr>  
        </thead>  
</table>  
<div id='toolbar' style='display: flex;align-items:Center; height:35px;' > 
        <a href='javascript:void(0)' class='easyui-linkbutton' iconCls='icon-excel' plain='true' onclick='ToExcel()' <{$ToExcel_disabled}> >导出</a> 
        <div class="btn-separator"></div>
        <a href='#' class='easyui-linkbutton' iconCls='icon-refresh' plain='true' onclick='Refresh()'>刷新</a> 
        <a href='#' class='easyui-linkbutton'  iconCls='icon-cancel' plain='true' onclick='parent.TabClose();'>关闭</a>   
</div>   

js

实现原理:第一次请求是与查询按钮请求的php文件是一个,通过get来判断,目的是为了与查询得到的结果一致,导出调用只需得到条件和排序

function ToExcel(){
        var query=SelectParameter();
        var url='Api-index.php?module=<{$module_name}>&action=Api_ReportView_Agent_Login_List_Select&target=ToExcel<{$get_current_user}>' ;    
        /* 获取 条件 */
        $.ajax({
            url: url,
            type: "post",
            data: query,
            dataType: "json",
            success: function (data) { //alert(data.where); alert(data.total);
                var where=data.where;//将条件 传出
                var order_by=data.order_by;//排序
                //alert(where);      
                if(where==""){
                    //$.messager.alert('消息','导出时的发生异常,请刷新后,再试! ','info');
                    layer.alert('导出时的发生异常,请刷新后,再试!', { title:"消息",icon: 2, skin: 'layui-layer-molv',closeBtn: 0   } );
                    return;
                }
                location.href=encodeURI('modules/<{$module_name}>/ReportView_Agent_Login_List_ToExcel.php?where='+where +"&order_by=" +order_by);
            }
         }); 
    }

    //获取 查询 条件 参数
    function SelectParameter(){
        var agent_name=$('#select_agent_name').combobox('getValue');
        var start_time=$('#start_date_entered').val();   
        var stop_time=$('#stop_date_entered').val();
        var query={'agent_name':agent_name,'start_time':start_time,'stop_time':stop_time   };
        return query;
    }
//查询按钮
function Select(){ var query=SelectParameter(); var url='Api-index.php?module=<{$module_name}>&action=Api_ReportView_Agent_Login_List_Select'; $('#grid').datagrid('options').url=url; $('#grid').datagrid('options').queryParams=query; $('#grid').datagrid('reload'); }

php

查询页    Api_ReportView_Agent_Login_List_Select.php

<?php 
//-----------------------------------------------查询------------------------------------
    $arr_result = array(); //返回值  
    $where='';//查询条件  
    
    if(!empty($_POST['start_time'])){
        $start_time=$_POST['start_time'];    
        $stop_time=$_POST['stop_time'];    
    }
    else{
        //当天
        $start_time=date("Y-m-d 0:0:0",strtotime("now"));
        $stop_time=date("Y-m-d 23:59:59",strtotime("now"));    
    }    
    //$where=" date_time >='{$start_time}' and date_time <='{$stop_time}' ";  
    $where=" login_time >='{$start_time}' and login_time <='{$stop_time}' ";  
    //坐席
    if($_REQUEST['agent_name']!='' && $_REQUEST['agent_name']!='0'){  // 
        $where .=" and cti_agent_login.agent_name = '{$_REQUEST['agent_name']}' ";  
    } 
    //结果集      
    $items = array(); 

    //整合条件
    $where= " " . $where;
    $order_by=" ORDER BY login_date asc"; //条件

    //导出 或 打印
    if($_GET['target']=="ToExcel" || $_GET['target']=="Print" ){
            $arr_result['where'] = $where;      //将条件 传出
            $arr_result['order_by'] = $order_by;      //将条件 传出
  
            echo json_encode($arr_result); //将条件 传出
            exit(0);
    }

    //分页
    $page = isset($_POST['page']) ? intval($_POST['page']) : 1;   
    $rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10;   
    $offset = ($page-1)* $rows;   
    
    $sql ="SELECT COUNT(cti_agent_login.id) AS total FROM cti_agent_login join user on cti_agent_login.agent_name=user.user_id where  " . $where ;   
    //WriteLog($sql);  
    $arr_result['total'] =$db->query_count($sql);//查询 总条数

    $sql="SELECT cti_agent_login.agent_name , user.user_name as user_name,login_date,login_time,logout_time,time_len,time_len_s,cti_agent_login.description  FROM ";
    $sql.=" cti_agent_login join user on cti_agent_login.agent_name=user.user_id where ";
    $sql.=" " .$where .$order_by  ."   limit $offset,$rows ";   

    $result_rows=$db->query($sql); 
    $row_count=$db->num_rows($result_rows);//行数

    while($row=$db->fetch_array($result_rows))  
    {      
        array_push($items, $row);        
    }
    $arr_result['rows'] = $items;       

    echo json_encode($arr_result);   

?>   

导出Excel页    ReportView_Agent_Login_List_ToExcel.php

实现原理:通过查询页得到的查询条件(当然也可以不这么做,在此页写也可以,这么做的目的是为了和查询保持一致)

                 在此页 整合查询SQL语句,访问数据库,得到结果集,用php嵌套for循环的方式像写文件方式写出Excel。所以当数据量较大时会慢,容易造成http请求超时。

<?php
error_reporting(E_ALL^E_NOTICE);//Notice不显示 ^E_DEPRECATED
set_time_limit(0);//不设 php 超时限制

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

$arr_result = array(); //返回值  
$where='';//查询条件  
$order="";

    if(!empty($_GET['where'])){ 
        if($_GET['where']!=""){
            $where=$_GET['where'];
            if(!empty($_GET['order_by'])){//$_GET['order_by'] 存在则赋值 不存在则默认为""
                $order_by=$_GET['order_by'];
            }else{
                $order_by="";
            }
        }else{
            $where=' 1=0 ';//查不到的数据    
        }
    }else{
        $where=' 1=0 ';//查不到的数据    
    }
    $where=stripslashes($where);
    $order_by=stripslashes($order_by);
 
    //$col=" name,date_entered, callerid , other_tel,call_type,contact_province,contact_city ";
    //$col.=" ,contact_office,address,description,created_user_name,contact_source,remark  ";
    //$sql = "select {$col} from {$table_name} where ".$where .$order_by ;//." limit $offset,$rows ";  

    $sql="SELECT cti_agent_login.agent_name , user.user_name as user_name,login_time,logout_time,time_len,time_len_s,cti_agent_login.description  FROM ";
    $sql.=" cti_agent_login join user on cti_agent_login.agent_name=user.user_id where ";
    $sql.=" " .$where .$order_by;
  
    $row = array(); 
    $row[]="坐席工号";
    $row[]="坐席员";
    $row[]="登陆时间";
    $row[]="登出时间";

    $row[]="在线时长";
    $row[]="在线时长(秒)";
    $row[]="描述";

    $items = array(); 
    array_push($items, $row);
    
    $result=$db->query($sql); 
    while($row1=$db->fetch_array($result)){   
        array_push($items, $row1);  
         
        /*
        for ($i = 0; $i < sizeof($row1); $i++) {  
            WriteLog( $row1[$i] . "1" . "<br>"); 
        } */ 
  
        //$str1=$row1[0].$row1[1].$row1[2].$row1[3];
        //WriteLog($str1);
    } 

  //Excel文件名
  $date_now=date("YmdHis",strtotime("now"));
  $filename="Book".$date_now.".xls";
  
  createExcelFile($fileName,$items);
  return;


  //创建Excel
  function createExcelFile($fileName,$excelData){
      header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
      header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); 
      header ("Cache-Control: no-cache, must-revalidate"); 
      header ("Pragma: no-cache"); 
      header ('Content-type: application/x-msexcel');  
      header ("Content-Disposition: attachment; filename=Book".$date_now.".xls" ); 
      header ("Content-Description: PHP/INTERBASE Generated Data" ); 
      
      xlsBOF(); // Excel 
      
      for ($row = 0; $row < sizeof($excelData); $row++) {  

        for ($col = 0; $col < sizeof($excelData[$row]); $col++) {  
             
            $value=iconv("UTF-8", "GBK//IGNORE", $excelData[$row][$col]);
            xlsWriteLabel($row,$col,$value); 
        }
      }
      xlsEOF(); // Excel  
      exit();    
  }

  /////////////////////////////////////////////////////////////////////
  //   
  function xlsBOF() { 
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); 
    return; 
  } 
  // Excel end of file footer 
  function xlsEOF() { 
    echo pack("ss", 0x0A, 0x00); 
   return; 
  } 
  // Function to write a Number (double) into Row, Col 
  function xlsWriteNumber($Row, $Col, $Value) { 
    echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); 
    echo pack("d", $Value); 
    return; 
  } 
  // Function to write a label (text) into Row, Col 
  function xlsWriteLabel($Row, $Col, $Value ) { 
    $L = strlen($Value); 
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); 
    echo $Value; 
    return; 
  }


?> 

 

标签:web,Excel,导出,agent,time,var,php
From: https://www.cnblogs.com/hailexuexi/p/17479738.html

相关文章

  • Web.Config中customErrors的使用方法(mode=On|Off|RemoteOnly)
    https://cloud.tencent.com/developer/article/21038021)customErrors中的mode“On”始终显示自定义(友好的)信息。“Off”始终显示详细的ASP.NET错误信息。“RemoteOnly”只对不在本地Web服务器上运行的2)customErrors中的defaultRedirect使之指向自定义错误页的URL......
  • 经典webshell流量特征
    开门见山,不说废话判断条件是否符合通信的特征请求加密的数据和响应包加密的类型一致是否一直向同一个url路径发送大量符合特征的请求,并且具有同样加密的响应包一、蚁剑特征为带有以下的特殊字段第一个:@ini_set("display_errors","0");第二个:eval在编码器和解码器都是d......
  • VUE+WebPack游戏设计:'乘法防线'游戏设计
    从本节开始,我们进入新的游戏设计阶段。本次游戏设计,我们需要使用html5专有的canvas,也就是画布对象。同时为了便于在canvas上绘制图案,我们引入一个第三方库叫做CreateJS,它能帮我们管理在canvas上绘制的各种图形。乘法防线的游戏目的是为了帮助小学生学习乘法运算法则。游戏的主要内......
  • jexcel_删除行并同步数据库
    写在*.aspx中1//删除行OK2varmyDeleteRow=function(){3varDBID=document.getElementById("my_textbox").value;4//vartempConfirm=confirm("DBID为:"+DBID);//弹出确认框5vartempConfirm=confir......
  • jexcel_增加行并同步数据库
    写在*.aspx中1//增加行OK2varaddRow=function(){3varfieldName="type";//字段名4varmodifyValue="请输入";//值5//vartempConfirm=confirm("modifyValue:"+modifyValue+"......
  • jexcel_最简单的框架
    1. 固定数据的jexcel框架<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="test.aspx.cs"Inherits="web_page_ssc_test"%><!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"><......
  • 案例4 基于Excel的接口测试框架
    简单版读取以下格式excel(仅第一张Sheet),逐个发送接口,断言接口返回200,并将状态及错误信息写回Excel已知:Excel中接口编写格式规范如下url如果有查询参数,要写到url中,例如?a=1&b=2如果需要添加自定义请求头按key:value格式编写,:左右允许有空格,每行一个请求数据支持表单和JSO......
  • weblogic学习笔记
    前言工作原因,在weblogic上部署了一个很重要的服务。虽然部署成功了,但是对该weblogic还不是很了解。市面上中文资料少之又少,而且讲解的weblogic版本已经很老旧,对新人不是很友好。借着这个机会,打算系统学习下weblogic,也将学习的内容与大家进行分享。本文章weblogic版本为12.2.1.4......
  • windows使用navicate 导出导入MongoDB数据
    1.下载安装navicate以及mongodb-database-tools-windowsmongodb-database-tools-windows下载地址 https://www.mongodb.com/try/download/database-tools 2.navicate设置MongoDBdump、mongorestore可执行文件路径(mongodb-database-tools里的bin目录)3.选择要备份或恢复......
  • webSocket和Socke
    一、webSocket和Socket的概念介绍1、socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。2、WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,是一种让客户端和......