PHP生成csv格式的excel表格

但是phpexcel有一个严重的缺点;那就是一个大大的“慢”字;
数据量小的时候还好;当数据量稍微大一点;
那生成excel的过程99.999%的时间都是在那看浏览器转圈了;
那有木有一个效率高点的呢?当然有了;而且非常简单;
贴代码;

/**
 * 数据转csv格式的excle
 * @param  array $data      需要转的数组
 * @param  string $filename 生成的excel文件名
 *      示例数组:
        $a = array(
            '1,2,3,4,5',
            '6,7,8,9,0',
            '1,3,5,6,7'
            );
 */
function create_csv($data,$filename='simple.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";
    }
}

PHP

调用示例:

$data=array(
    '1,2,3,4,5',
    '6,7,8,9,0',
    '1,3,5,6,7'
    );
create_csv($data);

PHP

其实原理很简单;就是以逗号作为每个单元格的分解;再以换行作为表格的换行;
最后生成csv格式的文件就可以了;
下载到本地后;直接以当text用记事本或者文本编辑器都可以直接打开编辑;

白俊遥博客


// 回复储的分割线*
实际应用中数据一般是从数据库取出的二维数组;
应储的问题;更新下函数;以兼容二维数组;
同时可以直接指定表头;

/**
 * 数据转csv格式的excle
 * @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,6,7'
            );
        $header='用户名,密码,头像,性别,手机号';
 */
function create_csv($data,$header=null,$filename='simple.csv'){
    // 如果手动设置表头;则放在第一行
    if (!is_null($header)) {
        array_unshift($data, $header);
    }
    // 防止没有添加文件后缀
    $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){
        // 如果是二维数组;转成一维
        if (is_array($v)) {
            $v=implode(',', $v);
        }
        // 替换掉换行
        $v=preg_replace('/\s*/', '', $v);
        // 转成gbk以兼容office乱码的问题
        echo iconv('UTF-8','GBK',$v)."\r\n";
    }
}

PHP

//*****************************回复 一生有你、水木年华 的问题的分割线 *******************************

导出csv格式没法设置数据的格式;
这里给出一个方案;
可以在每个单元格后面追加一个看不见的tab制表符;
这样就不是数字格式;
也就不会被显示成科学计数法了;

/**
 * 数据转csv格式的excle
 * @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,6,7'
            );
        $header='用户名,密码,头像,性别,手机号';
 */
function create_csv($data,$header=null,$filename='simple.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";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值