首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右

首先我先介绍csv文件的导出的方法:

如果你单纯是在数据导出界面上通过用户点击生成csv或者excel按钮通过服务器往浏览器输出excel或者csv 如果数据量小的化可以使用这样的方法(这种方法无法使用ajax)网上百度一下一堆介绍

这里有较为详细的方法介绍 和源码

我这里介绍的是 当数据量比较大时比如生成excel或者csv文件可能需要 几分钟这时候我们需要在用户点击生成按钮后先生成一个loading框阻止用户随意乱点 将excel或者 csv文件先导出到

服务器端后然后通过ajax方法返回给浏览器一个下载地址用户点击下载地址后下载文件

1.导出csv的话非常简单

核心生成代码:

//这里传入的$data为二维数组

//即为$data = ( array ,array,array)

function create_csv($data,$filename='simple.xls')

{

ini_set('max_execution_time', '0');

//这里的CSV即你项目的根目录下新建一个CSV文件夹

$path = ('CSV/'.iconv('UTF-8','gb2312',$filename));

$fp = fopen($path, 'w');

foreach( $data as $k => $v)

{

foreach ($v as $key => &$value)

{

//将数据值进行在编码 避免中文乱码问题

$value = iconv('UTF-8','gb2312',$value);

}

fputcsv($fp, $v);
}

fclose($fp);

$result = array(
'status' => 1,
'path' =>'CSV/'.$filename
);

return $result;

exit;

}

后台调用代码:

public function generate()

{

//这里data需要处理为二维数据及最终为 $data = (array,array,array)这样

$data = array();

$excel_title =array(
"_id" ,
"bo_subject", );

array_push($data,$excel_title);

...处理真实数据并将其push入$data中

$result = create_csv($data,$filename);

$this->ajaxReturn($result);

}

前台通过jquery进行post:建议先去学习一下layer这个弹出层组件特别不错传送门

代码:

<button style=" float: right;" class="btn" id="generate" url="{:U('generate')}">生成</button>

$('#generate').click(function(event)

{

var url = $(this).attr('url');

//loading层

var index = layer.load(1);

function download(content)

{

layer.open({

type: 1,

content: content,

skin: 'layui-layer-demo',

//样式类名

closeBtn: 1,

shift: 0,

area: ['200px', '105px'],

shadeClose: true,

//开启遮罩关闭

content:content
});
}

$.post(url, function(data) {

if (data.status)

{

layer.close(index);

data.path = '__ROOT__' +'/'+(data.path);

var test = '<a class="download" href =' + data.path + ' target="_blank" >点击下载</a>';

download(test);
}

else {

layer.close(index);

layer.alert('出现错误')
}
}, "json");
});

2.导出excel:(导出excel特别慢 适用场景为更复杂的问题比如导出字体的颜色大小排版控制 并且导出图片之类)

首先我们需要引入phpexcel这个插件下载完后去掉没必要的放在 /ThinkPHP/Library/Vendor/PHPExcel

注意目录结构为如图

核心函数为:

function create_xls($data,$filename='simple.xls')

{

ini_set('max_execution_time', '0');

Vendor('PHPExcel.PHPExcel');

$phpexcel = new PHPExcel();

$phpexcel->getProperties()
->setCreator("HYZ")
->setLastModifiedBy("HYZ")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");

$phpexcel->getActiveSheet()->fromArray($data);

$phpexcel->getActiveSheet()->setTitle('Sheet1');

$phpexcel->setActiveSheetIndex(0);

function saveExcelToLocalFile($objWriter,$filename)

{

// make sure you have permission to write to directory

$filePath = 'Excel/'.$filename;
$objWriter->save($filePath);
return $filePath;
}

// 导出到本地语法
$objWriter = new PHPExcel_Writer_Excel5($phpexcel);

// 导出到界面语法

// $objwriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5');

saveExcelToLocalFile($objWriter,iconv('utf-8','gb2312',$filename));

$response = array(
'result' => 1,
'url' =>'Excel/'.$filename
);

return json_encode($response);

exit;

}

