所以我需要我的SQL表是可下载的,现在我的php文件创建了一个excel文件并强制下载,但是excel文件只有一个大数组,里面有表的数据。
下面是我的代码
$sql = mysql_query("SELECT * FROM table");
while ($row_user = mysql_fetch_assoc($sql))
{ $userinfo[] = $row_user;
print_r($row_user);
header("Content-Disposition: attachment; filename=\"papi.xls\"");
header("Content-Type: application/vnd.ms-excel;");
header("Pragma: no-cache");
header("Expires: 0");
$file = fopen("php://output","w");
foreach($userinfo as $data)
{
fputcsv($file,explode(',',$data),"\t");
}
fclose($file);
}
任何帮助将不胜感激,谢谢你提前。
3条答案
按热度按时间qv7cva1a1#
有几个PHP库可以帮助你在强制下载之前格式化你的输出excel文件。我使用PHPExcel有很好的经验。
使用PHPExel不会改变从表中访问数据的方式,但会改变处理MySQL结果的方式:
这绝不是唯一的选择,但是,我发现这个库对将数据导出到XLSX文件很有用,并且有额外的选项来格式化它或根据生成报告的需要添加方程。
wlsrxk512#
所以,这是我写的一个类,导出到CSV,并保持一切完美排列.
这段代码是从我在框架中写的一个类派生出来的,这个类处理很多导出的事情。我还写了一个类,它可以读回这些数据。这个类的使用方法是这样的。
lkaoscv73#
类似这样的东西应该可以工作。我使用PDO而不是过时的mysql。我还包含了准备语句,您可能希望在大多数情况下与bindParam沿着使用,以防止SQL注入...即使在本例中不需要它。您会注意到,我还更改了标题,以指示CSV文件而不是Excel文件。
我想让您感到困惑的主要原因可能是您的explode语句,fputcsv通常不需要该语句,但是,我对您的数据并不熟悉。
下面是你写CSV文件的例子。如果你更喜欢Excel .xls或.xlsx文件,你可以使用PHPExel。它确实需要更长的时间来设置,文档也不是最好的,但它做得很好。