2014-12-23 33 views
0

我正在使用CakePHP和PHPExcel生成excel文件, 我可以生成文件並將它們保存在服務器中並且它們可以正常工作,但是當我使用$objWriter->save('php://output');並打開我下載的文件file cannot open file because the file format or file extension is not valid使用PHPExcel生成Excel失敗,因爲文件格式或文件擴展名無效

我竟然用ob_start();在腳本的開始和ob_end_clean();保存過,但我仍然得到同樣的錯誤

這裏是我的代碼(此代碼是從PHPExcel的例子,我剛添加的ob_start和ob_end_clear):

<?php 
ob_start(); 
App::import('Vendor', 'PHPExcel'); 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
date_default_timezone_set('Europe/London'); 

if (PHP_SAPI == 'cli') 
    die('This example should only be run from a Web Browser'); 

// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Set document properties 
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw") 
     ->setLastModifiedBy("Maarten Balliauw") 
     ->setTitle("Office 2007 XLSX Test Document") 
     ->setSubject("Office 2007 XLSX Test Document") 
     ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") 
     ->setKeywords("office 2007 openxml php") 
     ->setCategory("Test result file"); 


// Add some data 
$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A1', 'Hello') 
     ->setCellValue('B2', 'world!') 
     ->setCellValue('C1', 'Hello') 
     ->setCellValue('D2', 'world!'); 

// Miscellaneous glyphs, UTF-8 
$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A4', 'Miscellaneous glyphs') 
     ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); 

// Rename worksheet 
$objPHPExcel->getActiveSheet()->setTitle('Simple'); 


// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 


// Redirect output to a client’s web browser (Excel5) 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 
// If you're serving to IE 9, then the following may be needed 
header('Cache-Control: max-age=1'); 

// If you're serving to IE over SSL, then the following may be needed 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified 
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
header('Pragma: public'); // HTTP/1.0 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
ob_end_clean(); 
$objWriter->save('php://output'); 
exit; 

,這裏是生成的文件:https://mega.co.nz/#!RZFURbTA!DaGVv1NzRZn3VGq0FSf57nQTKiB--4sq2udj2HkTq2U

回答

1

在文本編輯器中的文件,你會發現一個換行符作爲文件的第一個字符....儘管你使用ob_end_clean()你的腳本是注入這個新行到PHP輸出流保存之前(也許是一個空行之前開幕<?php

+0

我檢查,我甚至寫道「<?php ob_start ();' –

+1

您可能已經檢查過了,我只是在報告證據,並且猜測空白行來自哪裏......但是文件頂部的空白行來自某處 –

+0

有沒有我可以找出它來自哪裏? –

相關問題