2017-05-29 65 views
0

我发现下面的在线某处的功能应该得到一些MySQL数据和下载为CSV/Excel中。它有点类似,但不是触发用户浏览器中的文件下载,而是将数据转储到响应流的末尾,并在浏览器窗口的底部显示所有其他页面内容。我究竟做错了什么?下载CSV仅仅发出CSV内容页面响应

重要:如果我从Excel内容类型为CSV改变,这都没有区别,我也得到相同的结果,虽然在技术上它创建CSV内容,并没有真正的Excel内容。

function DownloadQueryToCSV($sql, $filename){ 
    $result = mysql_query($sql) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno()); 
    $file_ending = "xls"; 
    header("Content-Type: application/xls");  
    header("Content-Disposition: attachment; filename=$filename.xls"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    $sep = "\t"; //tabbed character 

    for ($i = 0; $i < mysql_num_fields($result); $i++) { 
     echo mysql_field_name($result,$i) . "\t"; 
    } 
    print("\n");  

    while($row = mysql_fetch_row($result)) 
    { 
     $schema_insert = ""; 
     for($j=0; $j<mysql_num_fields($result);$j++) 
     { 
      if(!isset($row[$j])) 
       $schema_insert .= "NULL".$sep; 
      elseif ($row[$j] != "") 
       $schema_insert .= "$row[$j]".$sep; 
      else 
       $schema_insert .= "".$sep; 
     } 
     $schema_insert = str_replace($sep."$", "", $schema_insert); 
     $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
     $schema_insert .= "\t"; 
     print(trim($schema_insert)); 
     print "\n"; 
    } 
    die(); // WARNING: Must die at end of function, else other page contents will end up in spreadsheet!! 
} 

主持人:这有什么好做Excel和不是mysql to excel formatting issues

+0

'mysql'已被弃用,将从'PHP版本中删除5.5' –

+0

的可能的复制[MySQL的到Excel格式问题(https://stackoverflow.com/questions/22580848/mysql-to-excel-formatting-issues) –

+0

RTFM,什么是“写标题调用“?谢谢。 – HerrimanCoder

回答

0

重复尝试使用Excel的内容类型,这里列出:What is a correct mime type for docx, pptx etc?

.xls  application/vnd.ms-excel 

如果不是足够,尝试添加这个(虽然我意识到CSV是文本):

Content-Transfer-Encoding: binary 
+0

谢谢。我遇到的另一个问题是在加载其他页面内容之后流式传输文件。一旦我在任何页面内容之前将文件流下来,它运行良好。 – HerrimanCoder