美文网首页
导出数据为csv相比excel的优势

导出数据为csv相比excel的优势

作者: 零一间 | 来源:发表于2018-07-06 11:00 被阅读153次

1、把数据写成csv格式文件。

  • csv文件可以直接用Excel打开。
  • 写csv文件的效率和写txt文件的效率一样高。
  • 同样的数据内容,生成的csv文件的大小远远小于生成的Excel文件。

从以上优点就可以看出生成csv文件消耗的内存绝对小于生成Excel文件。

2、按一定的格式去生成csv文件,在Excel中打开的时候就是完整的行和列格式。

3、同样的数据内容,csv文件和Excel文件的大小对比:

  • 导出excel不能流式处理,导致占用比较大的内存,很容易导致内存溢出;并且excel的数据量是有限制的,不能超过65536行。一旦超过,将无法生成excel文件。

  • csv方式导出,则可以像导出txt一样,以文本流的方式进行流式处理,不但能导出海量信息,而且流式处理占用内存极低,服务器对浏览器的响应也是非常迅速的。轻松导出几百万行数据,理论上是不限量的。

不过,csv方式导出也存在问题

首先,如果用excel来打开csv,超过65536行的数据都会看不见,这是excel程序的问题。

其次,如果你要导出一个身份证号码,手机号码,邮政编码等,纯数字构成的字符串,在excel中打开csv时,这些字段很容易被识别成数字,造成误解。我一般加上"\t",也有人加" ' "单引号 。

总体而言,本人倾向于csv格式。

导出日期可以通过转化

//EXCEL中 1970-1-1 代表的数字 25569。
//从1900-1-1日开始算的单位是天数。并且减去东八区的秒数
$time = ($v[7] - 25569) * 24 * 60 * 60 - 8 * 60 * 60;
$create_time = date('Y-m-d H:i:s', $time);//更新日期

示例:

<?php

/**
 * 如果是文件较大,可以先生成临时文件,后下载
 */
$data = [
    [
        'ID',
        '用户名',
        '邮箱',
        '地址',
        '电话',
        '身份证',
        '注册时间'
    ],
    [
        '1',
        'jack',
        'jack@gmail.com',
        'beijing',
        "\t13812345678",
        '61044119808080X',
        "20170101-00:00:00",
    ],
];
$fileName = '会员信息_' . date('YmdHis') . '.csv';
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $fileName);
$fp = fopen('php://output', 'a');
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
foreach ($data as $fields) {
    fputcsv($fp, $fields);
}
fclose($fp);

相关文章

网友评论

      本文标题:导出数据为csv相比excel的优势

      本文链接:https://www.haomeiwen.com/subject/gaobcxtx.html