博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP实现导出CSV文件
阅读量:5168 次
发布时间:2019-06-13

本文共 2646 字,大约阅读时间需要 8 分钟。

在做导出一个信息表为excel文件这个功能完成之后,自己用得好好的,但是到HR那边就告诉我导出的文件无法用她电脑上的office打开,心想,兼容没做好,想问下她的版本号,结果半天没回复消息。我老大来了句:转csv文件吧,没有兼容性的说法。

然后开始折腾csv,在这之前我只是见过“导出csv文件”的字样,没有涉及过这个。
当然一开始要去了解一下csv是什么: 。
先附上代码:

public function exportCSVAction(){    $id = intval($this->_req->getParam('cid',0));    $reg = new RegistrationModel();    $studentsArr = $reg->getStudents($id);   // 获取课程及报名学员信息    $fileName = $studentsArr['info']['title'];  //这里定义表名。简单点的就直接  $fileName = time();    header('Content-Type: application/vnd.ms-excel');   //header设置    header("Content-Disposition: attachment;filename=".$fileName.".csv");    header('Cache-Control: max-age=0');    $fp = fopen('php://output','a');    //打开php文件句柄,php://output表示直接输出到PHP缓存,a表示将输出的内容追加到文件末尾    $head = array('工号','部门名','岗位名','学员名','报名时间','状态','课程建议');  //表头信息    foreach($head as $k=>$v){        $head[$k] = iconv("UTF-8","GBK//IGNORE",$v);    //将utf-8编码转为gbk。理由是: Excel 以 ANSI 格式打开,不会做编码识别。如果直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码。      }    fputcsv($fp,$head);  //fputcsv() 函数将行格式$head化为 CSV 并写入一个打开的文件$fp。  //   if (!empty($studentsArr['students'])) {          $data = [];  //要导出的数据的顺序与表头一致;提前将最后的值准备好(比如:时间戳转为日期等)        foreach ($studentsArr['students'] as $key => $val) {            $data['empno'] = "xm-".$val['empno'];            $data['dept'] = $val['dept_name'].'-'.$val['job_name'];            $data['post'] = $val['post'];            $data['username'] = $val['username'];            $data['create_time'] = " ".date('Y-m-d H:i', $val['create_time']);  //excel对大数字会自动转科学计数法表示,所以这里加个“”空格是将数字转字符串,这个有多种方式,具体怎么方便怎么来。            switch ($val['status']) {                case 0:                    $data['status'] = '请假';                    break;                case 1:                    $data['status'] = '正常';                    break;                case 2:                    $data['status'] = '已取消';                    break;                case 3:                    $data['status'] = '缺席';                    break;            }            $data['advices'] = $val['advices'];            foreach($data as $i=> $item){  //$item为一维数组哦                $data[$i] = iconv("UTF-8","GBK//IGNORE",$item);  //转为gbk的时候可能会遇到特殊字符‘-’之类的会报错,加 ignore表示这个特殊字符直接忽略不做转换。            }            fputcsv($fp,$data);        }        exit;  //记得加这个,不然会跳转到某个页面。 //   }}

过程中遇到知识点:

* iconv的使用:;
* fputcsv的使用:。

导出文件实现过程中折腾点:

* 我这里的工号其实有存在前面的数字为0的情况(比如:0123、0001),导出的文件用excel打开后就变成123、1 啦,这明显不合我的要求。然后就开始找如何加上这前面的0呢。想着是不是有个函数处理一下,好吧。没有。阿欧。
最后看到的比较好的处理方法:
在要处理的字段前加个转义符‘`’(英文输入法下的tab键上方的键),据说微信导数据是这样处理的。哈哈哈 我这边的困扰的时候老大让我加上公司前缀。我怎么没想到,我怎么没想到,我怎么没想到。。。估计为了转这个也是脑折路了。

转载于:https://www.cnblogs.com/xinxinmifan/p/php-export-csv.html

你可能感兴趣的文章
Baidu All Reduce
查看>>
All Reduce算法汇总
查看>>
利用卷积进行序列到序列学习
查看>>
深度梯度压缩:减小分布式训练的通信带宽
查看>>
优化CUDA数据传输
查看>>
AI 深度关键短语生成
查看>>
kubernetes
查看>>
AI 大规模分布式SGD:瞬间训练完基于ImageNet的ResNet50
查看>>
k8s pod
查看>>
PyTorch DataLoader
查看>>
k8s ReplicaSet
查看>>
Double binary trees
查看>>
k8s Deployment
查看>>
你所需要的只是注意力
查看>>
k8s Service
查看>>
kubeflow
查看>>
k8s Custom Resource
查看>>
BytePS源码解析
查看>>
Horovod
查看>>
基于k8s安装配置kubeflow
查看>>