php使用ajax导出CSV或者EXCEl(thinkphp)方法
首先我强烈推荐看到这篇文章的你将导出文件设置为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)方法的更多相关文章
- MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult
导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...
- ThinkPHP导出CSV、Excel
Thinkphp/Library/Think下新文件文件:Csv.class.php <?php namespace Think; class Csv { //导出csv文件 public fu ...
- fputcsv 导出CSV、Excel DownLoad
以前使用excel导出插件导出50000左右的数据就经常遇到内存不足或者超时等现象,现在自己用fputcsv导出CSV比直接导出excel好多了,导出文件可以直接用excel打开.下载后可放在框架目录 ...
- impala 导出CSV 或excel
1.介绍 impala-shell导入导出 参数说明: • -q query (--query=query) 从命令行执行查询,不进入impala-shell • -d default_db (--d ...
- mysql导出csv文件excel打开后数字用科学计数法显示且低位变0的解决方法
Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法:如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0. Excel打开csv文件时,只要字段值都是数字,它 ...
- 网页前端导出CSV,Excel格式文件
通过自己实际测试有以下几种方法 方法一通过a标签实现,把要导出的数据用“\n”和“,”拼接成一个字符串,然后把字符串放到href中,这种方法只支持chrome,firefox等非ie浏览器 html页 ...
- pl/sql developer导出数据到excel的方法
http://yedward.net/?id=92 问题说明:使用pl/sql developer导出数据到excel表格中是非常有必要的,一般的可能直接在导出的时候选择csv格式即可,因为该格式可以 ...
- BS导出csv文件的通用方法(.net)
最近把以前项目里用的导出文件的功能提取成了dll,通过读取Attribute来得到要导出的表头(没有支持多语言),使用时只要组织好要导出的数据,调用方法就好了,希望对大家有用. 使用时只需引用下载包里 ...
- 导出csv用excel打开后数字不用科学计数法显示(0123456显示123456)
从这儿抄过来的: http://zhejiangyinghui.iteye.com/blog/1149526 最近写了一个生成csv的程序,生成的csv其中有一列数字长度为13位,csv中查看没有问题 ...
随机推荐
- CE 定时器
//头文件: afx_msg void OnTimer(UINT_PTR nIDEvent); //声明定时器响应函数 //代码文件: #define TIMER 1 #define TIMEROUT ...
- 前端学习 第六弹: javascript中的函数与闭包
前端学习 第六弹: javascript中的函数与闭包 当function里嵌套function时,内部的function可以访问外部function里的变量 function foo(x) { ...
- Could not load java.net.BindException错误解决
出现了错误异常:信息: Illegal access: this web application instance has been stopped already. Could not load ...
- PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符
1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 ...
- <%@page contentType="text/html;charset=gbk"%>与<meta http-equiv="Content-Type" content="text/html; charset=GBK">区别
前一个是在服务端起作用,是告诉应用服务器采用何种编码输出JSP文件流,后一个是在客户端起作用,是告诉浏览器是采用何种编码方式显示HTML页面. 前者由jsp引擎对输出内容进行编码, 后者将由I ...
- contiki学习笔记---process结构体
process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...
- Pyhton的发展历程
Python的由来 在1989年12月时,吉多·范罗苏姆——龟叔,想寻找一门“课余”编程项目来打发圣诞节前后的时间.Guido决定为当时正构思的一个新的脚本语言写一个解释器,它是ABC语言(教学语言. ...
- java-装箱/拆箱-字符串转换成基本数据类型
一.理解java中包的含义及种类 java是一个面向对象编程,即一切皆是对象,那么有一个矛盾,从数据上划分知道java中的数据分为基本数据类型和引用数据类型,但是基本数据类型如何是一个对象呢?此时,就 ...
- 第二节:模型(Models)和管理后台(Admin site)
本节内容我们将配置数据库,创建第一个model并且快速了解Django自动生成的管理后台(admin site) 目录 数据库配置 创建模型 激活模型 使用Django API 介绍Django管理后 ...
- Ionic页面加载前 ionic页面加载完成 ionic页面销毁执行的事件
ionic 中$ionicView.beforeEnter(页面刚加载前) $ionicView.afterEnter (页面加载完成) $destroy(页面销毁) 广播事件 //ionic c ...