2015-04-20 23 views
0

我想知道如何使用PHPExcel创建文件后重定向页面。创建的文件没问题,但重定向到另一个页面不是。以下是一些代码。创建Excel文件后PHPExcel重定向页面

$excel -> setActiveSheetIndex(0); 
$_SESSION["information"] = "Motor Line Checking Completed."; 
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
header("Content-Disposition: attachment;filename='".$report_name.".xlsx'"); 
header("Cache-Control: max-age=0"); 
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007"); 
$writer -> save('php://output'); 
exit; 
header("Location: ".$_SERVER["HTTP_HOST"]."/../../"); 
exit; 

注:

  • 如果我删除exit;save();后,XLSX文件将被损坏。
  • 如果我在save();之前移动header("Location:...");,它将重定向但不会创建xlsx。
  • 我也尝试使用JavaScript重定向。

我想要的是创建xlsx并重定向页面后。

+2

可以让这个excel文件重定向页面后。 –

+1

在这里看到一个参考:http://stackoverflow.com/questions/822707/php-generate-file-for-download-then-redirect – nomistic

+0

嗨@AnowarCst,这是否意味着我必须先重定向并在那里创建文件? – juntapao

回答

0

我想出了一个解决方案,只提供重定向页面上的链接。从该页面我可以创建该链接的触发器来自动下载文件。

从创建该文件的页面:

$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007"); 
$metaDatas = stream_get_meta_data(tmpfile()); 
$tmpFilename = $metaDatas['uri']; 
$writer -> save($tmpFilename); 
$newfile = "../outbox/".$report_name."_".substr(date("Y"), -2).date("mdhis").".xlsx"; 
rename($tmpFilename, $newfile); 
$tmpary = explode("/", $newfile); 
$_SESSION["download"] = $tmpary[count($tmpary) - 1]; 
$_SESSION["information"] = "File Creation Completed."; 

从重定向页面:

<?php 
if(isset($_SESSION["information"])) { 
    echo $_SESSION["information"]; 
    if(isset($_SESSION["download"])) { 
?> 
    <a href="outbox/<?php echo $_SESSION["download"]; ?>"> 
     <button class="download" type="button">Click here to download <?php echo $_SESSION["download"]; ?> file.</button> 
    </a> 
<?php 
    } 
    session_unset(); 
} 
?> 
+0

我面临同样的问题,但会话方法不起作用。但我的代码看起来像[stackoverflow问题链接](http://stackoverflow.com/questions/31593588/create-formatted-excel-spreadsheet-with-mysql-data-and-php-using-tables/31594131#31594131) 你有我吗? –

+0

你在页面的开头有'session_start()'吗? – juntapao

+0

我采用了另一种方法 –