最近系统有一个导出报表功能,之前是导出的.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 = "\xEF\xBB\xBF"; /*输出表头*/
foreach ($tableheader as $value) {
$html.= $value."\t,";
}
$html.= "\n"; /*输出内容*/
foreach ($data as $value) {
for ($i = 0; $i < $tablelength; $i++) {
$html.= $value[$i].",";
}
$html.= $value['createtime'].",";
$html.= "\n";
}
//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”这样的,因为中间会有一个逗号,在生成的数组里会变成两个数据,数组长度加一,所以我包这样的数据里的“,”替换成“ ”。

php导出csv报表的更多相关文章

  1. Ps—导出:sql作业配合ps导出csv文件

    $dateText=Get-Date #获取当前日期时间 $dateText = $dateText.ToShortDateString() #转为短日期格式(去掉时间部分) $checkDate=( ...

  2. php导出csv

    1.导出有很多种,他有自带包的导出,但是如果你要导出7,8千的数据的话就有点困难,我最近发现一个导出可以到出1万的数据,好像只能导出csv格式的. public function down_load( ...

  3. JSON导出CSV中文乱码解决方案

    前言 以往datagrid导出数据全部在后台搞定,现在就想换中思路去解决,正常情况下使用easyui datagrid ajax获取数据源时都是json格式,那么此时需要导出数据时只要把该数据源扔出来 ...

  4. 导出csv文件示例

    导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...

  5. 从数据库中导出excel报表

    通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Cl ...

  6. php使用ajax导出CSV或者EXCEl(thinkphp)方法

    首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点 ...

  7. Web端导出CSV

    前端导出文件大部分还是通过服务器端的方式生成文件,然后传递到客户端.但很多情况下当我们导出CSV时并不需要后端参与,甚至没有后端. 做过WebGIS的同学经常会碰到这种场景,用户的兴趣点数据以csv文 ...

  8. 解决PHP下导出csv乱码小记

    我们之前都是使用PHPexcel导出我们的一些数据的,由于Phpexcel对导出超出1万条数据会导至超时和内存暴涨,后来我们就改用数据导出成csv格式的. 相信很多朋友们在用PHP导出csv文件时都遇 ...

  9. C#导出csv文件 支持中文的解决方案

    #region 导出CSV下载 string exportFileName = "Export" + DateTime.Now.ToString("yyyyMMddHHm ...

随机推荐

  1. python之socket--粘包补充

    struct补充 import struct import json header_dic={'total_size':123123, 'filename':None, 'md5':None} hea ...

  2. OSGi-简介(01)

    OSGi是什么? OSGi联盟现在将OSGi定义为一种技术: OSGi技术是指一系列用于定义Java动态化组件系统的标准.这些标准通过为大型分布式系统以及嵌入式系统提供一种模块化架构减少了软件的复杂度 ...

  3. mysql数据库-中文乱码问题解决方案

    来自:http://www.2cto.com/database/201108/101151.html MySQL会出现中文乱码的原因不外乎下列几点: .server本身设定问题,例如还停留在latin ...

  4. Centos7搭建kubernetes搭建

    安装前的准备工作: Kubernetes包提供了一些服务:kube-apiserver,kube-scheduler,kube-controller-manager,kubelet,kube-prox ...

  5. hadoop各个类及其作用

    1.基础包(包括工具包和安全包) 包括工具和安全包.其中,hdfs.util包含了一些HDFS实现需要的辅助数据结构:hdfs.security.token.block和hdfs.security.t ...

  6. HTML 4.01+5基礎知識

    HTML 4.01+5 1.Html結構:html>head+body 2.Html快捷鍵:!加Tab(在sublime中) 3.雙標籤: ①常用標籤 h1.h2.h3.h4.h5.h6 p.c ...

  7. day16<集合框架+>

    集合框架(去除ArrayList中重复字符串元素方式) 集合框架(去除ArrayList中重复自定义对象元素) 集合框架(LinkedList的特有功能) 集合框架(栈和队列数据结构) 集合框架(用L ...

  8. 【设计模式】module模式&&Revealing module (揭示)模式

    写在前面 <head first设计模式>里有一篇文章,是说使用模式的心智, 1.初学者"心智" :"我要为HELLO WORLD找个模式" 2.中 ...

  9. Python操作csv文件

    1.什么是csv文件 The so-called CSV (Comma Separated Values) format is the most common import and export fo ...

  10. bzoj4033(树上染色)

    树上染色 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两 ...