`
冷寒冰
  • 浏览: 254439 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

phpexcel导出excel,保存本地乱码,而在服务端不是乱码问题解决方案

阅读更多

遇到一个奇怪的问题,phpexcel导出excel,保存本地乱码,而在服务端不是乱码问题。
 http://127.0.0.1:30983/index.php?m=report  这个是apache下的路径,可以正常保存打开excel,
 http://localhost:8080/project/index.php?m=report  这个是本地路径,不可以正常打开excel,
 其实都是在我本机上,费了一番周折,解决方案如下:

header("Content-type: text/html;charset=utf-8");
require_once 'Classes/PHPExcel.php';
require_once 'Classes/PhpExcel/Writer/Excel2007.php';
require_once 'Classes/PhpExcel/Writer/Excel5.php';
include_once 'Classes/PhpExcel/IOFactory.php'; 
//创建一个处理对象实例(此对象对于2003 2007是相同的)
$objExcel = new PHPExcel(); 
//设置属性 (这段代码无关紧要,其中的内容可以替换为你需要的)
$objExcel->getProperties()->setCreator("andy");
$objExcel->getProperties()->setLastModifiedBy("andy");
$objExcel->getProperties()->setTitle("Office 2003 XLS Test Document");
$objExcel->getProperties()->setSubject("Office 2003 XLS Test Document");
$objExcel->getProperties()->setDescription("Test document for Office 2003 XLS, generated using PHP classes.");
$objExcel->getProperties()->setKeywords("office 2003 openxml php");
$objExcel->getProperties()->setCategory("Test result file");
$userid=$_POST["user_id"];
$startdate=$_POST["log_start_date"];
$enddate=$_POST["log_end_date"];
$dbuser="root";
$dbpwd="123456";
$dbhost="localhost";
$dbdatabase="project";
$db=mysql_connect($dbhost,$dbuser,$dbpwd);
//mysql_query("set names utf8'");//这就是指定数据库字符集,一般放在连接数据库后面就行了(非常重要)
mysql_select_db($dbdatabase,$db);
function  createHeader($objExcel)
{
 //表头
 $k1="日期";
 $k2="项目";
 $k3="工作性质";
 $k4="任务内容";
 $k5="用时数(小时)";
 $k6="姓名";
 /*-----------转码-----------*/
 $k1=iconv("gb2312","utf-8",$k1);
 $k2=iconv("gb2312","utf-8",$k2);
 $k3=iconv("gb2312","utf-8",$k3);
 $k4=iconv("gb2312","utf-8",$k4);
 $k5=iconv("gb2312","utf-8",$k5);
 $k6=iconv("gb2312","utf-8",$k6);
 /*---------------------栏目名称-----------------------*/
 $objExcel->getActiveSheet()->setCellValue('a1', "$k1");
 $objExcel->getActiveSheet()->setCellValue('b1', "$k2");
 $objExcel->getActiveSheet()->setCellValue('c1', "$k3");
 $objExcel->getActiveSheet()->setCellValue('d1', "$k4");
 $objExcel->getActiveSheet()->setCellValue('e1', "$k5");
 $objExcel->getActiveSheet()->setCellValue('f1', "$k6");
}
if($_POST['submitone'])
{
 $mysql="select concat(c.contact_first_name,c.contact_last_name) as fullname,
   date(log.task_log_date)as logdate,p.project_name,
   t.work_property_id,t.task_name,sum(log.task_log_hours) as hours
   from task_log as log
   join tasks    as t
   on  log.task_log_task=t.task_id
   join projects as  p
   on p.project_id=t.task_project
   join  user_tasks  as ut
   on t.task_id=ut.task_id
   join contacts as c
   on c.contact_id=ut.user_id
   where ut.user_id=".$userid."
   and date_format(task_log_date,'%Y%m%d') between '".$startdate."' and '".$enddate.
  "' group by t.task_name,ut.user_id,date_format(task_log_date,'%Y%m%d'),p.project_name order by logdate";
 $myresult=mysql_query($mysql,$db);
 $i=0;
 createHeader($objExcel);
 $sheetname;
 $flag=false;
 while($arr=mysql_fetch_array($myresult))
 {
  $flag=true;
  /*----------从数据库读取数据--------------------*/
  $logdate=$arr["logdate"];
  $projectname=$arr["project_name"];
  //1:需求  2:设计 3:编码  4:代码走查   5测试用例   6系统测试  7维护(these  code  to  avoid generating messy code)
  $message="未填写";
  switch ($arr["work_property_id"])
  {
   case 1:
    $message="需求";
    break;
   
   case 2:
    $message="设计";
    break;
   case 3:
    $message="编码";
    break;
   case 4:
    $message="代码走查";
    break;
   case 5:
    $message="测试用例";
    break;
   case 6:
    $message="系统测试";
    break;
   case 7:
    $message="维护";
    break;
   default:
    $message;
    break;
   
  }
  $workproperty=$message;
  $taskname=$arr["task_name"];
  $hours=$arr["hours"];
  $name=$arr["fullname"];
  $sheetname=$arr["fullname"];
  /*-----------转码-----------*/
  $workproperty=iconv("gb2312","utf-8", $workproperty);
  
  /*$logdate=iconv("gb2312","utf-8",$logdate);
  $projectname=iconv("gb2312","utf-8",$projectname);
  $workproperty=iconv("gb2312","utf-8", $workproperty);
  $taskname=iconv("gb2312","utf-8",$taskname);
  $hours=iconv("gb2312","utf-8",$hours);*/
  
  $u1=$i+2;
  
  /*----------写入内容-------------*/
  $objExcel->getActiveSheet()->setCellValue('a'.$u1, "$logdate");
  $objExcel->getActiveSheet()->setCellValue('b'.$u1, "$projectname");
  $objExcel->getActiveSheet()->setCellValue('c'.$u1, "$workproperty");
  $objExcel->getActiveSheet()->setCellValue('d'.$u1, "$taskname");
  $objExcel->getActiveSheet()->setCellValue('e'.$u1, "$hours");
  $objExcel->getActiveSheet()->setCellValue('f'.$u1, "$name");
  $i++;
 }
 if($flag)
 {
  // 高置列的宽度
  //echo date('H:i:s') . " Set column widths\n";
  $objExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  $objExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
  
  // 添加条件格式 设置字体echo date('H:i:s') . " Set fonts\n";
  $objExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
  $objExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
  $objExcel->getActiveSheet()->getStyle('C1')->getFont()->setBold(true);
  $objExcel->getActiveSheet()->getStyle('D1')->getFont()->setBold(true);
  $objExcel->getActiveSheet()->getStyle('E1')->getFont()->setBold(true);
  $objExcel->getActiveSheet()->getStyle('F1')->getFont()->setBold(true);
  // 设置页眉和页脚。如果没有不同的标题奇数/即使是使用单头假定.echo date('H:i:s') . " Set header/footer\n";
  $objExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&BPersonal cash register&RPrinted on &D');
  $objExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objExcel->getProperties()->getTitle() . '&RPage &P of &N');
  
  // 设置页方向和规模
  //echo date('H:i:s') . " Set page orientation and size\n";
  $objExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
  $objExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
  
  // 重命名表
  //echo date('H:i:s') . " Rename sheet\n";
  $objExcel->getActiveSheet()->setTitle($sheetname);
  
  // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  $objExcel->setActiveSheetIndex(0);
  //输出内容 (保存到一个默认的路径,用户无法选择路径)
  //$objWriter->save(str_replace('.php', '.xls', __FILE__));
  // or  phpexcel 保存时可以选择路径
  //保存为excel2007格式
  //$sheetname=iconv("utf-8","gb2312", $sheetname);
  $sheetname=iconv("utf-8", "gb2312//IGNORE", $sheetname);
  $filename=date("Y-m-d-H-i-s").'-'.$sheetname.'.xls';

 

 

//下面注释掉的代码,会产生上述问题
  //header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  //header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
 /* Header("Content-type: application/x-msdownload");
  //header('Content-Disposition: attachment;filename="01simple.xls"');
  header('Content-Disposition: attachment;filename="'.$filename.'"');
  header('Cache-Control: max-age=0');
  $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
  $objWriter->save('php://output');
  exit;*/

 

 

//解决方法
  header("Content-type: text/csv");//重要
  header('Content-Disposition: attachment;filename="'.$filename.'"');
  header('Cache-Control: must-revalidate, post-check=0,pre-check=0');
  header('Expires:0');
  header('Pragma:public');
  $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
  $objWriter->save('php://output');
 }

1
1
分享到:
评论

相关推荐

    完美解决phpexcel导出到xls文件出现乱码的问题

    在分享具体解决方法之前,首先需要了解 PHPExcel 是什么以及它在导出文件时可能遇到的问题。 PHPExcel 是一个用 PHP 编写的用于读写 Excel 文件的开源库,它支持从 PHP 5.2 到 PHP 7 的版本,并能创建和编辑 XLS、...

    phpexcel导出多个工作表.zip

    在PHP开发中,有时我们需要将大量数据导出为Excel文件,以便用户进行分析或进一步处理。在这种场景下,`PHPExcel`库是一个非常实用的工具。`PHPExcel`允许开发者创建、读取和修改Excel文件,包括生成多个工作表,每...

    phpExcel导出大量数据出现内存溢出错误的解决方法

    总之,针对phpExcel在导出大量数据时出现的内存溢出问题,我们可以通过采用不同的缓存策略和数据处理方法来有效解决。理解并灵活运用这些方法,可以在保证程序运行稳定的同时,提升处理效率和用户体验。在实际开发中...

    phpexcel导出excel 合并单元格 字体设置 内容自适应

    设置表格字体颜色、数据格式、对齐方式、添加批注、合并拆分单元格、内容自适应、合并单元格、换行

    php phpexcel 导出excel表格源码

    总的来说,使用`PHPExcel`库在PHP中导出Excel表格是一个简单而强大的过程,适合处理各种数据导出需求。通过掌握基本的`PHPExcel`操作,你可以根据实际需求自定义样式、公式和其他高级功能,以满足更复杂的应用场景。

    使用PHPExcel导入导出excel格式文件

    在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格软件,其格式的导入与导出功能对于数据的交互和分析至关重要。本文将深入探讨如何使用PHPExcel库来实现PHP环境中对Excel文件的读取和写入操作。 ...

    PHPExcel PHP导出excel

    php导出excel文档,相关代码组建,已经测试通过了。可共学习使用。

    phpexcel导出工作薄

    在这个场景下,"phpexcel导出工作薄"就是指使用PHPExcel库来生成Excel工作簿的过程。下面将详细讲解如何使用PHPExcel来实现这一功能。 首先,你需要安装PHPExcel库。最常用的方法是通过Composer,PHP的依赖管理工具...

    phpExcel 导入导出带图片的excel表格

    需要注意的是,由于`phpExcel`对大型或复杂Excel文件的处理可能较慢,且不支持某些高级功能,因此在处理大量数据或高复杂度的Excel时,你可能需要考虑其他库,如`phpspreadsheet`(`phpExcel`的升级版)。...

    thinkphp3.2.3整合phpexcel导出功能

    在PHP开发中,ThinkPHP3.2.3是一个流行的MVC框架,而PHPExcel则是一个强大的库,用于处理Excel文件的读写操作。本篇文章将详细介绍如何在ThinkPHP3.2.3中整合PHPExcel来实现数据的导出功能,并讨论如何通过vendor...

    PHPExcel_数据导出excel

    总的来说,PHPExcel是PHP开发者处理Excel文档的得力工具,尤其在数据导出和报表生成方面,它提供了高效、灵活的解决方案。通过熟练掌握这个库,你可以创建出专业且具有交互性的Excel文件,提升你的Web应用的功能性和...

    PHPExcel 1.8 Excel导入导出

    这里的"PHPExcel 1.8 Excel导入导出"是指使用PHPExcel 1.8版本进行Excel数据的导入和导出操作。 首先,我们需要理解PHPExcel的核心概念。它提供了一个对象模型,可以创建、读取和修改Excel文件。在1.8版本中,主要...

    phpExcel导出大量数据.docx

    6. 异步处理:如果系统支持,可以将导出任务作为一个异步操作,让用户等待通知,而不是在请求过程中阻塞。 总结来说,phpExcel是一个强大的工具,可以帮助开发者方便地处理Excel文件,特别是导出大量数据。通过合理...

    ThinkPHP5的PHPExcel导入导出

    本篇文章将详细探讨如何在ThinkPHP5框架中结合PHPExcel来实现导入导出功能。 首先,我们了解下ThinkPHP5。它是一个轻量级的PHP框架,基于MVC(Model-View-Controller)设计模式,提供了丰富的内置功能和良好的性能...

    phpexcel生成excel类

    PHPExcel 是一个强大的 PHP 类库,它允许开发者在 PHP 环境中创建、读取、编辑和保存 Microsoft Excel 文件。这个库支持多种文件格式,包括 .xls 和 .xlsx,这意味着它可以兼容 Excel 的不同版本。PHPExcel 提供了...

    xiabeifeng#study-notes#使用PHPExcel导出excel文件某些数据丢失1

    使用PHPExcel导出Excel文件某些数据丢失做基于微信公众号的Web开发的时候,系统中可能会将用户的微信昵称存储下来,并且可能需要在导出的Excel文件中

    PHPExcel 1.8版本导出excel

    在“PHPExcel 1.8版本导出excel”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **安装和配置**:首先,你需要下载并安装PHPExcel 1.8版本。这通常可以通过Composer(PHP的依赖管理工具)完成,添加相应的...

    phpexcel 导入导出,html格式导出

    在IT行业中,PHPExcel是一个广泛使用的库,专为处理Microsoft Excel文件而设计。它允许开发者在PHP环境中读取、写入和操作Excel文件,从而实现数据的导入和导出功能。在您的项目中,您提到的重点是“phpexcel导入...

    PHP 导出Excel (注:导出带图片的EXCEL也支持)

    8. **解决乱码问题**:如果在保存文件后遇到乱码问题,可能是字符编码不一致导致的。确保你的代码文件、数据库和输出文件都使用相同的UTF-8编码。同时,在写入数据时,确保数据本身是正确编码的。 9. **示例代码**...

    Thinkphp 3.2利用phpexcel将数据通过excel导出

    下面,我们将深入探讨如何在ThinkPHP 3.2中使用PHPExcel将数据导出到Excel文件。 首先,我们需要了解PHPExcel库。PHPExcel是一款开源的PHP类库,用于读取和写入多种Excel文件格式,包括.BIFF(Excel 97-2003)和....

Global site tag (gtag.js) - Google Analytics