导出数据之CSV[PHP]

  平常开发中,常见的需求就是导出数据为Excel,CSV格式的表格。所以,在此记录一下导出CSV数据的小方法

$fileName = 'demo.csv';
$data = [
    ['id'=>1,'name'=>'李','age'=>23],
    ['id'=>2,'name'=>'行','age'=>13]
];

exportCsv($fileName,$data,false);

function exportCsv($fileName,$data,$is_download=true)
{
    set_time_limit(0);
    ini_set('memory_limit','512M');

    if(!$is_download){
        $output = fopen('php://output','w');
    }else{
        $output = fopen($fileName, 'w');
    }

    header("Content-Type: application/csv;charset=UTF-8");
    header("Content-Disposition: attachment; filename=$fileName");

    if(!$data || !is_array($data)) return false;

    foreach($data as $v){
        fputcsv($output, array_values($v));
    } 

    fclose($output);
}

 

 

常见问题:

1.导出订单号到csv文件中自动变科学计数法

其实这个问题跟用什么语言导出csv文件没有关系。Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0。
解决:
只要把数字字段后面加上显示上看不见的字符即可,字符串前面或者结尾加上制表符"\t".
php 程序可以这样判断,注意一定是"\t",不是'\t'.

 

2.导出数据到文件, 打开文件的时候出现错误提示,is SYLK文件

原因:这是由于你的文件中的第一个字段位置是ID,导致被认为是SYLK文件,而该文件的扩展名为csv 不一致导出报错

解决:

修改第一个字段的名称即可, 例如:序号

 

posted @ 2018-03-16 16:52  X-Wolf  阅读(398)  评论(0编辑  收藏  举报