【发布时间】:2013-09-20 11:17:32
【问题描述】:
我正在使用 PHP 通过 CSV 生成 Excel 文件。在用我自己的数据填充之前,我正在使用一段非常简单的代码来准备整个函数:
$list = array (
array('#', 'Registrar', 'Country', 'Website', 'Email Address'),
array('123', '456', '789', 'aaa', 'bbb'),
array('123', '456', '789', 'aaa', 'bbb'),
);
$fp = fopen('myfile.xls', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields, "\t", '"');
}
fclose($fp);
代码运行良好。但是,它会自动将“myfile.xls”保存到执行 PHP 文件的目录中。我希望页面显示“打开/保存”对话框,让用户选择他/她想要保存文件的位置。我尝试了一些类似这样的标题技巧:
header ("Content-Type: application/download");
header ("Content-Disposition: attachment; filename=myfile.xls");
header("Content-Length: " . filesize(myfile.xls));
但是,当使用它时,导出的文件会显示页面内容(包括带有标题的页眉、菜单、页脚等),而不是“列表”变量中的数据......我可以' t阻止页眉和页脚包含在PHP页面中,因为它是框架的一部分,所以我只想选择通过PHP的CSV函数生成的“myfile.xls”的存储位置。
我也考虑并尝试使用 PHPExcel 和其他旨在生成 Excel 的软件包,但我无法让它们中的任何一个正常工作。我已经失去了太多天的尝试,所以我决定简单地创建一个 CSV 文件,这对我的目的来说是可以的。我现在唯一需要的是“打开/保存”对话框,它对我来说是完美的。
提前感谢您的时间和精力! :)
【问题讨论】:
-
大多数框架都提供了一些机制,允许您隐藏自己的标头并使用自己的标头,那么您使用的是什么框架?
-
嗨,马克!我正在使用 Yii 框架,它总是将其页面“嵌入”到框架中,显示页眉、菜单和页脚......
-
我不是框架专家,但肯定有一些内置在 Yii 中的方法可以抑制自己的标题,从而允许您使用自定义标题覆盖它们:例如用于提供非 html 数据 (yiiframework.com/forum/index.php?/topic/…)
-
嗨,马克,感谢您的宝贵时间!我在框架中找到了一个方法,可以按照你说的做(虽然我还没有实现它,因为它不是那么容易使用)。但是,我认为应该有一种最简单的方法来显示我实际生成的文件的对话框:“myfile.xls”已生成并保存在我的 PHP 脚本的根目录中,我只是想在浏览器中询问我“你想把这个文件存储在哪里?”...没有最简单的方法吗?
-
这一切都归结为您发送到浏览器的标头;并使用
php://output作为您的文件名...无论您使用的是 PHPExcel、一个简单的 csv(正如您所做的那样)、PDF、图像和 mpeg,以及您想要创建并直接发送到浏览器的任何内容,这同样适用
标签: php excel file csv savefiledialog