我也要整理下用ThinkPHP框架写过的功能了,省得以后找来找去,在商城项目中经常需要将订单等数据导出生成excel表格
我先使用了一下PHPExcel这个来导出数据,导出来的数据倒是没有问题,主要是没有表头,要的急就没搞这个了,直接通过逗号换行生成csv格式的表格文件
实现的原理很简单:就是用逗号作为每个单元格的分解,再用换行作为表格的换行,最后生成csv格式的文件就可以了
/**
* 数据转csv格式的excel
* @param array $data 需要转的数组
* @param string $filename 生成的excel文件名
* 示例数组:
$data = array(
'1,2,3,4,5',
'6,7,8,9,0',
'1,3,5,7,9'
);
*/
function createCsv($data,$filename='orderlist.csv'){
// 防止没有添加文件后缀
$filename=str_replace('.csv', '', $filename).'.csv';
Header( "Content-type: application/octet-stream ");
Header( "Accept-Ranges: bytes ");
Header( "Content-Disposition: attachment; filename=".$filename);
foreach( $data as $k => $v){
// 替换掉换行
$v=preg_replace('/\s*/', '', $v);
// 转成gbk以兼容office乱码的问题
echo iconv('UTF-8','GBK',$v)."\r\n";
}
}
需要导出数据的地方应该还是挺多的,我直接放在Application/Common/Common/function.php
中,方便使用
调用的话就直接这样使用就ok
$data = array(
'1,2,3,4,5',
'6,7,8,9,0',
'1,3,5,7,9'
);
createCsv($data)
但是这样可能并不能满足我们的需求,实际应用中数据一般是从数据库取出的二维数组
/**
* 数据转csv格式的excel
* @param array $data 需要转的数组
* @param string $header 要生成的excel表头
* @param string $filename 生成的excel文件名
* 示例数组:
$data = array(
'1,2,3,4,5',
'6,7,8,9,0',
'1,3,5,7,9'
);
*/
function create_csv($data,$header=null,$filename='orderlist.csv'){
// 如果手动设置表头;则放在第一行
if (!is_null($header)) {
array_unshift($data, $header);
}
// 防止没有添加文件后缀
$filename=str_replace('.csv', '', $filename).'.csv';
ob_clean();
Header( "Content-type: application/octet-stream ");
Header( "Accept-Ranges: bytes ");
Header( "Content-Disposition: attachment; filename=".$filename);
foreach( $data as $k => $v){
// 如果是二维数组;转成一维
if (is_array($v)) {
$v=implode(',', $v);
}
// 替换掉换行
$v=preg_replace('/\s*/', '', $v);
// 解决导出的数字会显示成科学计数法的问题
$v=str_replace(',', "\t,", $v);
// 转成gbk以兼容office乱码的问题
echo iconv('UTF-8','GBK',$v)."\t\r\n";
}
}
这样就完成了从数据库导出数据的功能,csv格式的可以使用WPS或者Office打开,也可以当text用记事本或者文本编辑器都可以直接打开编辑
PHPExcel 导出的数据确实没有表头,有点不好
@广州网站建设 已经处理好了 等会发出来
你再搞搞,phpexcel的demo看下~
@西枫里博客 😎 那会已经出来了啊
感觉很高端,看不懂 😥