使用phpexcel导出excel乱码

luofx623600186 2014-07-02 05:49:04
数据库和页面都是utf8。
header('Content-Type: application/vnd.ms-excel;');
header('Content-Disposition: attachment;filename='.$filename.'.xls');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //
导出后,打开execel是乱码的。
本地window下导出的话没问题,上传到服务器上导出,就是乱码。
直接var_dump($objWreter)到页面,发现不会乱码。
header('Content-Type: application/vnd.ms-excel;charset=gb2312')也还是乱码;
这个乱码是什么问题
...全文
7221 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
IF先生 2017-03-28
  • 打赏
  • 举报
回复
想知道樓主是怎麼解決的?
qq_25517323 2016-03-29
  • 打赏
  • 举报
回复
楼主,你是咋弄好的?
  • 打赏
  • 举报
回复
引用 楼主 luofx623600186 的回复:
数据库和页面都是utf8。 header('Content-Type: application/vnd.ms-excel;'); header('Content-Disposition: attachment;filename='.$filename.'.xls'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); // 导出后,打开execel是乱码的。 本地window下导出的话没问题,上传到服务器上导出,就是乱码。 直接var_dump($objWreter)到页面,发现不会乱码。 header('Content-Type: application/vnd.ms-excel;charset=gb2312')也还是乱码; 这个乱码是什么问题
这个解决了我的问题 很完美的解决了
qyqfly 2015-07-28
  • 打赏
  • 举报
回复
怎么解决的,告诉下吧
xuzuning 2014-07-03
  • 打赏
  • 举报
回复
你的 A1 单元格处的内容就不对 请检查是否有多余的输出
luofx623600186 2014-07-03
  • 打赏
  • 举报
回复
引用 3 楼 luofx623600186 的回复:
[quote=引用 1 楼 whg4585 的回复:] 在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了! ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-excel'); ..... .....
的确是这问题,伤不起的缓冲区 没用,我用的是本地测试的,唉!本地本来就可以的,大意了
luofx623600186 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
$objWriter->save('php://output'); 输出的是二进制文档流,就和图片一样不存在字符集的问题
用 excel 打开是出现乱码,是因为文件中含有不能被他识别的内容
这多半是包含了 php 的错误信息
你可以截个图贴上来看看,也可以以把 xls 文件放到网盘上



luofx623600186 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 whg4585 的回复:
在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了! ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-excel'); ..... .....
的确是这问题,伤不起的缓冲区
luofx623600186 2014-07-03
  • 打赏
  • 举报
回复
我已经解决了,bom头的问题,谢谢你们了
luofx623600186 2014-07-03
  • 打赏
  • 举报
回复
上下代码 /*--------------设置表头信息------------------*/ $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'a') ->setCellValue('B1', 'b') ->setCellValue('C1', 'c') ->setCellValue('D1', 'd') ->setCellValue('E1', 'e') ->setCellValue('F1','f') ->setCellValue('G1','g') ->setCellValue('H1','h') ->setCellValue('I1',i') ->setCellValue('J1','f'); /*--------------开始从数据库提取信息插入Excel表中------------------*/ $i=2; //定义一个i变量,目的是在循环输出数据是控制行数 for($j=0;$j<count($result);$j++){ // $rm = iconv("GB2312","UTF-8",$rs[1]); //对字符进行编码将数据库里GB2312的中文字符转换成UTF-8格式 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue("A".$i, $result[$j]['ori_stu_name']) ->setCellValue("B".$i, $result[$j]['ori_stu_candidateNum']) ->setCellValue("C".$i, $result[$j]['ori_stu_sex']) ->setCellValue("D".$i, $result[$j]['ori_stu_id_card']) ->setCellValue("E".$i, $result[$j]['ori_stu_institution']) ->setCellValue('F'.$i, $result[$j]['ori_stu_specialty']) ->setCellValue('G'.$i, $result[$j]['ori_stu_phone']) ->setCellValue('H'.$i, $result[$j]['ori_stu_isMember']) ->setCellValue('I'.$i, $result[$j]['ori_stu_domicile']) ->setCellValue('J'.$i, $result[$j]['ori_stu_isReport']); $i++; } /*--------------下面是设置其他信息------------------*/ $objPHPExcel->getActiveSheet()->setTitle('学生表'); //设置sheet的名称 $objPHPExcel->setActiveSheetIndex(0); //设置sheet的起始位置 $filename = date('Y-m',time())."信息表"; header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename='.$filename.'.xls'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); //这里生成excel后会弹出下载
引用 6 楼 xuzuning 的回复:
你的 A1 单元格处的内容就不对 请检查是否有多余的输出
我上代码吧

Vendor("Excel.PHPExcel");
            Vendor("Excel.PHPExcel.IOFactory"); 
            $objPHPExcel = new PHPExcel();   
            $db=M("student_info");
            $where="where fsi_logistics.ori_log_stuCandidateNum = fsi_student_info.ori_stu_candidateNum";
            $sql="select logistics.*,student_info.ori_stu_name  from student_info,logistics ".$where;
			$result= $db->query($sql); 
			$objPHPExcel->setActiveSheetIndex(0)
			            ->setCellValue('A1', '姓名')
			            ->setCellValue('B1', '考生号')
			            ->setCellValue('C1', '商品')
			            ->setCellValue('D1', '价格');
			$i=2;
			for($j=0;$j<count($result);$j++){			
			  $objPHPExcel->setActiveSheetIndex(0)
			            ->setCellValue("A".$i, $result[$j]['ori_stu_name'])
			            ->setCellValue("B".$i, $result[$j]['ori_log_stuCandidateNum'])
			            ->setCellValue("C".$i, $result[$j]['product'])
			            ->setCellValue("D".$i, $result[$j]['price']);         
			            $i++;
			 }		
			$objPHPExcel->getActiveSheet()->setTitle('学生表'); 
			$objPHPExcel->setActiveSheetIndex(0);   
			$filename = date('Y-m',time())."生活用品表";
			ob_end_clean() ;
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename='.$filename.'.xls');
            header('Cache-Control: max-age=0');
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
            exit;   
没有其它输出了呀,在winddow下导出是正常的
xuzuning 2014-07-02
  • 打赏
  • 举报
回复
$objWriter->save('php://output'); 输出的是二进制文档流,就和图片一样不存在字符集的问题 用 excel 打开是出现乱码,是因为文件中含有不能被他识别的内容 这多半是包含了 php 的错误信息 你可以截个图贴上来看看,也可以以把 xls 文件放到网盘上
小在在 2014-07-02
  • 打赏
  • 举报
回复
在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了! ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-excel'); ..... .....

20,396

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