之前在前期的开发过程中 也发送过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插件解决的问题比较完美 乱码就解决了 最后谢谢大家…