2009-06-10 112 views
2

我不是PHP专家(仅仅是初学者),但需要一些帮助!将mySQL导出为ex​​cel或csv

经过几小时搜索谷歌并尝试了大约100个不同的脚本,我终于找到了一个能够满足我需要的东西 - 差不多。

基本上,我的网站有一个标记为“导出到Excel”的按钮。访问者点击网站按钮,下载开始包含来自指定表格的所有数据。

我发现这个在这里 - PHP code to convert a MySQL query to CSV

这不正是我想要的只是用户会看到试图打开文件时出现以下错误:

错误 - “您要的文件打开“export.xls”的格式与文件扩展名指定的格式不同。在打开文件之前,验证该文件是否已损坏并且来自受信任的来源。我想现在打开文件?'

用户单击'是',文件将打开所有数据!辉煌!除用户将不会打开此错误的文件。

如果有人知道解决此问题的方法,我将不胜感激。

非常感谢

TT

+0

是您使用Office 2007的用户吗?你有没有尝试过头(“ContentType:application/vnd.ms-excel”)? – Perpetualcoder 2009-06-10 17:46:04

+0

@TheTub检查出http://stackoverflow.com/questions/976483/exporting-gridview-to-excel-in-web-app/976566#976566为另一个线程处理这个相同的问题。 – 2009-06-10 17:48:24

+0

- 是的标题已经说明了内容类型。 – TheTub 2009-06-10 18:11:09

回答

5

或者,您可以在上述解决方案中更改脚本以返回.csv扩展名的文件。 .csv文件与Excel关联,因此应直接打开。

2

好了,这导致从Excel 2007中指定的功能,称为扩展硬化。您可以关闭它,但只能在客户端完成。如果点击“确定”或“是”,文件仍然会打开。有关更多信息,请检查this blog post

编辑:这是什么意思是Excel发现该文件是不同类型的(如HTML或CSV)文件扩展名指定的内容。因此,Excel想警告你,这个文件不是它所说的。除非要在服务器上创建本机Excel文件,否则会提示用户下载它们,除了每个用户在其自己的计算机上关闭Extension Hardening之外,没有绕过此错误的办法。

0
Dim objXL As Excel.Application 
Dim objWkb As Excel.Workbook 
Set objXL = New Excel.Application 
'turn off excel warnings 
objXL.DisplayAlerts = False 
'Open the Workbook 
Set objWkb = objXL.Workbooks.Open(fpath) 
0
functions sendFile($filename,$content_type="application/ms-excel") { 
    header('Content-type: '.$content_type); 
    header('Content-disposition: Attachment; filename=' . $filename); 
    readfile($filename); 
} 
0

我有同样的问题,所以我看了看下面的链接:PHP code to convert a MySQL query to CSV

我修改了答案,以获得头工作之一。

include('DBFILE.PHP'); 
$select="SELECT * FROM SOMETable"; 


$result = mysqli_query($conn, $select); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 

//This is what I changed... 
$headers =""; 
while ($property = mysqli_fetch_field($result)) { 
    $headers.= $property->name.","; 
} 
$headers.="\n"; 
////// 

$fp = fopen('php://output', 'w'); 
if ($fp && $result) { 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    fputcsv($fp, $headers); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) { 
     fputcsv($fp, array_values($row)); 
    } 
    die; 
} 

我测试了这一点,它的工作原理就像一个魅力,你只需要添加你的数据库连接,或者包括您有db.php中的文件。

如果编辑下面一行

header('Content-Disposition: attachment; filename="export.csv"'); 

更改出口什么都命名你喜欢,你可以更改文件的名称。