phpexcel 外网【window】服务器导出乱码

jiechengyang 2017-09-09 06:00:44
我这个更奇怪,前段时间客户使用都没问题,我代码也没改过。今天突然客户打电话说导出来的数据乱码了。我马上访问去看,结果真的乱码了。我调试我本地的导出,结果又出奇的没问题。哎,这不,找度娘来了。更奇怪的是我加入了ob缓冲函数,ob_end_clean()有点作用都不起,找了bom头 什么也没找到,下载出来的数据都是乱码的
    //学员信息导出
function daochuinfo($data,$path,$mod=0){
$rootexcel =''.ROOT_PATH.'/PHPExcel/PHPExcel.php';
require_once($rootexcel);
$column_number = 16;
$objPHPExcel = new PHPExcel();// 创建一个处理对象实例
$objPHPExcel->createSheet();//创建sheet
$objPHPExcel->setActiveSheetIndex(0);
$objActSheet = $objPHPExcel->getActiveSheet();
set_time_limit(0); # 设置执行时间最大值
ini_set("memory_limit", "1024M"); // 设置php可使用内存
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
if (!PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
die($cacheMethod . " 缓存方法不可用");
}
$title = '学员数据';
//设置表格标题
$objActSheet->setCellValue('A1', $title);
//设置字体大小
$objActSheet->getStyle('A1')->getFont()->setName('宋体');
$objActSheet->getStyle('A1')->getFont()->setSize(40);
$objActSheet->getStyle('A1')->getFont()->setBold(true);
//合并标题单元格
$objActSheet->getStyle('B2')->getAlignment()->applyFromArray(
array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
'rotation' => 0,
'wrap' => true
) );
$styleArray1 = array(
'font' => array(
'bold' => true,
'size'=>12,
'color'=>array(
'argb' => '00000000',
),
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
),
);
$styleArray2 = array(
'font' => array(
'bold' => true,
'size'=>12,
'color'=>array(
'argb' => '00000000',
),
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
),
);
$arr=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P');
// 将A1单元格设置为加粗,居中
$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray1);
$objActSheet->mergeCells( 'A1:'.chr(ord('A')+$column_number-1).'1');//合并标题
$objActSheet->setCellValue('A2', '编号');
$objActSheet->setCellValue('B2', '学员姓名');
$objActSheet->setCellValue('C2', '性别');
$objActSheet->setCellValue('D2', '身份证号');
$objActSheet->setCellValue('E2', '手机号');
$objActSheet->setCellValue('F2', '已缴费');
$objActSheet->setCellValue('G2', '学员状态');
$objActSheet->setCellValue('H2', '教练');
$objActSheet->setCellValue('I2', '训练车辆');
$objActSheet->setCellValue('J2', '联系地址');
$objActSheet->setCellValue('K2', '报名日期');
$objActSheet->setCellValue('L2', '招生人');
$objActSheet->setCellValue('M2', '过科一日期');
$objActSheet->setCellValue('N2', '过科二日期');
$objActSheet->setCellValue('O2', '过科三日期');
$objActSheet->setCellValue('P2', '过科四日期');
foreach ($arr as $v) {
$objPHPExcel->getActiveSheet()->getStyle($v.'2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);// 居中
$objPHPExcel->getActiveSheet()->getStyle($v.'2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getColumnDimension($v)->setWidth(15);// 单元格宽度
$objPHPExcel->getActiveSheet()->getStyle($v.'2')->applyFromArray($styleArray2);
}
//***********************画出单元格边框*****************************
$styleArray = array(
'borders' => array(
'allborders' => array(
//'style' => PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
'style' => PHPExcel_Style_Border::BORDER_THIN,//细边框
//'color' => array('argb' => 'FFFF0000'),
),
),
);
$i=3;
if($data['count']){
$scoreModel = model('score');
foreach ($data['data'] as $k => $rk) {
$sex = $rk['UserSex']==1?'男':'女';
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $rk['Id']);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $rk['UserName']);
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $sex);
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, "'".$rk['sfz']);
$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $rk['UserMobile']);
$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, costnotes($rk['Id']));
$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, xyztdesc($rk['xyzt']));
$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, showtype2('jc_user','TrueName','Id',$rk['jiaolian']));
$objPHPExcel->getActiveSheet()->setCellValue('I' . $i, showtype2('jc_car','chepai','id',$rk['carID']));
$objPHPExcel->getActiveSheet()->setCellValue('J' . $i, $rk['UserAddr']);
$objPHPExcel->getActiveSheet()->setCellValue('K' . $i, date('Y-m-d',strtotime($rk['bmtime'])));
$objPHPExcel->getActiveSheet()->setCellValue('L' . $i, showtype2('jc_user','TrueName','Id',$rk['addid']));
//科目一,科目二,科目三通过时间
$suba = array('M'=>1,'N'=>2,'O'=>3,'P'=>4);
foreach($suba as $sk=>$sv){
$scorerow = $scoreModel->get(array('testtime')," uId='".$rk['Id']."' AND score=1 AND subtype=".$sv."");
$objPHPExcel->getActiveSheet()->setCellValue($sk . $i, $scorerow['testtime']);
}
foreach ($arr as $va) {
$objPHPExcel->getActiveSheet()->getStyle($va.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle($va.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
}
$objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(30);
$i++;
}
}
$j=$i-1;
$objPHPExcel->getActiveSheet()->getStyle('A1:P'.$j)->applyFromArray($styleArray);
//**********************画出单元格边框结束*****************************
if($mod==1){
$outputFileName = $path;
$xlsWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("Content-Transfer-Encoding: binary");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$xlsWriter->save( "php://output");
}else{
//生成2007excel格式的xlsx文件
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//$objWriter->setOffice2003Compatibility(true);
//$path = iconv('utf-8','gb2312',$path);
$objWriter->save($path);
}
}
...全文
262 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该是数据源的问题,我前端时间跟你一样乱码,改了sql语句就正常了
lh460795 2017-09-19
  • 打赏
  • 举报
回复
有可能是数据看是不是 有什么特殊字符 或者其他 导致程序出错 如果你编码没问题 那估计就是 数据的问题
jiechengyang 2017-09-12
  • 打赏
  • 举报
回复
导出来都是utf-8 我换成了存文件的形式 然后打开文件没有乱码
游北亮 2017-09-11
  • 打赏
  • 举报
回复
导出的文件是gb2312编码的吗?老的Excel不认utf8编码
xuzuning 2017-09-09
  • 打赏
  • 举报
回复
看截图,应该没问题 请给出导出时的链接

20,359

社区成员

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

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