2014-11-04 136 views
0

我想用PHPExcel下载excel文件,就像下载excel文件很好,但是excel文件中的数据全是废话..这不是我所期望的。我通过了非常基本的方法来测试我的Excel工作表数据输出。使用PHPExcel下载Excel文件

这里是代码我'尝试

else if($request->p['type'] == 'excel') 
    { 

     $report_type_name = "Graph Survey Report"; 
     $ExcelReport = new ExcelApExport($sections, $group_definition, $questions, $sample_corrections); 
     $objPHPExcel = $ExcelReport->export($sets, $disp_filter); 
     header('Content-Type: application/vnd.ms-excel'); 

     header("Content-Disposition: attachment; " 
      . escape_for_content_disposition("{$report_name} - {$report_type_name} - " . date("Y-m-d.H.i") . ".xls")); 
     header('Cache-Control: max-age=0'); 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

     $objWriter->save('php://output'); 

     exit; 
    } 

也让我在这里对象,并调用此方法phpexcel

public function export($Sets, $disp_filter) 
{ 

    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getProperties()->setTitle("Offic excel Test Document"); 
    $objPHPExcel->getProperties()->setSubject(" Test Document"); 
    $objPHPExcel->getProperties()->setDescription("Test document for XLS, generated using PHP  classes."); 
    //echo date('H:i:s') . " Add some data\n"; 
    $objPHPExcel->setActiveSheetIndex(0); 
    $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!'); 

    return $objPHPExcel; 

} 

here is what i get in my downloaded excel file

请你可以建议我,为什么这个垃圾数据显示在我的文件中而不是预期的数据。 由于事先

+0

几乎是肯定的,因为东西在你的脚本输出空白字符(可能是一个新行)之前,该文件被保存到php://输出 – 2014-11-04 15:38:01

+0

我没有得到的代码的一部分,我在哪里添加任何空格,你可以请我建议我在哪里可以在代码中修复它 – Maggi 2014-11-04 15:46:02

+1

我不知道....除了您发布的两个小方法外,我看不到您的代码....如果您绝对必须尝试在sav之前执行ob_clean() e() – 2014-11-04 15:51:54

回答

1
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

这是.xls的X文件作家。 (参见:https://github.com/PHPOffice/PHPExcel/blob/develop/Examples/01simple-download-xlsx.php

所以正确的标题是:

// Redirect output to a client’s web browser (Excel2007) 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header("Content-Disposition: attachment; " 
     . escape_for_content_disposition("{$report_name} - {$report_type_name} - " . date("Y-m-d.H.i") . ".xlsx")); //.xlsX! 

旧的.xls,文件的作者是:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

参见:https://github.com/PHPOffice/PHPExcel/blob/develop/Examples/01simple-download-xls.php

+0

我试过这两套: 1.在一个头文件中使用xlsx扩展名,在createWriter中使用Excel2007,这使我不在Excel中打开的xlsx文件,我通过文本编辑器打开它,它再次将所有的垃圾写入它,而不是我希望的文本。 2.我也尝试了一套Excel5和xls扩展,它给了我上面的结果。 – Maggi 2014-11-04 16:07:08

2

它需要基本

ob_clean();

保存对象之前。

0

我最近就遇到了这个问题,并在这里发现另一篇文章,这是非常有益的,如果乌拉圭回合仍然有)使用ob_clean后问题(

check this post