如何使用PHP导出csv和excel文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用PHP导出csv和excel文件相关的知识,希望对你有一定的参考价值。
(一)phpexcel文件导出:步骤1,引入文件require APPPATH.'/libraries/PHPExcel.PHP';
步骤2, 实例化PHPEXCEL对象 $objPHPExcel=new PHPExcel();
步骤3, 设置表头 $column = array('A','B','C'); $line = array('词语','频次','词性');
//填充表头信息
for($i = 0;$i < count($tableheader_all);$i++)
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
//上一行中"$letter[$i]1"表示第“1”行第“$i”列
步骤4, 填充数据
for ($i = 2;$i <= count($data) + 1;$i++) //因为内容是从第二行开始的,所以i=2表示从第二行开始填充数据
$j = 0;
foreach ($tmp as $key=>$val )
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$j]$i",$data[$i-2][$val]); //数据是从第一条开始但是i的初值是2所以想从第一条开始应该是$data[$i-2]开始
$j++;
步骤5,写进excel中并输出
$write = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="数据导出_词云图.xls"');
header("Content-Transfer-Encoding:binary");
$write->save('php://output');
(一)CSV文件导出:
csv文件导出最令人头疼的问题就是编码问题,现在分享一下我的经验
首先看服务器是Linux的还是windows的 如果是windows的服务器那么编码问题只能借助于mb_convert_encoding()或者是iconv两个函数相互转换中文编码
如果服务器是linux的 那么很简单 utf-8: setlocale(LC_ALL, ‘en_US.UTF-8′); 简体中文:setlocale(LC_ALL, ‘zh_CN');
下面来说csv导出步骤:
$result = mysql_query("select * from student order by id asc");
$str = "姓名,性别,年龄\n";
$str = iconv('utf-8','gb2312',$str);
while($row=mysql_fetch_array($result))
$name = iconv('utf-8','gb2312',$row['name']); //中文转码
$sex = iconv('utf-8','gb2312',$row['sex']);
$str .= $name.",".$sex.",".$row['age']."\n"; //用引文逗号分开
$filename = date('Ymd').'.csv'; //设置文件名
export_csv($filename,$str); //导出
要将数据导出到本地即下载,需要修改header信息,代码如下:
function export_csv($filename,$data)
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
echo $data;
参考技术A 把Excel文件导入mysql:
打开excel文件,可用phpExcel开源的类
或者:
先把excel文件另存为csv格式,最好是utf8编码。
fgetcsv() — 从文件指针中读入一行并解析 CSV 字段,返回数组本回答被提问者采纳 参考技术B 把Excel文件导入mysql:
打开excel文件,可用phpExcel开源的类
或者:
先把excel文件另存为csv格式,最好是utf8编码。
fgetcsv() — 从文件指针中读入一行并解析 CSV 字段,返回数组
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("11111");
$phpexcel->getActiveSheet()->fromArray($data);
$phpexcel->setActiveSheetIndex(0);
$objWriter = new PHPExcel_Writer_Excel2007($phpexcel);
//注意这里的是已经进行中文编码的传之前需要进行一下中文编码
$filePath = ‘CSV/‘.$filename.‘.xlsx‘;
$objWriter->save($filePath);
$result= array( ‘success‘ => true, ‘url‘ => $filePath );
return $result;
exit;
}
其他的部分基本可以参考生成csv的一样
以上是关于如何使用PHP导出csv和excel文件的主要内容,如果未能解决你的问题,请参考以下文章