使用csv批量导入、导出数据的需求处理

需求

运营的同学编辑好问题后,放入csv文件中。上传csv文件,将文件中的问题批量导入问答库中,并记录编辑考核数量。需要按批次记录上传数据,并可以进行分批次查询与数据导出

导入

读取csv文件有两种办法,一种是用file方法读取全部行,然后用逗号进行分割。但是这种办法碰到文章中本身有逗号的情况就会有问题。另外一种就是用fgetcsv方法,这种方法比较靠谱。

 while($data = fgetcsv($fileObj)){
            $title = $data[0];
            $content = $data[1];
}

读取出来有个编码的问题。因为每个人环境不一样,导致上传者的编码很有可能不一致。这样解决:

 function getSafeStr($str){
        $s1 = iconv('utf-8','gbk//IGNORE',$str);
        $s0 = iconv('gbk','utf-8//IGNORE',$s1);
        if($s0 == $str){
            return $s1;
        }else{
            return $str;
        }
    }

之前试过通过判断输入数据的编码得到这个编码,然后再做编码转化,效果不行。

导出

用table的方式导出数据。注意头信息的设置:

$ExcelStr = '<html>
                        <head>
                           <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
                        </head>
                        <body><table><tr><th>Id</th><th>标题</th><th>用户</th><th>回复数</th><th>提问时间</th><th>url地址</th></tr> ';
        if($data && is_array($data)){


            foreach ($data as $dk => $dv){
                $url = "http:///{$dv['z_id']}.html";
                $key = $dk + 1;
                $askTime = date("Y-m-d H:i:s",$dv['z_ask_time']);
                $ExcelStr.= "<tr><td>{$key}</td><td>{$dv['z_title']}</td><td>{$dv['z_userid']}</td><td>{$dv['z_reply']}</td><td>{$askTime}</td><td>{$url}</td></tr>";
            }
        }
        $ExcelStr .= "</table></body></html>";
        $ExcelStr = Libs_Global_Fun::changeCode($ExcelStr);
        header('Cache-Control: no-cache, must-revalidate');
        header('Content-type: application/vnd.ms-excel;');
        header('Content-Disposition: filename=' . date("Y年m月d日") . $patchId . '.xls');
        exit($ExcelStr);
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!