【发布时间】:2011-11-19 06:40:47
【问题描述】:
我有一个 .php 页面,其中显示了一个类似于此的 HTML 表格:-
<table border="1">
<tr bgcolor="DCDCDC">
<th><div align="center"><b>Data1</b></div></th>
<th><div align="center"><b>Data2</b></div></th>
<th><div align="center"><b>Data3</b></div></th>
</tr>
然后表格下面会显示一些数据。如果用户想要将表的 .xls 文件下载到他们的 PC,我允许在 URL 中传递一个变量。文件下载代码类似这样:-
function savexls(){
$data = array( array("Data1" => "Mary", "Data2" => "Johnson", "Data3" => 25),
array("Data1" => "Amanda", "Data2" => "Miller", "Data3" => 18),
array("Data1" => "James", "Data2" => "Brown", "Data3" => 31),
array("Data1" => "Patricia", "Data2" => "Williams", "Data3" => 7),
array("Data1" => "Michael", "Data2" => "Davis", "Data3" => 43),
array("Data1" => "Sarah", "Data2" => "Miller", "Data3" => 24),
array("Data1" => "Patrick", "Data2" => "Miller", "Data3" => 27) );
# filename for download
$filename = "Dividend Data " . date("F j, Y") . ".xls";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
$flag = false;
foreach($data as $row) {
if(!$flag) {
# display field/column names as first row
echo implode("\t", array_keys($row)) . "\r\n";
$flag = true;
}
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\r\n";
}
}
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
如果变量在 URL 中,我在检索变量后使用以下代码行在 php 代码中调用 savexls() 函数:-
if ($xls=="y") {
savexls();
}
我遇到的问题是,如果我在 URL 中声明 ?xls=y,则 html 表数据不会输出到屏幕,尽管 xls 文件确实会下载到 PC。
如果我不声明 ?xls=y ,则 .XLS 文件不会被下载,并且 HTML 表格会很好地打印在屏幕上。
为什么编写 .xls 文件的行为会阻止另一个 HTML 表格打印到屏幕上?对我来说,它们看起来像是完全独立的功能,但保存文件似乎会阻止第一个 HTML 打印代码停止工作。
我不知道问题是什么,除了有一种模糊的感觉,我可能应该将表格打印和 xls 文件保存在不同的 PHP 文件中,这可能会解决我的问题,但我我不知道该怎么做。
首先我想知道为什么这样做会出现问题,其次,有没有解决这个问题的好方法?
【问题讨论】:
标签: php file html-table save xls