• 技术文章 >后端开发 >php教程

    使用phpexcel导出excel乱码

    2016-06-23 13:54:36原创805
    数据库和页面都是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')也还是乱码;
    这个乱码是什么问题


    回复讨论(解决方案)

    在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了!
    ob_end_clean();//清除缓冲区,避免乱码
    header('Content-Type: application/vnd.ms-excel');
    .....
    .....

    $objWriter->save('php://output'); 输出的是二进制文档流,就和图片一样不存在字符集的问题
    用 excel 打开是出现乱码,是因为文件中含有不能被他识别的内容
    这多半是包含了 php 的错误信息
    你可以截个图贴上来看看,也可以以把 xls 文件放到网盘上

    在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了!
    ob_end_clean();//清除缓冲区,避免乱码
    header('Content-Type: application/vnd.ms-excel');
    .....
    .....




    的确是这问题,伤不起的缓冲区

    $objWriter->save('php://output'); 输出的是二进制文档流,就和图片一样不存在字符集的问题
    用 excel 打开是出现乱码,是因为文件中含有不能被他识别的内容
    这多半是包含了 php 的错误信息
    你可以截个图贴上来看看,也可以以把 xls 文件放到网盘上





    在header() 前面加上ob_end_clean() 函数, 清除缓冲区, 这样就不会乱码了!
    ob_end_clean();//清除缓冲区,避免乱码
    header('Content-Type: application/vnd.ms-excel');
    .....
    .....




    的确是这问题,伤不起的缓冲区

    没用,我用的是本地测试的,唉!本地本来就可以的,大意了

    你的 A1 单元格处的内容就不对
    请检查是否有多余的输出

    上下代码
    /*--------------设置表头信息------------------*/
    $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 // $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后会弹出下载

    你的 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;$jsetActiveSheetIndex(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下导出是正常的

    我已经解决了,bom头的问题,谢谢你们了

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:导出 phpexcel excel 乱码
    上一篇:【PHP】MVC框架为什么这么难! 4年后终于明白了,被ThinkPHP害得 下一篇:name是变量,如何把VALUE写入数据库
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 2022最新浅析PHP特性、内核及架构• 教你创建虚拟主机并运行php项目(phpstudy + wamp)• 一文详细PHP模板引擎的原理(附代码示例)• php命名空间学习详解_PHP• 在yii中新增一个用户验证的方法详解_PHP
    1/1

    PHP中文网