使用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 协议》,转载必须注明作者和本文链接
推荐文章: