zoukankan      html  css  js  c++  java
  • php导出csv报表

    最近系统有一个导出报表功能,之前是导出的.xsl报表,但是当导出数据达到十万条时,导出经常出现超时与导出数据不全的情况,原因是导出.xsl报表会进行HTML渲染,在这步就会卡死。所以改成了导出.csv表格。.csv表格所有数据相当于是一个字符串,字符串之间用逗号分隔开。这样就减少了文件大小,同时减少了渲染过程,可大幅提升性能,用于大数据导出,下面贴出相应代码

    <?php
    
    $tableheader = array('项目编号', '项目ID', '原始债权编号', '项目名称', '借款人','产品类型','合同开始时间','合同结束时间','放款时间',
        '项目金额','服务费','已扣服务费','还本付息方式','付息总期数','第几期',
        '应付息时间','应付息金额','应付本金额','管理费','逾期付息时间',
        '逾期违约金','应还总额','已还款','当前状态','还款渠道','交易金额','还款用途','交易时间');
    $tablelength = count($tableheader);
    /*表格数据*/
    $data=array();
    $rawData =$model->search()->rawData;
    for ( $i =0; $i < count($rawData,0); $i ++ ) {
        $item=$rawData[$i];
        $item['projectId']=preg_replace("/(,)/"," ",$item['projectId']);
        $data[$i]=array($item['orderNo'],$item['projectId'],$item['debtNo'],$item['title'], $item['debitName'],
            $item['projectTypeName'],$item['startTime'],$item['endTime'],$item['loanTime'],
            $item['borrowAmount'],$item['serviceCost'],$item['rcvedServiceCost'],$item['repayTypeName'],$item['totalPeriods'],$item['periods'],
            $item['planTime'],$item['interest'],$item['principal'],$item['manageAmount'],$item['breachTime'],
            $item['breachAmount'],$item['totalAmount'],$item['hasRepay'],$item['statusName'],$item['rechargePlatName'],$item['rechargeAmount'],$item['purposeName'],$item['rechargeTime']);
    
    }
    /*输入到CSV文件 解决乱码问题*/
    $html = "xEFxBBxBF";
    
    /*输出表头*/
    foreach ($tableheader as $value) {
        $html.= $value."	,";
    }
    $html.= "
    ";
    
    /*输出内容*/
    foreach ($data as $value) {
        for ($i = 0; $i < $tablelength; $i++) {
            $html.= $value[$i].",";
        }
        $html.= $value['createtime'].",";
        $html.= "
    ";
    }
    //echo implode('#',$data[0])
    /*输出CSV文件*/
    header("Content-type:text/csv");
    header ( "Content-Disposition:filename=还本付息报表-".date('Y-m-d').".csv" );
    echo $html;
    exit();
    ?>
    

      备注:1.在输出内容的代码里$html.= $value[$i].",";使用","分割数据,之前我用的分割代码是$html.= $value[$i]."/t,";,这样多了"/t",也就是说每个单元格之间会多一个tab,这回导致导出的数据都会是字符串,也就是说导出的表格无法进行公式运算,因为像112这样的数字会在运算时变成“112”。想要解决的话把分割的代码变成$html.= $value[$i].",";就可以了。

    2.在构建表格数组时,有的字段位“112,113”这样的,因为中间会有一个逗号,在生成的数组里会变成两个数据,数组长度加一,所以我包这样的数据里的“,”替换成“ ”。

  • 相关阅读:
    网络协议
    面向对象三大特性之多态
    面向对象三大特性之封装
    面向对象三大特性之继承
    python面向对象编程
    常用模块之configpaser与shutil
    XML模块
    Python模块之OS,subprocess
    Python日志(logging)模块,shelve,sys模块
    Linux 配置 Nginx
  • 原文地址:https://www.cnblogs.com/liyuanqing/p/7756089.html
Copyright © 2011-2022 走看看