24

我目前正在尝试找出从 PHP 创建 .xls 文件的最佳方法。在我看来,我需要做的就是将标题内容类型更改为“application/vnd.ms-excel”,然后以逗号分隔格式输出数据。这是最好的方法吗?

谢谢你的帮助!
都会

编辑

只将数据输出为 HTML 会不会很糟糕?我已经有一个要针对这个问题扩展的课程,所以我宁愿远离第三方解决方案。我只需要知道输出数据的最佳方式是什么,以便充分利用该文件格式。

在查看 PHPExcel 之后,它似乎是解决这个问题的最佳方法。感谢您的所有回答,如果可以的话,我会给出三个正确的答案。但是投票必须做:)

4

9 回答 9

19

它非常简单,因为 excel 支持 html 代码。所以你只需要在文件顶部添加一个标题..然后回显你的html代码!

header ( "Content-type: application/vnd.ms-excel" );
header ( "Content-Disposition: attachment; filename=foo_bar.xls" );
echo "<table><tr><th>Header1</th></tr><tr><td>value1</td></tr></table>";

这将生成一个excel文件!

于 2014-04-29T11:16:42.513 回答
18

取决于您需要 CSV 文件还是 XLS 文件。XLS 文件可以包含单元格的格式信息,以及行/列锁定、保护和其他 CSV 文件中不可能的功能。此外,请记住,Excel 在打开 CSV 文件时不正确支持 UTF-8 编码的内容。

如果你想要一个格式化的 XLS 文件,那么你需要一个库,例如PhpSpreadsheet可以编写具有该格式的文件,或者如果你的服务器在安装了 Excel 的 Windows 上运行,则需要 COM

于 2010-06-28T14:52:49.270 回答
3

您可以使用Microsoft Office 可以理解的XML 格式之一。

有关详细信息/规范,请参阅 Microsoft 的OpenXML 开发人员站点。

有一个名为PHPExcel的库,您可以查看它来帮助您解决这个问题。

当然,这一切都取决于您的意思:

“充分利用该文件格式”

如果您只有没有格式的简单表格,那么您可能只需要 CSV 文件;但是,如果您想使用电子表格的更多功能,我建议您看看 OpenXML。

于 2010-06-28T15:06:11.420 回答
2

您可以只输出 html,更新版本的 Excel 会读取它。我不知道你可以用它做多少格式化。

如果您需要数据输入、丰富的格式或公式,我已经使用PHPExcel取得了成功。

我的偏好是写出 CSV 文件。CSV 是一种非常容易编写的格式,并且可以从现有的 html 表格脚本轻松转换。它还具有可供各种非 Microsoft 电子表格程序读取的优点。如果您可以使 CSV 成为您的 Web 应用程序的首选文件格式,那么当您必须接受电子表格作为输入时,您将获得回报。读取和解析 CSV 文件比 Excel 文件容易得多。

于 2010-06-28T15:25:03.200 回答
1

试试XLS 文件包装器,比如SO 上的这篇文章

于 2010-06-28T14:47:35.507 回答
1

看看这个 PEAR 包:Spreadsheet Excel Writer

于 2010-06-28T14:47:43.120 回答
1

免责声明:我在开发 DocRaptor 的公司 Expected Behavior 工作。

也就是说,您可以使用 DocRaptor 从 HTML 生成 XLS 文件。DocRaptor 是一个 Ruby on Rails 项目,但您可以将它与 PHP 一起使用。这是我们的 PHP 示例:

DocRaptor PHP 示例

这是 DocRaptor 主页的另一个链接:

使用 DocRaptor 将 HTML 转为 Excel

于 2012-11-09T19:19:44.600 回答
-1

是的,这是一种可能的方式——如果您需要一个可以在 Excel 女士中打开的纯 CSV 文件。

如果您需要丰富的 XL​​S 文件,有很多选择,包括使用第三方 DLL,例如“CarlosAg.ExcelXmlWriter.dll”来创建 XLS 文件。你可以在网上搜索使用这个dll的示例或者看这里

于 2010-06-28T14:49:07.577 回答
-1

您可以开始使用这些文件。它将创建一个 excel 文件并帮助您下载它。

您可以在

01-简单下载-xlsx.php

$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Roll')
            ->setCellValue('B1', 'Name')
            ->setCellValue('C1', 'Total Classes')
            ->setCellValue('D1', 'Class Attended')
        ->setCellValue('E1', 'Percentage');

您可以使用 while 循环从这样的数据库中打印数据。

$i=2;   
while ($row = $database->fetch_array($result)) 
 { 

       $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$i, $row[0])
            ->setCellValue('B'.$i, $row[1])
            ->setCellValue('C'.$i, $row[2])
            ->setCellValue('D'.$i, $total)
        ->setCellValue('E'.$i, round(($row[2]/$total)*100));
          $i++;
 }
于 2013-12-30T16:28:51.833 回答