问题将数据库查询结果导出到Excel

时间:2013-06-20 03:56:14

标签: php

我需要将MySQL查询的结果导出到Excel文件。我选择了一些代码来实现这一目标,但有一个问题。代码使用.xls内容类型将标头信息发送到浏览器,并在标头后面显示查询结果。被调用页面的代码如下:

<?php
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

// filename for download
$filename = "customer_inventory_" . date('Ymd') . ".xls";

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");

$flag = false;
$query = "SELECT customer_id,sku,qtyoh,date FROM sims_customer_inventory WHERE   customer_id=$customer_id and date=(select max(date) from sims_customer_inventory)";
$result = mysql_query($query, $conn) or die(mysql_error());
while(false !== ($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";
?>

问题在于以这种形式调用页面时:

<form action="inventory_download.php" method="get" onsubmit="return validateInventoryform();">

该文件不会自动下载。但是,当我刷新页面时,文件会下载。我的问题是,当调用页面时,这应该自动执行代码来下载文件。它没有这样做。我已经浏览了整个互联网来解决问题,但我无法找出它为什么不起作用。

1 个答案:

答案 0 :(得分:0)

此问题是由将ajax数据传递到创建.xls数据的外部页面引起的。答案是关闭链接中的ajax数据:

<a href="something.php" data-ajax="false">

这将允许php代码正常工作。仍有问题,这实际上不是有效的Excel文件。此代码创建一个标头,并在其后面跟上被解释为Excel文件的数据。它不是Excel文件,但它在Excel中打开,然后可以保存为Excel文件。这是一个重要的区别。如果您需要实际的Excel文件,那么您应该使用PHPExcel。这可能是最好的选择。