【问题标题】:MySQL to Excel generation using PHP使用 PHP 生成 MySQL 到 Excel
【发布时间】:2010-04-26 12:59:18
【问题描述】:
<?php
    // DB Connection here
    mysql_connect("localhost","root","");
    mysql_select_db("hitnrunf_db");

    $select = "SELECT * FROM jos_users ";
    $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
    $fields = mysql_num_fields ( $export );

    for ( $i = 0; $i < $fields; $i++ )
    {
        $header .= mysql_field_name( $export , $i ) . "\t";
    }

    while( $row = mysql_fetch_row( $export ) )
    {
        $line = '';
        foreach( $row as $value )
        {
            if ( ( !isset( $value ) ) || ( $value == "" ) )
            {
                $value = "\t";
            }
            else
            {
                $value = str_replace( '"' , '""' , $value );
                $value = '"' . $value . '"' . "\t";
            }
            $line .= $value;
        }
        $data .= trim( $line ) . "\n";
    }
    $data = str_replace( "\r" , "" , $data );

    if ( $data == "" )
    {
        $data = "\n(0) Records Found!\n";
    }

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=your_desired_name.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$header\n$data";
?>

以上代码用于从 MySQL 数据库生成 Excel 电子表格, 但我们收到以下错误:

您尝试打开的文件“users.xls”位于 与文件扩展名指定的格式不同。 验证文件没有损坏并且来自受信任的 打开文件之前的源。是否要打开文件 现在?

问题是什么,我们如何解决?

【问题讨论】:

  • 对我来说效果很好,你的代码很有帮助。

标签: php mysql excel xls


【解决方案1】:

您并没有真正生成 Excel 文件。您正在使用制表符作为分隔符生成相当于 .csv 文件的内容。

要生成“真实”的 Excel 文件,请使用 PHPExcel

【讨论】:

  • 使用 .NET,您不妨只使用 Excel COM 对象并直接使用它。 PHPExcel 通常用于非 Windows 平台。
  • Excel COM 对象与 PHPExcel 不同,需要在机器上安装 Excel。
【解决方案2】:

问题在于,当 Excel 看到以 .xls 结尾的文件时,它希望该文件符合其 BIFF 标准。您的代码不会生成符合 BIFF 的文件。如果您愿意,我可以为您提供生成符合 BIFF 的文件的 PHP 函数,但是在这里发布太长了。

【讨论】:

    【解决方案3】:

    您似乎正在生成一个包含制表符分隔字段的文件,并且在您的标题中声称这与二进制 Excel 电子表格使用的格式相同。它不是 Excel 使用的格式。加载电子表格的程序让你知道你在误导别人——可能只是你自己。

    您可能应该考虑使用 CSV 文件等导出格式;从制表符分隔转换为逗号分隔并不难。

    【讨论】:

      【解决方案4】:

      如果您只是要创建一个制表符分隔的文件,为什么不跳过 PHP 并让 MySQL 使用 SELECT INTO OUTFILE 来为您做这件事呢?

      PHP 可以处理下载部分。将 Content-type 标头设置为 text/plain。 Excel 知道如何打开它。

      【讨论】:

        【解决方案5】:

        修改代码以使用纯 CSV,然后将文件以 .csv 结尾的文件名和内容类型 text/csv 的形式返回到浏览器。

        我以前见过有人尝试这样做,但它只适用于某些特定版本的 Office Excel。它不适用于具有其他电子表格程序或每个版本的 Excel 的其他平台。使用标准文件格式,或者至少以 Excel 期望的方式生成包含 XLS 数据的正确 OLE2 复合文档文件(如果您要将文件作为该文件类型发送到浏览器)。

        【讨论】:

          【解决方案6】:

          您的程序正在寻找一个标准的.xls 文档,它与您输出的完全不同。您的程序输出一个制表符分隔的工作表,它是一个.txt 文件。尝试将您的程序从制表符切换为逗号作为分隔符并保存为.csv(逗号分隔值)。

          【讨论】:

            【解决方案7】:

            试试 PEAR 的(PHP 扩展和应用程序存储库)Spreadsheet_Excel_Writer。我用它来生成 BIFF 格式的 Excel 文件。

            【讨论】:

              猜你喜欢
              • 2014-05-01
              • 1970-01-01
              • 2018-05-20
              • 1970-01-01
              • 2017-03-22
              • 2018-09-19
              • 2013-05-18
              • 2011-05-14
              • 1970-01-01
              相关资源
              最近更新 更多