2013-06-20 198 views
0

我需要将MySQL查询的结果导出到Excel文件。我拿起一些代码来实现这一点,但有一个问题。代码将头信息以.xls内容类型和头部后面的查询结果发送给浏览器。对于所谓的页面的代码如下:问题将数据库查询结果导出到Excel中

<?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();"> 

文件不会自动下载。但是,当我刷新页面的文件下载。我的问题是,当页面被调用时,应该自动执行代码来下载文件。它不这样做。我已经看遍了所有的网络来解决这个问题,但是我找不到为什么它不起作用。

+2

不知道你在哪里选择了该文件,但命名该文件.xls不会使其成为一个excel文件。不妨将它命名为sex.mp4,并且看到它神奇地变成了色情视频。这是我用来制作有效的excel文件的库:http://phpexcel.codeplex.com/ – 2013-06-20 04:05:44

+0

..如果你不需要任何格式化,为什么不创建一个csv,它与excel和许多其他应用程序 – 2013-06-20 04:17:39

+0

用户特别需要.xls文件。代码确实起作用,它只是在页面刷新之前不发送页眉信息。这是我无法弄清楚的部分。 – attentionjay

回答

0

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

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

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