【问题标题】:PHP Export Excel to specific Path?PHP将Excel导出到特定路径?
【发布时间】:2012-09-06 17:19:17
【问题描述】:

是否可以将 PHP MySQL Excel 工作表导出到指定路径,例如 USB 闪存驱动器。 这是因为我使用 php 作为销售点,而我现在想要的只是单击一个按钮 - 它会从 MySQL 数据库中收集记录并将其作为 excel 或 csv 文件导出到 USB 闪存驱动器。

我已经尝试用谷歌搜索,但我似乎找不到任何东西。

谢谢。

【问题讨论】:

  • 你的意思是后台保存到U盘吗?如果您要强制输出,您会看到一个文件保存对话框,然后您可以选择要保存的位置。你不能吗?
  • 是的,我想将它保存到 USB 闪存驱动器。好吧,我想是否有一种方法可以快速创建和保存 Excel 文件。但不管怎样,我该怎么做呢?
  • @AliHamra 如果您对某个答案感到满意,请点击箭头下方的勾号接受答案,或者发布额外信息以便用户在您仍有问题时更好地帮助您。

标签: php mysql csv usb export


【解决方案1】:

您需要编写文件。要写入 USB 驱动器,您只需指定正确的文件路径。如果你在 *nix 上,它就像在 Linux 上的 /media/USB/ 或在 Mac 上的 /Volumes/USB/。对于 Windows,它类似于 F:/

这样粗略的例子就像

$a = array('1','2','3'); //This is imaginable row from MySQL
$f = fopen('F:/mycsv.csv', 'w');
fputcsv($f, $a);
fclose($f);

fputcsv 的手册是 here

如果需要,您可以通过您的应用程序支持的任何方式向用户询问文件路径。

【讨论】:

  • 谢谢!我会尝试解决这个问题,但如果“mycsv.csv”文件不存在怎么办?如何通过 PHP 创建一个?如果存在,则不应覆盖 csv 文件。我正在使用 Windows。
  • 给定的示例将创建文件或覆盖现有文件。注意fopen 的第二个参数。
  • AliHamra,如果您知道路径,我的示例将起作用。如果您只想让用户能够将文件保存在任何路径(包括 USB 驱动器甚至网络驱动器),请查看 @mrmryb 解决方案。
  • 这真的有效吗?他想将文件保存到便携式usb,fopen('F:/mycsv.csv', 'w');会将文件保存在服务器上而不是向浏览器输出数据?
  • 他说他在销售点使用 PHP,所以我认为它只是在本地运行。
【解决方案2】:

保存为excel不是一个简单的过程,但是写一个csv相对简单。

$temp = tempnam(sys_get_temp_dir(),'tmp');
$handle = fopen($temp,'w');
$query = $pdo->prepare("select * from table");
$query->execute();
$row=$statement->fetch();
$keys=array_keys($row);
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export_'.date('dmY').'.csv');
fputcsv($handle,$keys);
while($row){
fputcsv($handle,$row);
$row=$statement->fetch();}
echo file_get_contents($temp);
fclose($handle);

这会在您的临时文件夹中创建一个临时文件,您将 csv 写入该文件,然后为其提供 csv 标题并将其回显,从而为用户提供一个保存文件框。 我在循环之前调用 $row 一次以获取带有 array_keys 的表列并首先输出这些列,然后在循环结束时调用 $row=$statement->fetch() 进行循环。

【讨论】:

  • mysql_* 函数已弃用。见here
  • 我不建议逐字复制,但创建 csv 文件的基本原则是他所要求的,而且它们就在那里,我确信他的查询已经写好了。
  • 我同意,但显然在这种情况下,代码会逐字复制,然后您会收到“为什么它不起作用”的问题:)
  • 我在注释中添加只是为了确保不会发生这种情况,我同意你的观点,最好让发帖者意识到这一点。
  • 为什么不创建临时文件,写入然后读取,直接以php://output 的形式打开文件并将csv 输出到浏览器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多