使用PHP生成MySQL到Excel

<?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”与文件扩展名指定的格式不同。 打开文件之前,validation该文件是否已损坏并且来自受信任的来源。 你想现在打开文件吗?

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

你不是真的生成一个Excel文件。 您使用制表符作为分隔符生成相当于.csv文件的内容。

要生成一个“真正的”Excel文件,请使用PHPExcel 。

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

您似乎正在生成一个带有制表符分隔字段的文件,并且在您的标题中声明这与二进制Excel电子表格使用的格式相同。 这不是Excel使用的格式。 加载电子表格的程序让你知道你误导了人 – 也许只是你自己。

您应该考虑使用导出格式,如CSV文件; 从制表符分隔转换为逗号分隔不会很难。

如果你只是想创build一个制表符分隔的文件,为什么不跳过PHP,让MySQL用SELECT INTO OUTFILE为你做呢?

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

修改代码以使用纯CSV,然后将文件作为以.csv结尾的文件名和内容typestext / csv返回给浏览器。

我曾经见过人们试图做到这一点,它只适用于某些特定版本的Office Excel。 它不适用于其他电子表格程序的平台或每个版本的Excel。 使用标准的文件格式,或至less生成一个包含XLS数据的正确的OLE2复合文档文件,其方式是Excel期望如果您要将该文件作为该文件types发送到浏览器。

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

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