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 = "\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报表的更多相关文章
- Ps—导出:sql作业配合ps导出csv文件
$dateText=Get-Date #获取当前日期时间 $dateText = $dateText.ToShortDateString() #转为短日期格式(去掉时间部分) $checkDate=( ...
- php导出csv
1.导出有很多种,他有自带包的导出,但是如果你要导出7,8千的数据的话就有点困难,我最近发现一个导出可以到出1万的数据,好像只能导出csv格式的. public function down_load( ...
- JSON导出CSV中文乱码解决方案
前言 以往datagrid导出数据全部在后台搞定,现在就想换中思路去解决,正常情况下使用easyui datagrid ajax获取数据源时都是json格式,那么此时需要导出数据时只要把该数据源扔出来 ...
- 导出csv文件示例
导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...
- 从数据库中导出excel报表
通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Cl ...
- php使用ajax导出CSV或者EXCEl(thinkphp)方法
首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点 ...
- Web端导出CSV
前端导出文件大部分还是通过服务器端的方式生成文件,然后传递到客户端.但很多情况下当我们导出CSV时并不需要后端参与,甚至没有后端. 做过WebGIS的同学经常会碰到这种场景,用户的兴趣点数据以csv文 ...
- 解决PHP下导出csv乱码小记
我们之前都是使用PHPexcel导出我们的一些数据的,由于Phpexcel对导出超出1万条数据会导至超时和内存暴涨,后来我们就改用数据导出成csv格式的. 相信很多朋友们在用PHP导出csv文件时都遇 ...
- C#导出csv文件 支持中文的解决方案
#region 导出CSV下载 string exportFileName = "Export" + DateTime.Now.ToString("yyyyMMddHHm ...
随机推荐
- Lucene第一篇【介绍Lucene、快速入门】
什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引 ...
- Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率
Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率 2017-09-21 目录 1 Jacoco的安装和设置 1.1 什么是Jacoco? 1.2 Jacoco安装 1.3 ...
- Ansible系列(六):循环和条件判断
本文目录:1. 循环 1.1 with_items迭代列表 1.2 with_dict迭代字典项 1.3 with_fileglob迭代文件 1.4 with_lines迭代行 1.5 with_ne ...
- UEditor1.4.3.3整合Spring MVC和七牛
[前言] 项目中涉及将UEditor上传服务器整合进已有的基于Spring MVC的服务中,并且将上传到本地改为上传到七牛,看似简单的一个需求,实际做起来还是遇到了一些困难.在这里分享一下经验-- 七 ...
- STM32F103X 开发环境搭建
背景 芯片:STM32F103C8T6核心板 开发平台:IAR 安装IAR 官方下载地址:https://www.iar.com/iar-embedded-workbench/#!?device=ST ...
- java GUI编程二
java基础学习总结--GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import j ...
- java 对象转型
一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...
- [js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)
之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形). arcTo: cxt.arcTo( cx, cy, x2, y2, ...
- 1.Bootstrap-简介
1.介绍 Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 2.HTML 模板 一个使用了 Boots ...
- Java并发/多线程系列——线程安全篇(1)
创建和启动Java线程 Java线程是个对象,和其他任何的Java对象一样.线程是类的实例java.lang.Thread,或该类的子类的实例.除了对象之外,java线程还可以执行代码. 创建和启动线 ...