我使用以下代码将 mysql 查询的结果下载到 excel 文件。
function Button14Click($sender, $params)
{
IF ($this->ReadTheDates($Date1,$Date2))
{
mysql_connect('myServer','user','password');
mysql_select_db('myDatabase');
$SQLstr2 = $this->GetMySQL();
$result = mysql_query($SQLstr2);
// filename for download
$filename = "File " .$Date1.' '.$Date2. ".xls";
header("Content-Disposition: attachment; filename='"$filename'"");
$flag = false;
while($row = mysql_fetch_assoc($result))
{
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";
}
exit();
}
将标头设置为通过文件下载数据后,例如标头("内容分发...此标头将保持活动状态,直到我手动重新加载页面。例如,如果我在以下命令中创建并运行一个新查询而不是用于下载,我仍然会收到包含我刚刚下载的文件的下载对话框!
如何重置或删除标头到上述使用命令标头 (...) 更改它之前的状态,并返回到"正常"执行?
我已经尝试了header_remove()和几种从代码重新加载页面的方法,但没有成功。
好的,我通过将"Excel"导出移动到一个新窗口来解决我的问题,我用 $_SESSION 向量将参数传递给该窗口。请参阅下面的示例。现在它起作用了。
function Button14Click($sender, $params)
{
session_start();
$_SESSION['datt1'] = $this->JTDatePicker1->Date;
$_SESSION['datt2'] = $this->JTDatePicker2->Date;
$_SESSION['PilotIdx'] = $this->JTLookupComboBox1->getSelectedValue();
$_SESSION['FlygplanIdx'] = $this->JTLookupComboBox4->getSelectedValue();
$_SESSION['KlubbIdx'] = $this->JTLookupComboBox2->getSelectedValue();
?>
<script type="text/javascript">
myWindow = window.open("ExcelDownloadForm.php");
</script>
<?php
}