【问题标题】:Export records in excel file [closed]在excel文件中导出记录[关闭]
【发布时间】:2011-12-26 07:41:15
【问题描述】:

我创建了一个 Web 应用程序,我想添加一个功能,比如用户可以导出所选记录...

Check Box   Name    Email

            Sumit   sumit@gmail.com
            Karan   karan@gmail.com

我想将此记录导出到 Excel 文件中,但应该只导出选定的记录。

提前致谢

【问题讨论】:

  • 你可以使用 PHPExcel phpexcel.codeplex.com ,但是你的问题有点太开放了...
  • @hakre - 不要重复那个问题。它适用于过于复杂的特定脚本。
  • @hakre - 我还不能投票结束问题,没有足够的代表。简单地说,如果你要投票结束一个问题,你至少应该尽职尽责地找到一个实际的重复项。最好有一个好的答案,这样其他人也会得到帮助。

标签: php mysql


【解决方案1】:

无需下载外部库 - 您需要的一切都已内置在 PHP 中。

步骤:

  1. 在 php 中查询以获取要输出的行
    您可以使用SELECT * FROM table WHERE id IN (1,2,...)
  2. 使用mysql_fetch_array()mysql_fetch_assoc() 一次获取一行
  3. 使用 fputcsv() 将它们输出到以 csv 结尾的文件 - 这将正确地转义您的数据

http://www.php.net/manual/en/function.mysql-fetch-array.php
http://php.net/manual/en/function.fputcsv.php

Excel 将能够读取该文件。

覆盖fputcsv 的默认值以使用制表符作为分隔符,Excel 将更轻松地读取文件。如果您使用逗号(默认),您可能需要选择逗号作为 Excel 导入的分隔符。

这是一个工作示例,假设您已经设置了行:

$rows; // predefined
$filename = 'webdata_' . date('Ymd') . '.csv';

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/octet-stream"); 
// that indicates it is binary so the OS won't mess with the filename
// should work for all attachments, not just excel

$out = fopen("php://output", 'w');  // write directly to php output, not to a file
foreach($rows as $row)
{
  fputcsv($out, $row);
}
fclose($out);

【讨论】:

  • 非常感谢我会检查它..
  • 在我多年的 PHP 中,我从未真正使用过 fputcsv —— 通常是因为我通常避免创建物理文件,但这也许是一个很好的解决方案。但是,我认为 excel 使用制表符而不是逗号不会有任何问题。它应该会自动检测分隔符,所以我预计不需要进行配置更改。但同样,里程可能会有所不同。不过很好的答案:-)
  • Excel 在选项卡上做得更好。有点奇怪,因为 csv 代表逗号分隔值。看例子,不需要先输出到文件。直接输出到php标准输出即可。
  • @evan,啊,我什至没有想到您要使用标准输出。我通常只是在字符串周围玩弄。但是由于您将其用作文件上下文,因此非常有意义。感谢您对如何改进我一直在研究的一些东西的想法。 :-)
【解决方案2】:

您可以安装和使用非常好的 PHP exel 库来导入 exel 文件以及导出 exel 中的数据。

更多信息在这里: http://phpexcel.codeplex.com/

否则问题本身就有点模糊,所以我只能这么说。 :/

【讨论】:

  • 非常感谢您提供的信息
【解决方案3】:

如果您将数据以 CSV 格式发送到浏览器(即 implode() 将结果集数组中的每个条目用 \t 分隔,并用 \n 分隔每一行),Excel 可以轻松地将其转换为文档时可以使用的内容已加载。

但请注意,您必须告诉浏览器它正在加载的文档是一个 excel 文件,以便它知道使用 excel 来加载文件。通过像这样提供内容类型和内容处置标头来做到这一点:

header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=exportExcel.xls");

请确保在发送 CSV 文本之前调用 header() 函数。

注意:我选择 \t(制表符)来分隔每个字段而不是逗号,因为根据我的经验,它们会引起问题,因为字段中包含逗号可能很常见。 .. 但也许不是你的特殊情况。

【讨论】:

  • 请注意,这不会有任何花哨的格式或表格装箱。卡米尔的图书馆可能会提供这一点。我的方法只会做一个简单的直接导出。
【解决方案4】:

假设你的mysql数据库和你的web主机在同一台服务器上,那么你应该可以在mysql中使用“select into outfile”方法。 http://dev.mysql.com/doc/refman/5.1/en/select-into.html

您可以使用这种语法创建一个 csv 文件(在 excel 中打开):

SELECT * FROM people INTO OUTFILE '/www/your/output/directory/output.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

然后你可以让人们像这样使用 php 下载文件:

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=/www/your/output/directory/output.csv");
header("Pragma: no-cache");
header("Expires: 0");

最后一部分来自其他帖子 -> create csv file

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2017-08-13
    • 2021-05-02
    • 2010-09-24
    • 1970-01-01
    • 2022-12-20
    • 2015-07-09
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多