完美解决邮件中excel乱码问题<mac 附件乱码>

    xiaoxiao2021-03-25  124

    之前在前期的开发过程中 也发送过excel 后来自己使用mac以后 发现有乱码 所以有必要记录下来

    /** * 格式化表格 */ public function formatTable($sign_data){ $table = 'ID'."\t".'姓名打卡'."\t".'时间'."\n"; foreach($sign_data as $key => $val){ $table .= $val['id']."\t".$val['name']."\t".$val['sign_time']."\n"; } return $table; }

    PHP中程序使用\t制表符生成的excel 以前也是这么使用的 但是发现有乱码 如下图:

    第一时间 当时心里找了很多办法 比如说iconv 和 mb_convert_encoding 进行编码转换 然后在win上没有问题在mac上依然乱码

    $content = iconv("GBK", "UTF-8", $content); $content = mb_convert_encoding($content, "UTF-8","GBK");

    最后使用phpexcel插件 代码如下:

    /** * 使用phpexcel生成excel表格 * @param unknown $data */ public function generateExcel($data){ $objPHPExcel = new PHPExcel(); //保存excel—2007格式 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); //设置当前的sheet $objPHPExcel->setActiveSheetIndex(0); //设置sheet的name $objPHPExcel->getActiveSheet()->setTitle('广州区打开记录'); //设置单元格的值 //垂直居中 $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', 'ID')->setCellValue('B1', '姓名')->setCellValue('C1', '签到时间'); $number = 2; $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(15); $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30); foreach ($data as $key => $val){ $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$number, $val['id'])->setCellValue('B'.$number,$val['name'])->setCellValue('C'.$number, $val['sign_time']); $number++; } $objWriter->save(self::SAVE_FILE_DIR); }

    还是phpexcel插件解决的问题比较完美 乱码就解决了 最后谢谢大家…

    转载请注明原文地址: https://ju.6miu.com/read-15247.html

    最新回复(0)