通过php问题将数据导出到.xls

时间:2014-05-29 01:28:33

标签: php converter xls

我通过php将数据导出到.xls文件并出现以下问题:当我导出少量行时,它工作正常,但是当我导出大量行时,电子表格会被下载为.php文件。

我的代码摘要(名为 export.php ):

header("Content-type: application/vnd.ms-excel;");

echo 'Column1' . "\t" . 'Column2' . "\t" . 'Column3' . "\n";

while($data = $sql_data->fetch(PDO::FETCH_ASSOC)){
   echo $data['column1'] . "\t" . $data['column2'] . "\t" . $data['column3'] . "\n";
}

header("Content-disposition: attachment; filename=file.xls");

当导出的电子表格非常大时,它会附带php脚本的文件名和扩展名( export.php ),但我可以用Microsoft Excel打开它。所以,我只希望它提供正确的文件名和扩展名( file.xls ),无论文件大小如何。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您应该将标题调用放在顶部。如果您的代码意外输出任何内容,那么您的所有标题都将被刷新。这就是为什么它以php的形式下载的原因。标题调用定义" file.xls" filename和download-as-attachment行为位于while循环之下。

任何数据输出到屏幕之前,需要进行标题调用。

您可以阅读有关php Output Controls here的更多信息。

header("Content-type: application/vnd.ms-excel;");
header("Content-disposition: attachment; filename=file.xls");

echo 'Column1' . "\t" . 'Column2' . "\t" . 'Column3' . "\n";
while($data = $sql_data->fetch(PDO::FETCH_ASSOC)){
   echo $data['column1'] . "\t" . $data['column2'] . "\t" . $data['column3'] . "\n";
}

至于为什么你的代码在大文件上执行此操作,可能是因为你超过了你的最大缓冲区大小,它只是转储它之前的任何东西。要么在PHP中增加内存限制,要么创建更小的电子表格;)

相关问题