将mySQL导出为ex​​cel或csv

时间:2009-06-10 17:39:41

标签: php mysql excel

我不是PHP专家(仅仅是初学者)但需要一些帮助!

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

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

我在这里找到了这个 - PHP code to convert a MySQL query to CSV

这正是我想要的,除了用户在尝试打开文件时看到以下错误:

  

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

用户点击“是”,文件将打开并显示所有数据!辉煌!除非用户不会使用此错误打开文件。

如果有人知道解决这个问题的方法,我将非常感激。

非常感谢

TT

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

好的,这是由Excel 2007指定的名为Extension Hardening的功能产生的。您可以将其关闭,但这只能在客户端完成。如果单击“确定”或“是”,则文件仍应打开。查看this blog post了解详情。

编辑:这意味着Excel发现该文件与文件扩展名指定的文件类型不同(例如HTML或CSV)。因此,Excel希望警告您此文件不是它所说的。除非您要在服务器上创建本机Excel文件,然后提示用户下载它们,否则无法解决此错误,除非每个用户在自己的计算机上关闭“扩展强化”。

答案 2 :(得分:1)

  

如果您错误地将文本文件Excel的第一个字母“ID”   假设您正在尝试打开SYLK文件。

如果第一行和&列值为“ID”,Excel将抛出此警告。只需将其从“ID”更改为其他任何内容。

信用:http://alunr.com/excel-csv-import-returns-an-sylk-file-format-error/

答案 3 :(得分: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)

答案 4 :(得分:0)

functions sendFile($filename,$content_type="application/ms-excel") { 
  header('Content-type: '.$content_type);  
  header('Content-disposition: Attachment; filename=' . $filename);  
  readfile($filename);   
} 

答案 5 :(得分: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"');

将导出更改为您喜欢的名称。