今天在导出excel的时候,发现在windows系统上面excel数据展示不全,在mac上面导出的excel打不开。
经过排查,发现是导出的excel内有emoji表情导致的,想正确展示带emoji的数据有3种办法。
1:把emoji符号过滤
function filterEmoji($str)
{
$str = preg_replace_callback( '/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},$str);
return $str;
}
2:把emoji符号替换成可以展示的符号,代替emoji,这里替换成了*
$text = json_encode($value);
$excelValue = preg_replace("/\\\u[ed][0-9a-f]{3}\\\u[ed][0-9a-f]{3}/","*", $text);
$excelValue = json_decode($excelValue);
3:不用phpExcel类,用html直接输出excel文件
1.将请求的mimeType设置为excel 'mimeType'=>'application/vnd.ms-excel
2.将数据写进html的table里面
$th_list = ['','','','','','','','',''];
$table = '<table border="1"><thead><tr align="center" bgcolor="#0099CC">';
foreach($th_list as $k => $v){
$table .= "<th>{$v}</th>";
}
$table .= '</tr></thead><tbody>';
if($data){
foreach ($data as $k =>$v) {
$table .= "<tr align='center'>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= '</tr>';
}
}
$table .= '</tbody></table>';
3:返回数据
经过这三步后,就可以正常显示带有emoji的excel了。
网友评论