其他的部分基本可以参考生成csv的一样

php使用ajax导出CSV或者EXCEl(thinkphp)方法的更多相关文章

  1. MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

    导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...

  2. ThinkPHP导出CSV、Excel

    Thinkphp/Library/Think下新文件文件:Csv.class.php <?php namespace Think; class Csv { //导出csv文件 public fu ...

  3. fputcsv 导出CSV、Excel DownLoad

    以前使用excel导出插件导出50000左右的数据就经常遇到内存不足或者超时等现象,现在自己用fputcsv导出CSV比直接导出excel好多了,导出文件可以直接用excel打开.下载后可放在框架目录 ...

  4. impala 导出CSV 或excel

    1.介绍 impala-shell导入导出 参数说明: • -q query (--query=query) 从命令行执行查询,不进入impala-shell • -d default_db (--d ...

  5. mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法

    Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...

  6. 网页前端导出CSV,Excel格式文件

    通过自己实际测试有以下几种方法 方法一通过a标签实现,把要导出的数据用“\n”和“,”拼接成一个字符串,然后把字符串放到href中,这种方法只支持chrome,firefox等非ie浏览器 html页 ...

  7. pl/sql developer导出数据到excel的方法

    http://yedward.net/?id=92 问题说明:使用pl/sql developer导出数据到excel表格中是非常有必要的,一般的可能直接在导出的时候选择csv格式即可,因为该格式可以 ...

  8. BS导出csv文件的通用方法(.net)

    最近把以前项目里用的导出文件的功能提取成了dll,通过读取Attribute来得到要导出的表头(没有支持多语言),使用时只要组织好要导出的数据,调用方法就好了,希望对大家有用. 使用时只需引用下载包里 ...

  9. 导出csv用excel打开后数字不用科学计数法显示(0123456显示123456)

    从这儿抄过来的: http://zhejiangyinghui.iteye.com/blog/1149526 最近写了一个生成csv的程序,生成的csv其中有一列数字长度为13位,csv中查看没有问题 ...

随机推荐

  1. CE创建进程和线程

    创建进程: HWND hWnd = NULL; PROCESS_INFORMATION pi = {}; if(NULL==hWnd) { hWnd=FindWindow(NULL,_T(" ...

  2. 【转载】Chaotic Time-Series Prediction

    原文地址:https://cn.mathworks.com/help/fuzzy/examples/chaotic-time-series-prediction.html?requestedDomai ...

  3. redis之(二十一)redis之深入理解Spring Redis的使用

    关于spring redis框架的使用,网上的例子很多很多.但是在自己最近一段时间的使用中,发现这些教程都是入门教程,包括很多的使用方法,与spring redis丰富的api大相径庭,真是浪费了这么 ...

  4. MSXML应用总结

    MSXML的DOM模型是符合W3C DOM标准的,而DOM API在Windows中以COM接口的形式提供,关于COM请大家查阅相关资料.简单来说,COM提供了一个环境和一套规则,使接口的设计实现到对 ...

  5. ThinkPHP中的动态缓存(S方法)和快速缓存(F方法)

    系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache)    对于File方式缓存下的缓存 ...

  6. SpringCloud Sleuth 使用

    1. 介绍   Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为SpringCloud应用实现了一种分布式追踪解决方案,其兼容了Zipkin, HTrace和log- ...

  7. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  8. LeetCode---Stack && Heap

    402. Remove K Digits 思路:一次判断字符若比栈顶字符大则入栈,若小则pop,同时k--,直到k为0,注意最终k没有减为0或者中途栈为空或者最终结果前面带0的情况 public St ...

  9. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  10. JMeter Http测试计划

    一.新建Http测试计划 二.添加线程组 设定5个线程,循环2次 三.添加Http请求 以百度为例: 四.添加监听:察看结果树 五.执行测试 5个用户,循环2次,共发了10个请求.